diff --git a/src/vs/platform/configuration/common/configurationRegistry.ts b/src/vs/platform/configuration/common/configurationRegistry.ts index 518898d9d85..34b7a40b1c3 100644 --- a/src/vs/platform/configuration/common/configurationRegistry.ts +++ b/src/vs/platform/configuration/common/configurationRegistry.ts @@ -336,7 +336,13 @@ export function validateProperty(property: string): string { return null; } -export function getScopes(keys: string[]): ConfigurationScope[] { +export function getScopes(): { [key: string]: ConfigurationScope } { + const scopes = {}; const configurationProperties = configurationRegistry.getConfigurationProperties(); - return keys.map(key => configurationProperties[key].scope); + for (const key of Object.keys(configurationProperties)) { + scopes[key] = configurationProperties[key].scope; + } + scopes['launch'] = ConfigurationScope.RESOURCE; + scopes['task'] = ConfigurationScope.RESOURCE; + return scopes; } diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index 07a6fc237ad..3a62eda7a27 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -83,7 +83,7 @@ export interface IInitData { } export interface IConfigurationInitData extends IConfigurationData { - configurationScopes: ConfigurationScope[]; + configurationScopes: { [key: string]: ConfigurationScope }; } export interface IWorkspaceConfigurationChangeEventData { diff --git a/src/vs/workbench/api/node/extHostConfiguration.ts b/src/vs/workbench/api/node/extHostConfiguration.ts index db1ab8b650f..e89decf0b5b 100644 --- a/src/vs/workbench/api/node/extHostConfiguration.ts +++ b/src/vs/workbench/api/node/extHostConfiguration.ts @@ -41,14 +41,14 @@ export class ExtHostConfiguration implements ExtHostConfigurationShape { private readonly _onDidChangeConfiguration = new Emitter(); private readonly _proxy: MainThreadConfigurationShape; private readonly _extHostWorkspace: ExtHostWorkspace; - private _configurationScopes: Map; + private _configurationScopes: { [key: string]: ConfigurationScope }; private _configuration: Configuration; constructor(proxy: MainThreadConfigurationShape, extHostWorkspace: ExtHostWorkspace, data: IConfigurationInitData) { this._proxy = proxy; this._extHostWorkspace = extHostWorkspace; this._configuration = Configuration.parse(data); - this._readConfigurationScopes(data.configurationScopes); + this._configurationScopes = data.configurationScopes; } get onDidChangeConfiguration(): Event { @@ -129,7 +129,7 @@ export class ExtHostConfiguration implements ExtHostConfigurationShape { } private _validateConfigurationAccess(key: string, resource: URI, extensionId: string): void { - const scope = this._configurationScopes.get(key); + const scope = this._configurationScopes[key]; const extensionIdText = extensionId ? `[${extensionId}] ` : ''; if (ConfigurationScope.RESOURCE === scope) { if (resource === void 0) { @@ -145,18 +145,6 @@ export class ExtHostConfiguration implements ExtHostConfigurationShape { } } - private _readConfigurationScopes(scopes: ConfigurationScope[]): void { - this._configurationScopes = new Map(); - if (scopes.length) { - const defaultKeys = this._configuration.keys(this._extHostWorkspace.workspace).default; - if (defaultKeys.length === scopes.length) { - for (let i = 0; i < defaultKeys.length; i++) { - this._configurationScopes.set(defaultKeys[i], scopes[i]); - } - } - } - } - private _toConfigurationChangeEvent(data: IWorkspaceConfigurationChangeEventData): vscode.ConfigurationChangeEvent { const changedConfiguration = new ConfigurationModel(data.changedConfiguration.contents, data.changedConfiguration.keys, data.changedConfiguration.overrides); const changedConfigurationByResource: StrictResourceMap = new StrictResourceMap(); diff --git a/src/vs/workbench/services/extensions/electron-browser/extensionHost.ts b/src/vs/workbench/services/extensions/electron-browser/extensionHost.ts index 8079fd1e198..a02b5cf7211 100644 --- a/src/vs/workbench/services/extensions/electron-browser/extensionHost.ts +++ b/src/vs/workbench/services/extensions/electron-browser/extensionHost.ts @@ -358,7 +358,7 @@ export class ExtensionHostProcessWorker { private _createExtHostInitData(): TPromise { return TPromise.join([this._telemetryService.getTelemetryInfo(), this._extensionService.getExtensions()]).then(([telemetryInfo, extensionDescriptions]) => { - const configurationData: IConfigurationInitData = { ...this._configurationService.getConfigurationData(), configurationScopes: [] }; + const configurationData: IConfigurationInitData = { ...this._configurationService.getConfigurationData(), configurationScopes: {} }; const r: IInitData = { parentPid: process.pid, environment: { @@ -376,7 +376,7 @@ export class ExtensionHostProcessWorker { workspace: this._contextService.getWorkbenchState() === WorkbenchState.EMPTY ? null : this._contextService.getWorkspace(), extensions: extensionDescriptions, // Send configurations scopes only in development mode. - configuration: !this._environmentService.isBuilt || this._environmentService.isExtensionDevelopment ? { ...configurationData, configurationScopes: getScopes(this._configurationService.keys().default) } : configurationData, + configuration: !this._environmentService.isBuilt || this._environmentService.isExtensionDevelopment ? { ...configurationData, configurationScopes: getScopes() } : configurationData, telemetryInfo, args: this._environmentService.args, execPath: this._environmentService.execPath,