diff --git a/src/vs/platform/configuration/common/configuration.ts b/src/vs/platform/configuration/common/configuration.ts index 06a98c7918f..2937bca8f1f 100644 --- a/src/vs/platform/configuration/common/configuration.ts +++ b/src/vs/platform/configuration/common/configuration.ts @@ -83,6 +83,8 @@ export interface IConfigurationValue { readonly workspace?: { value?: T, override?: T }; readonly workspaceFolder?: { value?: T, override?: T }; readonly memory?: { value?: T, override?: T }; + + readonly overrideIdentifiers?: string[]; } export interface IConfigurationService { diff --git a/src/vs/platform/configuration/common/configurationModels.ts b/src/vs/platform/configuration/common/configurationModels.ts index 759376b9862..ee715c1631f 100644 --- a/src/vs/platform/configuration/common/configurationModels.ts +++ b/src/vs/platform/configuration/common/configurationModels.ts @@ -391,6 +391,7 @@ export class Configuration { const workspaceFolderValue = folderConfigurationModel ? overrides.overrideIdentifier ? folderConfigurationModel.freeze().override(overrides.overrideIdentifier).getValue(key) : folderConfigurationModel.freeze().getValue(key) : undefined; const memoryValue = overrides.overrideIdentifier ? memoryConfigurationModel.override(overrides.overrideIdentifier).getValue(key) : memoryConfigurationModel.getValue(key); const value = consolidateConfigurationModel.getValue(key); + const overrideIdentifiers: string[] = arrays.distinct(arrays.flatten(consolidateConfigurationModel.overrides.map(override => override.identifiers))).filter(overrideIdentifier => consolidateConfigurationModel.getOverrideValue(key, overrideIdentifier) !== undefined); return { defaultValue: defaultValue, @@ -409,6 +410,8 @@ export class Configuration { workspace: workspaceValue !== undefined ? { value: this._workspaceConfiguration.freeze().getValue(key), override: overrides.overrideIdentifier ? this._workspaceConfiguration.freeze().getOverrideValue(key, overrides.overrideIdentifier) : undefined } : undefined, workspaceFolder: workspaceFolderValue !== undefined ? { value: folderConfigurationModel?.freeze().getValue(key), override: overrides.overrideIdentifier ? folderConfigurationModel?.freeze().getOverrideValue(key, overrides.overrideIdentifier) : undefined } : undefined, memory: memoryValue !== undefined ? { value: memoryConfigurationModel.getValue(key), override: overrides.overrideIdentifier ? memoryConfigurationModel.getOverrideValue(key, overrides.overrideIdentifier) : undefined } : undefined, + + overrideIdentifiers: overrideIdentifiers.length ? overrideIdentifiers : undefined }; } diff --git a/src/vs/platform/configuration/test/common/configurationModels.test.ts b/src/vs/platform/configuration/test/common/configurationModels.test.ts index daf54b4b9f5..1ff040dce84 100644 --- a/src/vs/platform/configuration/test/common/configurationModels.test.ts +++ b/src/vs/platform/configuration/test/common/configurationModels.test.ts @@ -361,6 +361,17 @@ suite('CustomConfigurationModel', () => { suite('Configuration', () => { + test('Test inspect for overrideIdentifiers', () => { + const defaultConfigurationModel = parseConfigurationModel({ '[l1]': { 'a': 1 }, '[l2]': { 'b': 1 } }); + const userConfigurationModel = parseConfigurationModel({ '[l3]': { 'a': 2 } }); + const workspaceConfigurationModel = parseConfigurationModel({ '[l1]': { 'a': 3 }, '[l4]': { 'a': 3 } }); + const testObject: Configuration = new Configuration(defaultConfigurationModel, userConfigurationModel, new ConfigurationModel(), workspaceConfigurationModel); + + const { overrideIdentifiers } = testObject.inspect('a', {}, undefined); + + assert.deepEqual(overrideIdentifiers, ['l1', 'l3', 'l4']); + }); + test('Test update value', () => { const parser = new ConfigurationModelParser('test'); parser.parseContent(JSON.stringify({ 'a': 1 })); @@ -468,7 +479,7 @@ suite('Configuration', () => { }); - test('Test compare and deletre workspace folder configuration', () => { + test('Test compare and delete workspace folder configuration', () => { const testObject = new Configuration(new ConfigurationModel(), new ConfigurationModel()); testObject.updateFolderConfiguration(URI.file('file1'), toConfigurationModel({ 'editor.lineNumbers': 'off', @@ -484,6 +495,12 @@ suite('Configuration', () => { }); + function parseConfigurationModel(content: any): ConfigurationModel { + const parser = new ConfigurationModelParser('test'); + parser.parseContent(JSON.stringify(content)); + return parser.configurationModel; + } + }); suite('ConfigurationChangeEvent', () => { diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index 4db9195fd09..15d667e14fc 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -1431,6 +1431,8 @@ declare module 'vscode' { workspaceLanguageValue?: T; workspaceFolderLanguageValue?: T; + languages?: string[]; + } | undefined; /** diff --git a/src/vs/workbench/api/common/extHostConfiguration.ts b/src/vs/workbench/api/common/extHostConfiguration.ts index aeabbaed7c1..ad9446b7394 100644 --- a/src/vs/workbench/api/common/extHostConfiguration.ts +++ b/src/vs/workbench/api/common/extHostConfiguration.ts @@ -45,6 +45,8 @@ type ConfigurationInspect = { userLanguageValue?: T; workspaceLanguageValue?: T; workspaceFolderLanguageValue?: T; + + languages?: string[]; }; function isUri(thing: any): thing is vscode.Uri { @@ -264,6 +266,8 @@ export class ExtHostConfigProvider { userLanguageValue: config.user?.override, workspaceLanguageValue: config.workspace?.override, workspaceFolderLanguageValue: config.workspaceFolder?.override, + + languages: config.overrideIdentifiers }; } return undefined;