From b2463e4a3530d1e5bfd0d0d352fcf5ec2ce71898 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Wed, 29 Jan 2020 15:51:38 +0100 Subject: [PATCH] Fix #89481 --- .../common/configurationModels.ts | 2 +- src/vs/vscode.d.ts | 2 +- .../api/common/extHostConfiguration.ts | 12 +-- .../api/extHostConfiguration.test.ts | 79 ++++++++++++++++++- 4 files changed, 86 insertions(+), 9 deletions(-) diff --git a/src/vs/platform/configuration/common/configurationModels.ts b/src/vs/platform/configuration/common/configurationModels.ts index ee715c1631f..7ef1fa5fa2a 100644 --- a/src/vs/platform/configuration/common/configurationModels.ts +++ b/src/vs/platform/configuration/common/configurationModels.ts @@ -89,7 +89,7 @@ export class ConfigurationModel implements IConfigurationModel { contents[key] = contentsForKey; } - return new ConfigurationModel(contents); + return new ConfigurationModel(contents, this.keys, this.overrides); } merge(...others: ConfigurationModel[]): ConfigurationModel { diff --git a/src/vs/vscode.d.ts b/src/vs/vscode.d.ts index d501d776f2c..f43fbf6c8e4 100644 --- a/src/vs/vscode.d.ts +++ b/src/vs/vscode.d.ts @@ -4360,7 +4360,7 @@ declare module 'vscode' { workspaceFolderValue?: T, defaultLanguageValue?: T; - userLanguageValue?: T; + globalLanguageValue?: T; workspaceLanguageValue?: T; workspaceFolderLanguageValue?: T; diff --git a/src/vs/workbench/api/common/extHostConfiguration.ts b/src/vs/workbench/api/common/extHostConfiguration.ts index 6042075bc00..218ab44f448 100644 --- a/src/vs/workbench/api/common/extHostConfiguration.ts +++ b/src/vs/workbench/api/common/extHostConfiguration.ts @@ -42,7 +42,7 @@ type ConfigurationInspect = { workspaceFolderValue?: T, defaultLanguageValue?: T; - userLanguageValue?: T; + globalLanguageValue?: T; workspaceLanguageValue?: T; workspaceFolderLanguageValue?: T; @@ -260,13 +260,13 @@ export class ExtHostConfigProvider { return { key, - defaultValue: config.defaultValue, - globalValue: config.userValue, - workspaceValue: config.workspaceValue, - workspaceFolderValue: config.workspaceFolderValue, + defaultValue: config.default?.value, + globalValue: config.user?.value, + workspaceValue: config.workspace?.value, + workspaceFolderValue: config.workspaceFolder?.value, defaultLanguageValue: config.default?.override, - userLanguageValue: config.user?.override, + globalLanguageValue: config.user?.override, workspaceLanguageValue: config.workspace?.override, workspaceFolderLanguageValue: config.workspaceFolder?.override, diff --git a/src/vs/workbench/test/electron-browser/api/extHostConfiguration.test.ts b/src/vs/workbench/test/electron-browser/api/extHostConfiguration.test.ts index a56f1d41f4c..69bba733204 100644 --- a/src/vs/workbench/test/electron-browser/api/extHostConfiguration.test.ts +++ b/src/vs/workbench/test/electron-browser/api/extHostConfiguration.test.ts @@ -8,7 +8,7 @@ import { URI, UriComponents } from 'vs/base/common/uri'; import { ExtHostWorkspace } from 'vs/workbench/api/common/extHostWorkspace'; import { ExtHostConfigProvider } from 'vs/workbench/api/common/extHostConfiguration'; import { MainThreadConfigurationShape, IConfigurationInitData } from 'vs/workbench/api/common/extHost.protocol'; -import { ConfigurationModel } from 'vs/platform/configuration/common/configurationModels'; +import { ConfigurationModel, ConfigurationModelParser } from 'vs/platform/configuration/common/configurationModels'; import { TestRPCProtocol } from './testRPCProtocol'; import { mock } from 'vs/workbench/test/electron-browser/api/mock'; import { IWorkspaceFolder, WorkspaceFolder } from 'vs/platform/workspace/common/workspace'; @@ -476,6 +476,76 @@ suite('ExtHostConfiguration', function () { assert.equal(actual2.workspaceFolderValue, undefined); }); + test('inspect with language overrides', function () { + const firstRoot = URI.file('foo1'); + const secondRoot = URI.file('foo2'); + const folders: [UriComponents, IConfigurationModel][] = []; + folders.push([firstRoot, toConfigurationModel({ + 'editor.wordWrap': 'bounded', + '[typescript]': { + 'editor.wordWrap': 'unbounded', + } + })]); + folders.push([secondRoot, toConfigurationModel({})]); + + const extHostWorkspace = createExtHostWorkspace(); + extHostWorkspace.$initializeWorkspace({ + 'id': 'foo', + 'folders': [aWorkspaceFolder(firstRoot, 0), aWorkspaceFolder(secondRoot, 1)], + 'name': 'foo' + }); + const testObject = new ExtHostConfigProvider( + new class extends mock() { }, + extHostWorkspace, + { + defaults: toConfigurationModel({ + 'editor.wordWrap': 'off', + '[markdown]': { + 'editor.wordWrap': 'bounded', + } + }), + user: toConfigurationModel({ + 'editor.wordWrap': 'bounded', + '[typescript]': { + 'editor.lineNumbers': 'off', + } + }), + workspace: toConfigurationModel({ + '[typescript]': { + 'editor.wordWrap': 'unbounded', + 'editor.lineNumbers': 'off', + } + }), + folders, + configurationScopes: [] + }, + new NullLogService() + ); + + let actual = testObject.getConfiguration(undefined, { uri: firstRoot, languageId: 'typescript' }).inspect('editor.wordWrap')!; + assert.equal(actual.defaultValue, 'off'); + assert.equal(actual.globalValue, 'bounded'); + assert.equal(actual.workspaceValue, undefined); + assert.equal(actual.workspaceFolderValue, 'bounded'); + assert.equal(actual.defaultLanguageValue, undefined); + assert.equal(actual.globalLanguageValue, undefined); + assert.equal(actual.workspaceLanguageValue, 'unbounded'); + assert.equal(actual.workspaceFolderLanguageValue, 'unbounded'); + assert.deepEqual(actual.languageIds, ['markdown', 'typescript']); + + actual = testObject.getConfiguration(undefined, { uri: secondRoot, languageId: 'typescript' }).inspect('editor.wordWrap')!; + assert.equal(actual.defaultValue, 'off'); + assert.equal(actual.globalValue, 'bounded'); + assert.equal(actual.workspaceValue, undefined); + assert.equal(actual.workspaceFolderValue, undefined); + assert.equal(actual.defaultLanguageValue, undefined); + assert.equal(actual.globalLanguageValue, undefined); + assert.equal(actual.workspaceLanguageValue, 'unbounded'); + assert.equal(actual.workspaceFolderLanguageValue, undefined); + assert.deepEqual(actual.languageIds, ['markdown', 'typescript']); + }); + + test('getConfiguration vs get', function () { const all = createExtHostConfiguration({ @@ -654,4 +724,11 @@ suite('ExtHostConfiguration', function () { function aWorkspaceFolder(uri: URI, index: number, name: string = ''): IWorkspaceFolder { return new WorkspaceFolder({ uri, name, index }); } + + function toConfigurationModel(obj: any): ConfigurationModel { + const parser = new ConfigurationModelParser('test'); + parser.parseContent(JSON.stringify(obj)); + return parser.configurationModel; + } + });