From 5e5bb86a25dffdcc8805c5dfd803ce1e556438b3 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Thu, 25 Nov 2021 11:37:31 +0100 Subject: [PATCH] take extension id while registering defaults --- .../common/configurationRegistry.ts | 25 +++++++++++-------- .../test/common/configurationRegistry.test.ts | 12 ++++----- .../api/browser/mainThreadTunnelService.ts | 4 +-- .../api/common/configurationExtensionPoint.ts | 14 +++++------ .../contrib/remote/browser/remoteExplorer.ts | 2 +- .../configuration/browser/configuration.ts | 2 +- .../test/browser/configuration.test.ts | 4 +-- .../test/browser/configurationService.test.ts | 6 +++-- 8 files changed, 38 insertions(+), 31 deletions(-) diff --git a/src/vs/platform/configuration/common/configurationRegistry.ts b/src/vs/platform/configuration/common/configurationRegistry.ts index 6538dbdf2cf..c0c6d51a5b6 100644 --- a/src/vs/platform/configuration/common/configurationRegistry.ts +++ b/src/vs/platform/configuration/common/configurationRegistry.ts @@ -48,12 +48,12 @@ export interface IConfigurationRegistry { /** * Register multiple default configurations to the registry. */ - registerDefaultConfigurations(defaultConfigurations: IStringDictionary[]): void; + registerDefaultConfigurations(defaultConfigurations: IConfigurationDefaults[]): void; /** * Deregister multiple default configurations from the registry. */ - deregisterDefaultConfigurations(defaultConfigurations: IStringDictionary[]): void; + deregisterDefaultConfigurations(defaultConfigurations: IConfigurationDefaults[]): void; /** * Return the registered configuration defaults overrides @@ -182,6 +182,11 @@ export interface IConfigurationNode { extensionInfo?: IConfigurationExtensionInfo; } +export interface IConfigurationDefaults { + overrides: IStringDictionary; + extensionId?: string; +} + export const allSettings: { properties: IStringDictionary, patternProperties: IStringDictionary } = { properties: {}, patternProperties: {} }; export const applicationSettings: { properties: IStringDictionary, patternProperties: IStringDictionary } = { properties: {}, patternProperties: {} }; export const machineSettings: { properties: IStringDictionary, patternProperties: IStringDictionary } = { properties: {}, patternProperties: {} }; @@ -255,16 +260,16 @@ class ConfigurationRegistry implements IConfigurationRegistry { this._onDidUpdateConfiguration.fire({ properties: distinct(properties) }); } - public registerDefaultConfigurations(defaultConfigurations: IStringDictionary[]): void { + public registerDefaultConfigurations(configurationDefaults: IConfigurationDefaults[]): void { const properties: string[] = []; const overrideIdentifiers: string[] = []; - for (const defaultConfiguration of defaultConfigurations) { - for (const key in defaultConfiguration) { + for (const { overrides } of configurationDefaults) { + for (const key in overrides) { properties.push(key); if (OVERRIDE_PROPERTY_REGEX.test(key)) { - this.configurationDefaultsOverrides[key] = { ...(this.configurationDefaultsOverrides[key] || {}), ...defaultConfiguration[key] }; + this.configurationDefaultsOverrides[key] = { ...(this.configurationDefaultsOverrides[key] || {}), ...overrides[key] }; const property: IConfigurationPropertySchema = { type: 'object', default: this.configurationDefaultsOverrides[key], @@ -275,7 +280,7 @@ class ConfigurationRegistry implements IConfigurationRegistry { this.configurationProperties[key] = property; this.defaultLanguageConfigurationOverridesNode.properties![key] = property; } else { - this.configurationDefaultsOverrides[key] = defaultConfiguration[key]; + this.configurationDefaultsOverrides[key] = overrides[key]; const property = this.configurationProperties[key]; if (property) { this.updatePropertyDefaultValue(key, property); @@ -290,10 +295,10 @@ class ConfigurationRegistry implements IConfigurationRegistry { this._onDidUpdateConfiguration.fire({ properties, defaultsOverrides: true }); } - public deregisterDefaultConfigurations(defaultConfigurations: IStringDictionary[]): void { + public deregisterDefaultConfigurations(defaultConfigurations: IConfigurationDefaults[]): void { const properties: string[] = []; - for (const defaultConfiguration of defaultConfigurations) { - for (const key in defaultConfiguration) { + for (const { overrides } of defaultConfigurations) { + for (const key in overrides) { properties.push(key); delete this.configurationDefaultsOverrides[key]; if (OVERRIDE_PROPERTY_REGEX.test(key)) { diff --git a/src/vs/platform/configuration/test/common/configurationRegistry.test.ts b/src/vs/platform/configuration/test/common/configurationRegistry.test.ts index 03082cc0d2b..83314c83ad3 100644 --- a/src/vs/platform/configuration/test/common/configurationRegistry.test.ts +++ b/src/vs/platform/configuration/test/common/configurationRegistry.test.ts @@ -21,16 +21,16 @@ suite('ConfigurationRegistry', () => { } } }); - configurationRegistry.registerDefaultConfigurations([{ 'config': { a: 1, b: 2 } }]); - configurationRegistry.registerDefaultConfigurations([{ '[lang]': { a: 2, c: 3 } }]); + configurationRegistry.registerDefaultConfigurations([{ overrides: { 'config': { a: 1, b: 2 } } }]); + configurationRegistry.registerDefaultConfigurations([{ overrides: { '[lang]': { a: 2, c: 3 } } }]); assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 1, b: 2 }); assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { a: 2, c: 3 }); }); test('configuration override defaults - merges defaults', async () => { - configurationRegistry.registerDefaultConfigurations([{ '[lang]': { a: 1, b: 2 } }]); - configurationRegistry.registerDefaultConfigurations([{ '[lang]': { a: 2, c: 3 } }]); + configurationRegistry.registerDefaultConfigurations([{ overrides: { '[lang]': { a: 1, b: 2 } } }]); + configurationRegistry.registerDefaultConfigurations([{ overrides: { '[lang]': { a: 2, c: 3 } } }]); assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['[lang]'].default, { a: 2, b: 2, c: 3 }); }); @@ -45,8 +45,8 @@ suite('ConfigurationRegistry', () => { } } }); - configurationRegistry.registerDefaultConfigurations([{ 'config': { a: 1, b: 2 } }]); - configurationRegistry.registerDefaultConfigurations([{ 'config': { a: 2, c: 3 } }]); + configurationRegistry.registerDefaultConfigurations([{ overrides: { 'config': { a: 1, b: 2 } } }]); + configurationRegistry.registerDefaultConfigurations([{ overrides: { 'config': { a: 2, c: 3 } } }]); assert.deepStrictEqual(configurationRegistry.getConfigurationProperties()['config'].default, { a: 2, c: 3 }); }); diff --git a/src/vs/workbench/api/browser/mainThreadTunnelService.ts b/src/vs/workbench/api/browser/mainThreadTunnelService.ts index a1d54ed6423..025f8f523e0 100644 --- a/src/vs/workbench/api/browser/mainThreadTunnelService.ts +++ b/src/vs/workbench/api/browser/mainThreadTunnelService.ts @@ -204,12 +204,12 @@ export class MainThreadTunnelService extends Disposable implements MainThreadTun switch (source) { case CandidatePortSource.None: { Registry.as(ConfigurationExtensions.Configuration) - .registerDefaultConfigurations([{ 'remote.autoForwardPorts': false }]); + .registerDefaultConfigurations([{ overrides: { 'remote.autoForwardPorts': false } }]); break; } case CandidatePortSource.Output: { Registry.as(ConfigurationExtensions.Configuration) - .registerDefaultConfigurations([{ 'remote.autoForwardPortsSource': PORT_AUTO_SOURCE_SETTING_OUTPUT }]); + .registerDefaultConfigurations([{ overrides: { 'remote.autoForwardPortsSource': PORT_AUTO_SOURCE_SETTING_OUTPUT } }]); break; } default: // Do nothing, the defaults for these settings should be used. diff --git a/src/vs/workbench/api/common/configurationExtensionPoint.ts b/src/vs/workbench/api/common/configurationExtensionPoint.ts index 77824674812..d59ced8280d 100644 --- a/src/vs/workbench/api/common/configurationExtensionPoint.ts +++ b/src/vs/workbench/api/common/configurationExtensionPoint.ts @@ -8,7 +8,7 @@ import * as objects from 'vs/base/common/objects'; import { Registry } from 'vs/platform/registry/common/platform'; import { IJSONSchema } from 'vs/base/common/jsonSchema'; import { ExtensionsRegistry, IExtensionPointUser } from 'vs/workbench/services/extensions/common/extensionsRegistry'; -import { IConfigurationNode, IConfigurationRegistry, Extensions, resourceLanguageSettingsSchemaId, validateProperty, ConfigurationScope, OVERRIDE_PROPERTY_PATTERN, OVERRIDE_PROPERTY_REGEX, windowSettings, resourceSettings, machineOverridableSettings } from 'vs/platform/configuration/common/configurationRegistry'; +import { IConfigurationNode, IConfigurationRegistry, Extensions, resourceLanguageSettingsSchemaId, validateProperty, ConfigurationScope, OVERRIDE_PROPERTY_PATTERN, OVERRIDE_PROPERTY_REGEX, windowSettings, resourceSettings, machineOverridableSettings, IConfigurationDefaults } from 'vs/platform/configuration/common/configurationRegistry'; import { IJSONContributionRegistry, Extensions as JSONExtensions } from 'vs/platform/jsonschemas/common/jsonContributionRegistry'; import { workspaceSettingsSchemaId, launchSchemaId, tasksSchemaId } from 'vs/workbench/services/configuration/common/configuration'; import { isObject } from 'vs/base/common/types'; @@ -144,24 +144,24 @@ const defaultConfigurationExtPoint = ExtensionsRegistry.registerExtensionPoint { if (removed.length) { - const removedDefaultConfigurations = removed.map>(extension => objects.deepClone(extension.value)); + const removedDefaultConfigurations = removed.map(extension => ({ overrides: objects.deepClone(extension.value), extensionId: extension.description.identifier.value })); configurationRegistry.deregisterDefaultConfigurations(removedDefaultConfigurations); } if (added.length) { const registeredProperties = configurationRegistry.getConfigurationProperties(); const allowedScopes = [ConfigurationScope.MACHINE_OVERRIDABLE, ConfigurationScope.WINDOW, ConfigurationScope.RESOURCE, ConfigurationScope.LANGUAGE_OVERRIDABLE]; - const addedDefaultConfigurations = added.map>(extension => { - const defaults: IStringDictionary = objects.deepClone(extension.value); - for (const key of Object.keys(defaults)) { + const addedDefaultConfigurations = added.map(extension => { + const overrides: IStringDictionary = objects.deepClone(extension.value); + for (const key of Object.keys(overrides)) { if (!OVERRIDE_PROPERTY_REGEX.test(key)) { const registeredPropertyScheme = registeredProperties[key]; if (registeredPropertyScheme.scope && !allowedScopes.includes(registeredPropertyScheme.scope)) { extension.collector.warn(nls.localize('config.property.defaultConfiguration.warning', "Cannot register configuration defaults for '{0}'. Only defaults for machine-overridable, window, resource and language overridable scoped settings are supported.", key)); - delete defaults[key]; + delete overrides[key]; } } } - return defaults; + return { overrides, extensionId: extension.description.identifier.value }; }); configurationRegistry.registerDefaultConfigurations(addedDefaultConfigurations); } diff --git a/src/vs/workbench/contrib/remote/browser/remoteExplorer.ts b/src/vs/workbench/contrib/remote/browser/remoteExplorer.ts index fa8371041cf..c28ed8eea3b 100644 --- a/src/vs/workbench/contrib/remote/browser/remoteExplorer.ts +++ b/src/vs/workbench/contrib/remote/browser/remoteExplorer.ts @@ -200,7 +200,7 @@ export class AutomaticPortForwarding extends Disposable implements IWorkbenchCon remoteAgentService.getEnvironment().then(environment => { if (environment?.os !== OperatingSystem.Linux) { Registry.as(ConfigurationExtensions.Configuration) - .registerDefaultConfigurations([{ 'remote.autoForwardPortsSource': PORT_AUTO_SOURCE_SETTING_OUTPUT }]); + .registerDefaultConfigurations([{ overrides: { 'remote.autoForwardPortsSource': PORT_AUTO_SOURCE_SETTING_OUTPUT } }]); this._register(new OutputAutomaticPortForwarding(terminalService, notificationService, openerService, externalOpenerService, remoteExplorerService, configurationService, debugService, tunnelService, remoteAgentService, hostService, logService, () => false)); } else { diff --git a/src/vs/workbench/services/configuration/browser/configuration.ts b/src/vs/workbench/services/configuration/browser/configuration.ts index 328689e5999..d9bd5b473be 100644 --- a/src/vs/workbench/services/configuration/browser/configuration.ts +++ b/src/vs/workbench/services/configuration/browser/configuration.ts @@ -43,7 +43,7 @@ export class DefaultConfiguration extends Disposable { ) { super(); if (environmentService.options?.configurationDefaults) { - this.configurationRegistry.registerDefaultConfigurations([environmentService.options.configurationDefaults]); + this.configurationRegistry.registerDefaultConfigurations([{ overrides: environmentService.options.configurationDefaults }]); } } diff --git a/src/vs/workbench/services/configuration/test/browser/configuration.test.ts b/src/vs/workbench/services/configuration/test/browser/configuration.test.ts index 8ab651ca17e..29fa4cfa729 100644 --- a/src/vs/workbench/services/configuration/test/browser/configuration.test.ts +++ b/src/vs/workbench/services/configuration/test/browser/configuration.test.ts @@ -44,7 +44,7 @@ suite('DefaultConfiguration', () => { teardown(() => { configurationRegistry.deregisterConfigurations(configurationRegistry.getConfigurations()); - configurationRegistry.deregisterDefaultConfigurations([configurationRegistry.getConfigurationDefaultsOverrides()]); + configurationRegistry.deregisterDefaultConfigurations([{ overrides: configurationRegistry.getConfigurationDefaultsOverrides() }]); }); test('configuration default overrides are read from environment', async () => { @@ -138,7 +138,7 @@ suite('DefaultConfiguration', () => { const testObject = new DefaultConfiguration(configurationCache, TestEnvironmentService); await testObject.initialize(); const promise = Event.toPromise(testObject.onDidChangeConfiguration); - configurationRegistry.registerDefaultConfigurations([{ 'test.configurationDefaultsOverride': 'newoverrideValue' }]); + configurationRegistry.registerDefaultConfigurations([{ overrides: { 'test.configurationDefaultsOverride': 'newoverrideValue' } }]); await promise; const actual = JSON.parse(await configurationCache.read(cacheKey)); diff --git a/src/vs/workbench/services/configuration/test/browser/configurationService.test.ts b/src/vs/workbench/services/configuration/test/browser/configurationService.test.ts index 495086226d0..ef8885db071 100644 --- a/src/vs/workbench/services/configuration/test/browser/configurationService.test.ts +++ b/src/vs/workbench/services/configuration/test/browser/configurationService.test.ts @@ -672,8 +672,10 @@ suite('WorkspaceConfigurationService - Folder', () => { }); configurationRegistry.registerDefaultConfigurations([{ - '[jsonc]': { - 'configurationService.folder.languageSetting': 'languageValue' + overrides: { + '[jsonc]': { + 'configurationService.folder.languageSetting': 'languageValue' + } } }]); });