Skip to content

Commit 4d17e85

Browse files
authored
Wait for extension points to process (microsoft#223870)
1 parent 64e4666 commit 4d17e85

File tree

1 file changed

+23
-5
lines changed

1 file changed

+23
-5
lines changed

src/vs/workbench/services/preferences/browser/preferencesService.ts

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { getErrorMessage } from 'vs/base/common/errors';
7-
import { Emitter } from 'vs/base/common/event';
7+
import { Emitter, Event } from 'vs/base/common/event';
88
import { parse } from 'vs/base/common/json';
99
import { Disposable, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle';
1010
import * as network from 'vs/base/common/network';
@@ -46,6 +46,8 @@ import { ResourceSet } from 'vs/base/common/map';
4646
import { isEqual } from 'vs/base/common/resources';
4747
import { IURLService } from 'vs/platform/url/common/url';
4848
import { compareIgnoreCase } from 'vs/base/common/strings';
49+
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
50+
import { IProgressService, ProgressLocation } from 'vs/platform/progress/common/progress';
4951

5052
const emptyEditableSettingsContent = '{\n}';
5153

@@ -85,7 +87,9 @@ export class PreferencesService extends Disposable implements IPreferencesServic
8587
@ILabelService private readonly labelService: ILabelService,
8688
@IRemoteAgentService private readonly remoteAgentService: IRemoteAgentService,
8789
@ITextEditorService private readonly textEditorService: ITextEditorService,
88-
@IURLService urlService: IURLService
90+
@IURLService urlService: IURLService,
91+
@IExtensionService private readonly extensionService: IExtensionService,
92+
@IProgressService private readonly progressService: IProgressService
8993
) {
9094
super();
9195
// The default keybindings.json updates based on keyboard layouts, so here we make sure
@@ -627,10 +631,24 @@ export class PreferencesService extends Disposable implements IPreferencesServic
627631
return false;
628632
}
629633

630-
const openSettingsOptions: IOpenSettingsOptions = {};
631634
const settingInfo = uri.path.split('/').filter(part => !!part);
632-
if ((settingInfo.length > 0) && this.getSetting(settingInfo[0])) {
633-
openSettingsOptions.query = settingInfo[0];
635+
const settingId = ((settingInfo.length > 0) ? settingInfo[0] : undefined);
636+
if (!settingId) {
637+
this.openSettings();
638+
return true;
639+
}
640+
641+
let setting = this.getSetting(settingId);
642+
643+
if (!setting && this.extensionService.extensions.length === 0) {
644+
// wait for extension points to be processed
645+
await this.progressService.withProgress({ location: ProgressLocation.Window }, () => Event.toPromise(this.extensionService.onDidRegisterExtensions));
646+
setting = this.getSetting(settingId);
647+
}
648+
649+
const openSettingsOptions: IOpenSettingsOptions = {};
650+
if (setting) {
651+
openSettingsOptions.query = settingId;
634652
}
635653

636654
this.openSettings(openSettingsOptions);

0 commit comments

Comments
 (0)