Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/comments/browser/commentsInputContentProvider.ts
3296 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { Disposable } from '../../../../base/common/lifecycle.js';
7
import { Schemas } from '../../../../base/common/network.js';
8
import { URI } from '../../../../base/common/uri.js';
9
import { ICodeEditor } from '../../../../editor/browser/editorBrowser.js';
10
import { ICodeEditorService } from '../../../../editor/browser/services/codeEditorService.js';
11
import { IEditorContribution, ScrollType } from '../../../../editor/common/editorCommon.js';
12
import { ILanguageService } from '../../../../editor/common/languages/language.js';
13
import { ITextModel } from '../../../../editor/common/model.js';
14
import { IModelService } from '../../../../editor/common/services/model.js';
15
import { ITextModelContentProvider, ITextModelService } from '../../../../editor/common/services/resolverService.js';
16
import { ITextResourceEditorInput } from '../../../../platform/editor/common/editor.js';
17
import { applyTextEditorOptions } from '../../../common/editor/editorOptions.js';
18
import { SimpleCommentEditor } from './simpleCommentEditor.js';
19
20
export class CommentsInputContentProvider extends Disposable implements ITextModelContentProvider, IEditorContribution {
21
22
public static readonly ID = 'comments.input.contentProvider';
23
24
constructor(
25
@ITextModelService textModelService: ITextModelService,
26
@ICodeEditorService codeEditorService: ICodeEditorService,
27
@IModelService private readonly _modelService: IModelService,
28
@ILanguageService private readonly _languageService: ILanguageService,
29
) {
30
super();
31
this._register(textModelService.registerTextModelContentProvider(Schemas.commentsInput, this));
32
33
this._register(codeEditorService.registerCodeEditorOpenHandler(async (input: ITextResourceEditorInput, editor: ICodeEditor | null, _sideBySide?: boolean): Promise<ICodeEditor | null> => {
34
if (!(editor instanceof SimpleCommentEditor)) {
35
return null;
36
}
37
38
if (editor.getModel()?.uri.toString() !== input.resource.toString()) {
39
return null;
40
}
41
42
if (input.options) {
43
applyTextEditorOptions(input.options, editor, ScrollType.Immediate);
44
}
45
return editor;
46
}));
47
}
48
49
async provideTextContent(resource: URI): Promise<ITextModel | null> {
50
const existing = this._modelService.getModel(resource);
51
return existing ?? this._modelService.createModel('', this._languageService.createById('markdown'), resource);
52
}
53
}
54
55