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 { Emitter, Event } from '../../../base/common/event.js';
7
>
import { Disposable, IDisposable, markAsSingleton, toDisposable } from '../../../base/common/lifecycle.js';
8
>
import * as strings from '../../../base/common/strings.js';
9
>
import { ITextModel } from '../model.js';
10
>
import { DEFAULT_WORD_REGEXP, ensureValidWordDefinition } from '../core/wordHelper.js';
11
>
import { EnterAction, FoldingRules, IAutoClosingPair, IndentationRule, LanguageConfiguration, AutoClosingPairs, CharacterPair, ExplicitLanguageConfiguration } from './languageConfiguration.js';
12
>
import { CharacterPairSupport } from './supports/characterPair.js';
13
>
import { BracketElectricCharacterSupport } from './supports/electricCharacter.js';
14
>
import { IndentRulesSupport } from './supports/indentRules.js';
15
>
import { OnEnterSupport } from './supports/onEnter.js';
16
>
import { RichEditBrackets } from './supports/richEditBrackets.js';
17
>
import { EditorAutoIndentStrategy } from '../config/editorOptions.js';
18
>
import { createDecorator } from '../../../platform/instantiation/common/instantiation.js';
19
>
import { IConfigurationService } from '../../../platform/configuration/common/configuration.js';
20
>
import { ILanguageService } from './language.js';
21
>
import { InstantiationType, registerSingleton } from '../../../platform/instantiation/common/extensions.js';
22
>
import { PLAINTEXT_LANGUAGE_ID } from './modesRegistry.js';
23
>
import { LanguageBracketsConfiguration } from './supports/languageBracketsConfiguration.js';
24
>
25
>
/**
26
>
* Interface used to support insertion of mode specific comments.
27
>
*/
28
>
export interface ICommentsConfiguration {
29
>
lineCommentToken?: string;
30
>
lineCommentNoIndent?: boolean;
31
>
blockCommentStartToken?: string;
32
>
blockCommentEndToken?: string;
33
>
}
34
>
35
>
export interface ILanguageConfigurationService {
36
>
readonly _serviceBrand: undefined;
37
>
38
>
readonly onDidChange: Event<LanguageConfigurationServiceChangeEvent>;
39
>
40
>
/**
41
>
* @param priority Use a higher number for higher priority
42
>
*/
43
>
register(languageId: string, configuration: LanguageConfiguration, priority?: number): IDisposable;
44
>
45
>
getLanguageConfiguration(languageId: string): ResolvedLanguageConfiguration;
46
>
47
>
}
48
>
49
>
export class LanguageConfigurationServiceChangeEvent {
50
>
constructor(public readonly languageId: string | undefined) { }
51
>
52
>
public affects(languageId: string): boolean {
53
return !this.languageId ? true : this.languageId === languageId;
54
}
56
>
57
>
export const ILanguageConfigurationService = createDecorator<ILanguageConfigurationService>('languageConfigurationService');
58
>
59
>
export class LanguageConfigurationService extends Disposable implements ILanguageConfigurationService {
60
>
_serviceBrand: undefined;
61
>
62
>
private readonly _registry = this._register(new LanguageConfigurationRegistry());
63
>
64
>
private readonly onDidChangeEmitter = this._register(new Emitter<LanguageConfigurationServiceChangeEvent>());
65
>
public readonly onDidChange = this.onDidChangeEmitter.event;
66
>
67
>
private readonly configurations = new Map<string, ResolvedLanguageConfiguration>();
68
>
69
>
constructor(
70
@IConfigurationService private readonly configurationService: IConfigurationService,
71
@ILanguageService private readonly languageService: ILanguageService