From 7d9464d3ef22ffbeb6c4dee0241f3a1081dcae06 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Thu, 5 Jul 2018 15:07:08 +0200 Subject: [PATCH] #49708 Fix schema --- .../common/configurationRegistry.ts | 23 +++++++++++++++---- .../node/configurationService.ts | 2 +- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/vs/platform/configuration/common/configurationRegistry.ts b/src/vs/platform/configuration/common/configurationRegistry.ts index 716575efa05..ef37ffe80d5 100644 --- a/src/vs/platform/configuration/common/configurationRegistry.ts +++ b/src/vs/platform/configuration/common/configurationRegistry.ts @@ -34,6 +34,12 @@ export interface IConfigurationRegistry { */ notifyConfigurationSchemaUpdated(configuration: IConfigurationNode): void; + /** + * Event that fires whenver a configuration has been + * registered. + */ + onDidSchemaChange: Event; + /** * Event that fires whenver a configuration has been * registered. @@ -110,6 +116,9 @@ class ConfigurationRegistry implements IConfigurationRegistry { private overrideIdentifiers: string[] = []; private overridePropertyPattern: string; + private readonly _onDidSchemaChange: Emitter = new Emitter(); + readonly onDidSchemaChange: Event = this._onDidSchemaChange.event; + private readonly _onDidRegisterConfiguration: Emitter = new Emitter(); readonly onDidRegisterConfiguration: Event = this._onDidRegisterConfiguration.event; @@ -176,7 +185,7 @@ class ConfigurationRegistry implements IConfigurationRegistry { } private validateAndRegisterProperties(configuration: IConfigurationNode, validate: boolean = true, scope: ConfigurationScope = ConfigurationScope.WINDOW, overridable: boolean = false): string[] { - scope = configuration.scope !== void 0 && configuration.scope !== null ? configuration.scope : scope; + scope = types.isUndefinedOrNull(configuration.scope) ? scope : configuration.scope; overridable = configuration.overridable || overridable; let propertyKeys = []; let properties = configuration.properties; @@ -198,8 +207,11 @@ class ConfigurationRegistry implements IConfigurationRegistry { if (overridable) { property.overridable = true; } - if (property.scope === void 0) { - property.scope = scope; + + if (OVERRIDE_PROPERTY_PATTERN.test(key)) { + property.scope = void 0; // No scope for overridable properties `[${identifier}]` + } else { + property.scope = types.isUndefinedOrNull(property.scope) ? scope : property.scope; } // Add to properties maps @@ -240,7 +252,7 @@ class ConfigurationRegistry implements IConfigurationRegistry { function register(configuration: IConfigurationNode) { let properties = configuration.properties; if (properties) { - for (let key in properties) { + for (const key in properties) { allSettings.properties[key] = properties[key]; switch (properties[key].scope) { case ConfigurationScope.APPLICATION: @@ -261,6 +273,7 @@ class ConfigurationRegistry implements IConfigurationRegistry { } } register(configuration); + this._onDidSchemaChange.fire(); } private updateSchemaForOverrideSettingsConfiguration(configuration: IConfigurationNode): void { @@ -292,6 +305,8 @@ class ConfigurationRegistry implements IConfigurationRegistry { applicationSettings.patternProperties[this.overridePropertyPattern] = patternProperties; windowSettings.patternProperties[this.overridePropertyPattern] = patternProperties; resourceSettings.patternProperties[this.overridePropertyPattern] = patternProperties; + + this._onDidSchemaChange.fire(); } private update(configuration: IConfigurationNode): void { diff --git a/src/vs/workbench/services/configuration/node/configurationService.ts b/src/vs/workbench/services/configuration/node/configurationService.ts index 90f013f6b4a..641b8bdf8d2 100644 --- a/src/vs/workbench/services/configuration/node/configurationService.ts +++ b/src/vs/workbench/services/configuration/node/configurationService.ts @@ -80,7 +80,7 @@ export class WorkspaceService extends Disposable implements IWorkspaceConfigurat this._register(this.userConfiguration.onDidChangeConfiguration(() => this.onUserConfigurationChanged())); this._register(this.workspaceConfiguration.onDidUpdateConfiguration(() => this.onWorkspaceConfigurationChanged())); - this._register(Registry.as(Extensions.Configuration).onDidRegisterConfiguration(e => this.registerConfigurationSchemas())); + this._register(Registry.as(Extensions.Configuration).onDidSchemaChange(e => this.registerConfigurationSchemas())); this._register(Registry.as(Extensions.Configuration).onDidRegisterConfiguration(configurationProperties => this.onDefaultConfigurationChanged(configurationProperties))); this.workspaceEditingQueue = new Queue(); -- GitLab