Skip to content

Commit ba61718

Browse files
committed
Fixes microsoft#62030: Ensure user configuration is always applied
1 parent 0b8d4cc commit ba61718

2 files changed

Lines changed: 16 additions & 9 deletions

File tree

src/vs/editor/common/services/modeServiceImpl.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ class LanguageSelection extends Disposable implements ILanguageSelection {
2121
private readonly _onDidChange: Emitter<LanguageIdentifier> = this._register(new Emitter<LanguageIdentifier>());
2222
public readonly onDidChange: Event<LanguageIdentifier> = this._onDidChange.event;
2323

24-
constructor(languagesRegistry: LanguagesRegistry, selector: () => LanguageIdentifier) {
24+
constructor(onLanguagesMaybeChanged: Event<void>, selector: () => LanguageIdentifier) {
2525
super();
2626
this._selector = selector;
2727
this.languageIdentifier = this._selector();
28-
this._register(languagesRegistry.onDidChange(() => this._evaluate()));
28+
this._register(onLanguagesMaybeChanged(() => this._evaluate()));
2929
}
3030

3131
private _evaluate(): void {
@@ -48,10 +48,14 @@ export class ModeServiceImpl implements IModeService {
4848
private readonly _onDidCreateMode: Emitter<IMode> = new Emitter<IMode>();
4949
public readonly onDidCreateMode: Event<IMode> = this._onDidCreateMode.event;
5050

51+
protected readonly _onLanguagesMaybeChanged: Emitter<void> = new Emitter<void>();
52+
private readonly onLanguagesMaybeChanged: Event<void> = this._onLanguagesMaybeChanged.event;
53+
5154
constructor(warnOnOverwrite = false) {
5255
this._instantiatedModes = {};
5356

5457
this._registry = new LanguagesRegistry(true, warnOnOverwrite);
58+
this._registry.onDidChange(() => this._onLanguagesMaybeChanged.fire());
5559
}
5660

5761
protected _onReady(): Promise<boolean> {
@@ -121,21 +125,21 @@ export class ModeServiceImpl implements IModeService {
121125
// --- instantiation
122126

123127
public create(commaSeparatedMimetypesOrCommaSeparatedIds: string): ILanguageSelection {
124-
return new LanguageSelection(this._registry, () => {
128+
return new LanguageSelection(this.onLanguagesMaybeChanged, () => {
125129
const modeId = this.getModeId(commaSeparatedMimetypesOrCommaSeparatedIds);
126130
return this._createModeAndGetLanguageIdentifier(modeId);
127131
});
128132
}
129133

130134
public createByLanguageName(languageName: string): ILanguageSelection {
131-
return new LanguageSelection(this._registry, () => {
135+
return new LanguageSelection(this.onLanguagesMaybeChanged, () => {
132136
const modeId = this._getModeIdByLanguageName(languageName);
133137
return this._createModeAndGetLanguageIdentifier(modeId);
134138
});
135139
}
136140

137141
public createByFilepathOrFirstLine(filepath: string, firstLine?: string): ILanguageSelection {
138-
return new LanguageSelection(this._registry, () => {
142+
return new LanguageSelection(this.onLanguagesMaybeChanged, () => {
139143
const modeId = this.getModeIdByFilepathOrFirstLine(filepath, firstLine);
140144
return this._createModeAndGetLanguageIdentifier(modeId);
141145
});

src/vs/workbench/services/mode/common/workbenchModeService.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,11 +137,15 @@ export class WorkbenchModeServiceImpl extends ModeServiceImpl {
137137

138138
});
139139

140+
this.updateMime();
140141
this._configurationService.onDidChangeConfiguration(e => {
141142
if (e.affectsConfiguration(FILES_ASSOCIATIONS_CONFIG)) {
142143
this.updateMime();
143144
}
144145
});
146+
this._extensionService.whenInstalledExtensionsRegistered().then(() => {
147+
this.updateMime();
148+
});
145149

146150
this.onDidCreateMode((mode) => {
147151
this._extensionService.activateByEvent(`onLanguage:${mode.getId()}`);
@@ -151,10 +155,7 @@ export class WorkbenchModeServiceImpl extends ModeServiceImpl {
151155
protected _onReady(): Promise<boolean> {
152156
if (!this._onReadyPromise) {
153157
this._onReadyPromise = Promise.resolve(
154-
this._extensionService.whenInstalledExtensionsRegistered().then(() => {
155-
this.updateMime();
156-
return true;
157-
})
158+
this._extensionService.whenInstalledExtensionsRegistered().then(() => true)
158159
);
159160
}
160161

@@ -176,6 +177,8 @@ export class WorkbenchModeServiceImpl extends ModeServiceImpl {
176177
mime.registerTextMime({ id: langId, mime: mimetype, filepattern: pattern, userConfigured: true });
177178
});
178179
}
180+
181+
this._onLanguagesMaybeChanged.fire();
179182
}
180183
}
181184

0 commit comments

Comments
 (0)