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