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