From 00400d8fa6f221b418524566005c371615cff6d3 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Thu, 15 Jun 2017 22:13:53 +0200 Subject: [PATCH] #28538 API to get settings by override identifiers - language - resource --- .../services/editorWorkerServiceImpl.ts | 5 ++-- .../common/services/modelServiceImpl.ts | 2 +- .../configuration/common/configuration.ts | 16 ++++++------- .../node/configurationService.ts | 18 +++----------- .../browser/parts/editor/textDiffEditor.ts | 2 +- .../browser/parts/editor/textEditor.ts | 2 +- .../electron-browser/walkThroughPart.ts | 2 +- .../configuration/node/configuration.ts | 24 +++++-------------- .../keybinding/common/keybindingEditing.ts | 2 +- 9 files changed, 23 insertions(+), 50 deletions(-) diff --git a/src/vs/editor/common/services/editorWorkerServiceImpl.ts b/src/vs/editor/common/services/editorWorkerServiceImpl.ts index 77afcaec5de..aac6b88d9ff 100644 --- a/src/vs/editor/common/services/editorWorkerServiceImpl.ts +++ b/src/vs/editor/common/services/editorWorkerServiceImpl.ts @@ -17,7 +17,7 @@ import { IEditorWorkerService } from 'vs/editor/common/services/editorWorkerServ import { IModelService } from 'vs/editor/common/services/modelService'; import { EditorSimpleWorkerImpl } from 'vs/editor/common/services/editorSimpleWorker'; import { LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageConfigurationRegistry'; -import { IConfigurationService, IConfigurationOptions } from 'vs/platform/configuration/common/configuration'; +import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IEditorOptions } from 'vs/editor/common/config/editorOptions'; import { IRange } from 'vs/editor/common/core/range'; import { IModeService } from 'vs/editor/common/services/modeService'; @@ -93,8 +93,7 @@ class WordBasedCompletionItemProvider implements modes.ISuggestSupport { provideCompletionItems(model: editorCommon.IModel, position: Position): TPromise { const { language } = this._modeService.getLanguageIdentifier(model.getLanguageIdAtPosition(position.lineNumber, position.column)); - const options = { section: 'editor', overrideIdentifier: language }; - const { wordBasedSuggestions } = this._configurationService.getConfiguration(options); + const { wordBasedSuggestions } = this._configurationService.getConfiguration('editor', { language }); if (!wordBasedSuggestions) { return undefined; } diff --git a/src/vs/editor/common/services/modelServiceImpl.ts b/src/vs/editor/common/services/modelServiceImpl.ts index 5bcb68eba4b..da1b0a8207e 100644 --- a/src/vs/editor/common/services/modelServiceImpl.ts +++ b/src/vs/editor/common/services/modelServiceImpl.ts @@ -267,7 +267,7 @@ export class ModelServiceImpl implements IModelService { public getCreationOptions(language: string): editorCommon.ITextModelCreationOptions { let creationOptions = this._modelCreationOptionsByLanguage[language]; if (!creationOptions) { - creationOptions = ModelServiceImpl._readModelOptions(this._configurationService.getConfiguration({ overrideIdentifier: language })); + creationOptions = ModelServiceImpl._readModelOptions(this._configurationService.getConfiguration(null, { language })); this._modelCreationOptionsByLanguage[language] = creationOptions; } return creationOptions; diff --git a/src/vs/platform/configuration/common/configuration.ts b/src/vs/platform/configuration/common/configuration.ts index 35d4dd6762e..ac8016e30ab 100644 --- a/src/vs/platform/configuration/common/configuration.ts +++ b/src/vs/platform/configuration/common/configuration.ts @@ -14,10 +14,9 @@ import Event from 'vs/base/common/event'; export const IConfigurationService = createDecorator('configurationService'); -export interface IConfigurationOptions { - overrideIdentifier?: string; +export interface IConfigurationOverrides { + language?: string; resource?: URI; - section?: string; } export type IConfigurationValues = { [key: string]: IConfigurationValue }; @@ -31,8 +30,7 @@ export interface IConfigurationService { * Fetches the appropriate section of the configuration JSON file. * This will be an object keyed off the section name. */ - getConfiguration(section?: string): T; - getConfiguration(options?: IConfigurationOptions): T; + getConfiguration(section?: string, overrides?: IConfigurationOverrides): T; /** * Resolves a configuration key to its values in the different scopes @@ -243,9 +241,9 @@ export class Configuration { } } - getValue(options: IConfigurationOptions = {}): C { + getValue(section: string = '', options: IConfigurationOverrides = {}): C { const configModel = this.getConfigurationModel(options); - return options.section ? configModel.getContentsFor(options.section) : configModel.contents; + return section ? configModel.getContentsFor(section) : configModel.contents; } lookup(key: string, overrideIdentifier?: string): IConfigurationValue { @@ -298,9 +296,9 @@ export class Configuration { return result; } - private getConfigurationModel(options: IConfigurationOptions): ConfigurationModel { + private getConfigurationModel(options: IConfigurationOverrides): ConfigurationModel { let configurationModel = (options.resource ? this._foldersConsolidated.get(options.resource) : this._workspace) || new ConfigurationModel(); - return options.overrideIdentifier ? configurationModel.override(options.overrideIdentifier) : configurationModel; + return options.language ? configurationModel.override(options.language) : configurationModel; } public toData(): IConfigurationData { diff --git a/src/vs/platform/configuration/node/configurationService.ts b/src/vs/platform/configuration/node/configurationService.ts index a8f4443b4e3..a0060b1759a 100644 --- a/src/vs/platform/configuration/node/configurationService.ts +++ b/src/vs/platform/configuration/node/configurationService.ts @@ -9,7 +9,7 @@ import { ConfigWatcher } from 'vs/base/node/config'; import { Registry } from 'vs/platform/platform'; import { IConfigurationRegistry, Extensions } from 'vs/platform/configuration/common/configurationRegistry'; import { IDisposable, toDisposable, Disposable } from 'vs/base/common/lifecycle'; -import { ConfigurationSource, IConfigurationService, IConfigurationServiceEvent, IConfigurationValue, IConfigurationKeys, ConfigurationModel, IConfigurationOptions, Configuration, IConfigurationValues, IConfigurationData } from 'vs/platform/configuration/common/configuration'; +import { ConfigurationSource, IConfigurationService, IConfigurationServiceEvent, IConfigurationValue, IConfigurationKeys, ConfigurationModel, IConfigurationOverrides, Configuration, IConfigurationValues, IConfigurationData } from 'vs/platform/configuration/common/configuration'; import { CustomConfigurationModel, DefaultConfigurationModel } from 'vs/platform/configuration/common/model'; import Event, { Emitter } from 'vs/base/common/event'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; @@ -67,10 +67,8 @@ export class ConfigurationService extends Disposable implements IConfiguratio }); } - public getConfiguration(section?: string): C - public getConfiguration(options?: IConfigurationOptions): C - public getConfiguration(arg?: any): C { - return this.configuration().getValue(this.toOptions(arg)); + public getConfiguration(section?: string, options?: IConfigurationOverrides): C { + return this.configuration().getValue(section, options); } public lookup(key: string, overrideIdentifier?: string): IConfigurationValue { @@ -93,16 +91,6 @@ export class ConfigurationService extends Disposable implements IConfiguratio this._configuration = this.consolidateConfigurations(); } - private toOptions(arg: any): IConfigurationOptions { - if (typeof arg === 'string') { - return { section: arg }; - } - if (typeof arg === 'object') { - return arg; - } - return {}; - } - private consolidateConfigurations(): Configuration { const defaults = new DefaultConfigurationModel(); const user = this.userConfigModelWatcher.getConfig(); diff --git a/src/vs/workbench/browser/parts/editor/textDiffEditor.ts b/src/vs/workbench/browser/parts/editor/textDiffEditor.ts index e22ac2936ab..c9eb1f6aa13 100644 --- a/src/vs/workbench/browser/parts/editor/textDiffEditor.ts +++ b/src/vs/workbench/browser/parts/editor/textDiffEditor.ts @@ -217,7 +217,7 @@ export class TextDiffEditor extends BaseTextEditor { const language = this.getLanguage(); if (language) { - objects.assign(editorConfiguration, this.configurationService.getConfiguration({ overrideIdentifier: language, section: 'diffEditor' })); + objects.assign(editorConfiguration, this.configurationService.getConfiguration('diffEditor', { language })); } return editorConfiguration; diff --git a/src/vs/workbench/browser/parts/editor/textEditor.ts b/src/vs/workbench/browser/parts/editor/textEditor.ts index c926a9d2e17..c344a1c89a3 100644 --- a/src/vs/workbench/browser/parts/editor/textEditor.ts +++ b/src/vs/workbench/browser/parts/editor/textEditor.ts @@ -119,7 +119,7 @@ export abstract class BaseTextEditor extends BaseEditor { const overrides = {}; const resource = this.getResource(); if (resource) { - objects.assign(overrides, this.configurationService.getConfiguration({ /*resource: this.getResource(), */overrideIdentifier: this.getLanguage(), section: 'editor' })); + objects.assign(overrides, this.configurationService.getConfiguration('editor', { language: this.getLanguage(), /*resource: this.getResource(), */ })); } objects.assign(overrides, { diff --git a/src/vs/workbench/parts/welcome/walkThrough/electron-browser/walkThroughPart.ts b/src/vs/workbench/parts/welcome/walkThrough/electron-browser/walkThroughPart.ts index 1187473c057..ac247b050eb 100644 --- a/src/vs/workbench/parts/welcome/walkThrough/electron-browser/walkThroughPart.ts +++ b/src/vs/workbench/parts/welcome/walkThrough/electron-browser/walkThroughPart.ts @@ -419,7 +419,7 @@ export class WalkThroughPart extends BaseEditor { } private getEditorOptions(language: string): IEditorOptions { - const config = this.configurationService.getConfiguration({ overrideIdentifier: language, section: 'editor' }); + const config = this.configurationService.getConfiguration('editor', { language }); return { ...isObject(config) ? config : Object.create(null), scrollBeyondLastLine: false, diff --git a/src/vs/workbench/services/configuration/node/configuration.ts b/src/vs/workbench/services/configuration/node/configuration.ts index 2970fb389cd..d5e4872ebdf 100644 --- a/src/vs/workbench/services/configuration/node/configuration.ts +++ b/src/vs/workbench/services/configuration/node/configuration.ts @@ -24,7 +24,7 @@ import { isLinux } from 'vs/base/common/platform'; import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { CustomConfigurationModel } from 'vs/platform/configuration/common/model'; import { ScopedConfigurationModel, FolderConfigurationModel, FolderSettingsModel } from 'vs/workbench/services/configuration/common/configurationModels'; -import { IConfigurationServiceEvent, ConfigurationSource, IConfigurationKeys, IConfigurationValue, ConfigurationModel, IConfigurationOptions, Configuration as BaseConfiguration, IConfigurationValues, IConfigurationData } from 'vs/platform/configuration/common/configuration'; +import { IConfigurationServiceEvent, ConfigurationSource, IConfigurationKeys, IConfigurationValue, ConfigurationModel, IConfigurationOverrides, Configuration as BaseConfiguration, IConfigurationValues, IConfigurationData } from 'vs/platform/configuration/common/configuration'; import { IWorkspaceConfigurationService, WORKSPACE_CONFIG_FOLDER_DEFAULT_NAME, WORKSPACE_STANDALONE_CONFIGURATIONS, WORKSPACE_CONFIG_DEFAULT_PATH } from 'vs/workbench/services/configuration/common/configuration'; import { ConfigurationService as GlobalConfigurationService } from 'vs/platform/configuration/node/configurationService'; import { createHash } from "crypto"; @@ -201,10 +201,8 @@ export class WorkspaceConfigurationService extends Disposable implements IWorksp return this._configuration; } - public getConfiguration(section?: string): C - public getConfiguration(options?: IConfigurationOptions): C - public getConfiguration(arg?: any): C { - return this._configuration.getValue(this.toOptions(arg)); + public getConfiguration(section?: string, overrides?: IConfigurationOverrides): C { + return this._configuration.getValue(section, overrides); } public lookup(key: string, overrideIdentifier?: string): IConfigurationValue { @@ -310,16 +308,6 @@ export class WorkspaceConfigurationService extends Disposable implements IWorksp private trigger(source: ConfigurationSource, sourceConfig: any = this._configuration.getFolderConfigurationModel(this.workspace.roots[0]).contents): void { this._onDidUpdateConfiguration.fire({ source, sourceConfig }); } - - private toOptions(arg: any): IConfigurationOptions { - if (typeof arg === 'string') { - return { section: arg }; - } - if (typeof arg === 'object') { - return arg; - } - return {}; - } } class FolderConfiguration extends Disposable { @@ -539,9 +527,9 @@ class Configuration extends BaseConfiguration { updateFolderConfiguration(resource: URI, configuration: FolderConfigurationModel): boolean { this.folders.set(resource, configuration); - const current = this.getValue({ resource }); + const current = this.getValue(null, { resource }); this.mergeFolder(resource); - return !objects.equals(current, this.getValue({ resource })); + return !objects.equals(current, this.getValue(null, { resource })); } deleteFolderConfiguration(folder: URI): boolean { @@ -572,7 +560,7 @@ class Configuration extends BaseConfiguration { } for (const resource of this._foldersConsolidated.keys()) { - if (!objects.equals(this.getValue({ resource }), other.getValue({ resource }))) { + if (!objects.equals(this.getValue(null, { resource }), other.getValue(null, { resource }))) { return false; } } diff --git a/src/vs/workbench/services/keybinding/common/keybindingEditing.ts b/src/vs/workbench/services/keybinding/common/keybindingEditing.ts index abfa76b0210..e947aa7dc94 100644 --- a/src/vs/workbench/services/keybinding/common/keybindingEditing.ts +++ b/src/vs/workbench/services/keybinding/common/keybindingEditing.ts @@ -215,7 +215,7 @@ export class KeybindingsEditingService extends Disposable implements IKeybinding private resolveModelReference(): TPromise> { return this.fileService.existsFile(this.resource) .then(exists => { - const EOL = this.configurationService.getConfiguration({ section: 'files', overrideIdentifier: 'json' })['eol']; + const EOL = this.configurationService.getConfiguration('files', { language: 'json' })['eol']; const result = exists ? TPromise.as(null) : this.fileService.updateContent(this.resource, this.getEmptyContent(EOL), { encoding: 'utf8' }); return result.then(() => this.textModelResolverService.createModelReference(this.resource)); }); -- GitLab