Path: blob/main/src/vs/editor/test/common/testTextModel.ts
3294 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 { DisposableStore, IDisposable } from '../../../base/common/lifecycle.js';6import { URI } from '../../../base/common/uri.js';7import { BracketPairColorizationOptions, DefaultEndOfLine, ITextBufferFactory, ITextModelCreationOptions } from '../../common/model.js';8import { TextModel } from '../../common/model/textModel.js';9import { ILanguageConfigurationService } from '../../common/languages/languageConfigurationRegistry.js';10import { ILanguageService } from '../../common/languages/language.js';11import { LanguageService } from '../../common/services/languageService.js';12import { ITextResourcePropertiesService } from '../../common/services/textResourceConfiguration.js';13import { TestLanguageConfigurationService } from './modes/testLanguageConfigurationService.js';14import { IConfigurationService } from '../../../platform/configuration/common/configuration.js';15import { TestConfigurationService } from '../../../platform/configuration/test/common/testConfigurationService.js';16import { IDialogService } from '../../../platform/dialogs/common/dialogs.js';17import { TestDialogService } from '../../../platform/dialogs/test/common/testDialogService.js';18import { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';19import { ILogService, NullLogService } from '../../../platform/log/common/log.js';20import { INotificationService } from '../../../platform/notification/common/notification.js';21import { TestNotificationService } from '../../../platform/notification/test/common/testNotificationService.js';22import { IThemeService } from '../../../platform/theme/common/themeService.js';23import { TestThemeService } from '../../../platform/theme/test/common/testThemeService.js';24import { IUndoRedoService } from '../../../platform/undoRedo/common/undoRedo.js';25import { UndoRedoService } from '../../../platform/undoRedo/common/undoRedoService.js';26import { TestTextResourcePropertiesService } from './services/testTextResourcePropertiesService.js';27import { IModelService } from '../../common/services/model.js';28import { ModelService } from '../../common/services/modelService.js';29import { createServices, ServiceIdCtorPair, TestInstantiationService } from '../../../platform/instantiation/test/common/instantiationServiceMock.js';30import { PLAINTEXT_LANGUAGE_ID } from '../../common/languages/modesRegistry.js';31import { ILanguageFeatureDebounceService, LanguageFeatureDebounceService } from '../../common/services/languageFeatureDebounce.js';32import { ILanguageFeaturesService } from '../../common/services/languageFeatures.js';33import { LanguageFeaturesService } from '../../common/services/languageFeaturesService.js';34import { IEnvironmentService } from '../../../platform/environment/common/environment.js';35import { mock } from '../../../base/test/common/mock.js';36import { ITreeSitterLibraryService } from '../../common/services/treeSitter/treeSitterLibraryService.js';37import { TestTreeSitterLibraryService } from './services/testTreeSitterLibraryService.js';3839class TestTextModel extends TextModel {40public registerDisposable(disposable: IDisposable): void {41this._register(disposable);42}43}4445export function withEditorModel(text: string[], callback: (model: TextModel) => void): void {46const model = createTextModel(text.join('\n'));47callback(model);48model.dispose();49}5051export interface IRelaxedTextModelCreationOptions {52tabSize?: number;53indentSize?: number | 'tabSize';54insertSpaces?: boolean;55detectIndentation?: boolean;56trimAutoWhitespace?: boolean;57defaultEOL?: DefaultEndOfLine;58isForSimpleWidget?: boolean;59largeFileOptimizations?: boolean;60bracketColorizationOptions?: BracketPairColorizationOptions;61}6263function resolveOptions(_options: IRelaxedTextModelCreationOptions): ITextModelCreationOptions {64const defaultOptions = TextModel.DEFAULT_CREATION_OPTIONS;65return {66tabSize: (typeof _options.tabSize === 'undefined' ? defaultOptions.tabSize : _options.tabSize),67indentSize: (typeof _options.indentSize === 'undefined' ? defaultOptions.indentSize : _options.indentSize),68insertSpaces: (typeof _options.insertSpaces === 'undefined' ? defaultOptions.insertSpaces : _options.insertSpaces),69detectIndentation: (typeof _options.detectIndentation === 'undefined' ? defaultOptions.detectIndentation : _options.detectIndentation),70trimAutoWhitespace: (typeof _options.trimAutoWhitespace === 'undefined' ? defaultOptions.trimAutoWhitespace : _options.trimAutoWhitespace),71defaultEOL: (typeof _options.defaultEOL === 'undefined' ? defaultOptions.defaultEOL : _options.defaultEOL),72isForSimpleWidget: (typeof _options.isForSimpleWidget === 'undefined' ? defaultOptions.isForSimpleWidget : _options.isForSimpleWidget),73largeFileOptimizations: (typeof _options.largeFileOptimizations === 'undefined' ? defaultOptions.largeFileOptimizations : _options.largeFileOptimizations),74bracketPairColorizationOptions: (typeof _options.bracketColorizationOptions === 'undefined' ? defaultOptions.bracketPairColorizationOptions : _options.bracketColorizationOptions),75};76}7778export function createTextModel(text: string | ITextBufferFactory, languageId: string | null = null, options: IRelaxedTextModelCreationOptions = TextModel.DEFAULT_CREATION_OPTIONS, uri: URI | null = null): TextModel {79const disposables = new DisposableStore();80const instantiationService = createModelServices(disposables);81const model = instantiateTextModel(instantiationService, text, languageId, options, uri);82model.registerDisposable(disposables);83return model;84}8586export function instantiateTextModel(instantiationService: IInstantiationService, text: string | ITextBufferFactory, languageId: string | null = null, _options: IRelaxedTextModelCreationOptions = TextModel.DEFAULT_CREATION_OPTIONS, uri: URI | null = null): TestTextModel {87const options = resolveOptions(_options);88return instantiationService.createInstance(TestTextModel, text, languageId || PLAINTEXT_LANGUAGE_ID, options, uri);89}9091export function createModelServices(disposables: DisposableStore, services: ServiceIdCtorPair<any>[] = []): TestInstantiationService {92return createServices(disposables, services.concat([93[INotificationService, TestNotificationService],94[IDialogService, TestDialogService],95[IUndoRedoService, UndoRedoService],96[ILanguageService, LanguageService],97[ILanguageConfigurationService, TestLanguageConfigurationService],98[IConfigurationService, TestConfigurationService],99[ITextResourcePropertiesService, TestTextResourcePropertiesService],100[IThemeService, TestThemeService],101[ILogService, NullLogService],102[IEnvironmentService, new class extends mock<IEnvironmentService>() {103override isBuilt: boolean = true;104override isExtensionDevelopment: boolean = false;105}],106[ILanguageFeatureDebounceService, LanguageFeatureDebounceService],107[ILanguageFeaturesService, LanguageFeaturesService],108[IModelService, ModelService],109[IModelService, ModelService],110[ITreeSitterLibraryService, TestTreeSitterLibraryService],111]));112}113114115