diff --git a/src/vs/vscode.d.ts b/src/vs/vscode.d.ts index 5a837b10819..b6147f0e559 100644 --- a/src/vs/vscode.d.ts +++ b/src/vs/vscode.d.ts @@ -2692,10 +2692,12 @@ declare namespace vscode { * [workspace](#workspace.rootPath) only, or globally for all instances of the * editor. The updated configuration values are persisted. * - * *Note:* Setting an installation-wide value (`global: true`) in the presence of + * *Note 1:* Setting an installation-wide value (`global: true`) in the presence of * a more specific workspace value has no observable effect in that workspace, but * in others. * + * *Note 2:* To remove a configuration value use `undefined`, like so: `config.update('somekey', undefined)` + * * @param section Configuration name, supports _dotted_ names. * @param value The new value. * @param global When `true` changes the configuration value for all instances of the editor. diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index 63118392664..e9dca2ef83d 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -14,52 +14,52 @@ import * as vscode from 'vscode'; import URI from 'vs/base/common/uri'; import Severity from 'vs/base/common/severity'; -import {TPromise} from 'vs/base/common/winjs.base'; +import { TPromise } from 'vs/base/common/winjs.base'; -import {IMarkerData} from 'vs/platform/markers/common/markers'; -import {Position as EditorPosition} from 'vs/platform/editor/common/editor'; -import {IMessage, IExtensionDescription} from 'vs/platform/extensions/common/extensions'; -import {StatusbarAlignment as MainThreadStatusBarAlignment} from 'vs/platform/statusbar/common/statusbar'; -import {ITelemetryInfo} from 'vs/platform/telemetry/common/telemetry'; +import { IMarkerData } from 'vs/platform/markers/common/markers'; +import { Position as EditorPosition } from 'vs/platform/editor/common/editor'; +import { IMessage, IExtensionDescription } from 'vs/platform/extensions/common/extensions'; +import { StatusbarAlignment as MainThreadStatusBarAlignment } from 'vs/platform/statusbar/common/statusbar'; +import { ITelemetryInfo } from 'vs/platform/telemetry/common/telemetry'; import { ICommandHandlerDescription } from 'vs/platform/commands/common/commands'; import * as editorCommon from 'vs/editor/common/editorCommon'; import * as modes from 'vs/editor/common/modes'; -import {IResourceEdit} from 'vs/editor/common/services/bulkEdit'; +import { IResourceEdit } from 'vs/editor/common/services/bulkEdit'; -import {ConfigurationTarget} from 'vs/workbench/services/configuration/common/configurationEditing'; +import { ConfigurationTarget } from 'vs/workbench/services/configuration/common/configurationEditing'; -import {IPickOpenEntry, IPickOptions} from 'vs/workbench/services/quickopen/common/quickOpenService'; +import { IPickOpenEntry, IPickOptions } from 'vs/workbench/services/quickopen/common/quickOpenService'; import { SaveReason } from 'vs/workbench/parts/files/common/files'; -import {IWorkspaceSymbol} from 'vs/workbench/parts/search/common/search'; -import {IApplyEditsOptions, TextEditorRevealType, ITextEditorConfigurationUpdate, IResolvedTextEditorConfiguration, ISelectionChangeEvent} from './mainThreadEditorsTracker'; +import { IWorkspaceSymbol } from 'vs/workbench/parts/search/common/search'; +import { IApplyEditsOptions, TextEditorRevealType, ITextEditorConfigurationUpdate, IResolvedTextEditorConfiguration, ISelectionChangeEvent } from './mainThreadEditorsTracker'; export interface InstanceSetter { - set(instance:T): R; + set(instance: T): R; } export class InstanceCollection { - private _items: {[id:string]:any;}; + private _items: { [id: string]: any; }; constructor() { this._items = Object.create(null); } - public define(id:ProxyIdentifier): InstanceSetter { + public define(id: ProxyIdentifier): InstanceSetter { let that = this; return new class { - set(value:T) { + set(value: T) { that._set(id, value); return value; } }; } - _set(id:ProxyIdentifier, value:T): void { + _set(id: ProxyIdentifier, value: T): void { this._items[id.id] = value; } - public finish(isMain:boolean, threadService:IThreadService): void { + public finish(isMain: boolean, threadService: IThreadService): void { let expected = (isMain ? MainContext : ExtHostContext); Object.keys(expected).forEach((key) => { let id = expected[key]; @@ -86,6 +86,7 @@ export abstract class MainThreadCommandsShape { export abstract class MainThreadConfigurationShape { $updateConfigurationOption(target: ConfigurationTarget, key: string, value: any): TPromise { throw ni(); } + $removeConfigurationOption(target: ConfigurationTarget, key: string): TPromise { throw ni(); } } export abstract class MainThreadDiagnosticsShape { @@ -95,7 +96,7 @@ export abstract class MainThreadDiagnosticsShape { export abstract class MainThreadDocumentsShape { $tryOpenDocument(uri: URI): TPromise { throw ni(); } - $registerTextContentProvider(handle:number, scheme: string): void { throw ni(); } + $registerTextContentProvider(handle: number, scheme: string): void { throw ni(); } $onVirtualDocumentChange(uri: URI, value: string): void { throw ni(); } $unregisterTextContentProvider(handle: number): void { throw ni(); } $trySaveDocument(uri: URI): TPromise { throw ni(); } @@ -111,7 +112,7 @@ export abstract class MainThreadEditorsShape { $trySetDecorations(id: string, key: string, ranges: editorCommon.IDecorationOptions[]): TPromise { throw ni(); } $tryRevealRange(id: string, range: editorCommon.IRange, revealType: TextEditorRevealType): TPromise { throw ni(); } $trySetSelections(id: string, selections: editorCommon.ISelection[]): TPromise { throw ni(); } - $tryApplyEdits(id: string, modelVersionId: number, edits: editorCommon.ISingleEditOperation[], opts:IApplyEditsOptions): TPromise { throw ni(); } + $tryApplyEdits(id: string, modelVersionId: number, edits: editorCommon.ISingleEditOperation[], opts: IApplyEditsOptions): TPromise { throw ni(); } } export abstract class MainThreadErrorsShape { @@ -135,7 +136,7 @@ export abstract class MainThreadLanguageFeaturesShape { $registerSuggestSupport(handle: number, selector: vscode.DocumentSelector, triggerCharacters: string[]): TPromise { throw ni(); } $registerSignatureHelpProvider(handle: number, selector: vscode.DocumentSelector, triggerCharacter: string[]): TPromise { throw ni(); } $registerDocumentLinkProvider(handle: number, selector: vscode.DocumentSelector): TPromise { throw ni(); } - $setLanguageConfiguration(handle: number, languageId:string, configuration: vscode.LanguageConfiguration): TPromise { throw ni(); } + $setLanguageConfiguration(handle: number, languageId: string, configuration: vscode.LanguageConfiguration): TPromise { throw ni(); } } export abstract class MainThreadLanguagesShape { diff --git a/src/vs/workbench/api/node/extHostConfiguration.ts b/src/vs/workbench/api/node/extHostConfiguration.ts index 760a4a7c9f7..3e623b1f5a0 100644 --- a/src/vs/workbench/api/node/extHostConfiguration.ts +++ b/src/vs/workbench/api/node/extHostConfiguration.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; -import {mixin} from 'vs/base/common/objects'; -import {illegalState} from 'vs/base/common/errors'; -import Event, {Emitter} from 'vs/base/common/event'; -import {WorkspaceConfiguration} from 'vscode'; -import {ExtHostConfigurationShape, MainThreadConfigurationShape} from './extHost.protocol'; -import {ConfigurationTarget} from 'vs/workbench/services/configuration/common/configurationEditing'; +import { mixin } from 'vs/base/common/objects'; +import { illegalState } from 'vs/base/common/errors'; +import Event, { Emitter } from 'vs/base/common/event'; +import { WorkspaceConfiguration } from 'vscode'; +import { ExtHostConfigurationShape, MainThreadConfigurationShape } from './extHost.protocol'; +import { ConfigurationTarget } from 'vs/workbench/services/configuration/common/configurationEditing'; export class ExtHostConfiguration extends ExtHostConfigurationShape { @@ -56,7 +56,11 @@ export class ExtHostConfiguration extends ExtHostConfigurationShape { update: (key: string, value: any, global: boolean) => { key = section ? `${section}.${key}` : key; const target = global ? ConfigurationTarget.USER : ConfigurationTarget.WORKSPACE; - return this._proxy.$updateConfigurationOption(target, key, value); + if (value !== void 0) { + return this._proxy.$updateConfigurationOption(target, key, value); + } else { + return this._proxy.$removeConfigurationOption(target, key); + } } }; diff --git a/src/vs/workbench/api/node/mainThreadConfiguration.ts b/src/vs/workbench/api/node/mainThreadConfiguration.ts index f741e86707d..b707f4e6a47 100644 --- a/src/vs/workbench/api/node/mainThreadConfiguration.ts +++ b/src/vs/workbench/api/node/mainThreadConfiguration.ts @@ -4,12 +4,12 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; -import {TPromise} from 'vs/base/common/winjs.base'; -import {IDisposable, dispose} from 'vs/base/common/lifecycle'; -import {IThreadService} from 'vs/workbench/services/thread/common/threadService'; -import {IWorkspaceConfigurationService} from 'vs/workbench/services/configuration/common/configuration'; -import {IConfigurationEditingService, ConfigurationTarget} from 'vs/workbench/services/configuration/common/configurationEditing'; -import {MainThreadConfigurationShape, ExtHostContext} from './extHost.protocol'; +import { TPromise } from 'vs/base/common/winjs.base'; +import { IDisposable, dispose } from 'vs/base/common/lifecycle'; +import { IThreadService } from 'vs/workbench/services/thread/common/threadService'; +import { IWorkspaceConfigurationService } from 'vs/workbench/services/configuration/common/configuration'; +import { IConfigurationEditingService, ConfigurationTarget } from 'vs/workbench/services/configuration/common/configurationEditing'; +import { MainThreadConfigurationShape, ExtHostContext } from './extHost.protocol'; export class MainThreadConfiguration extends MainThreadConfigurationShape { @@ -35,4 +35,8 @@ export class MainThreadConfiguration extends MainThreadConfigurationShape { $updateConfigurationOption(target: ConfigurationTarget, key: string, value: any): TPromise { return this._configurationEditingService.writeConfiguration(target, { key, value }); } + + $removeConfigurationOption(target: ConfigurationTarget, key: string): TPromise { + return this._configurationEditingService.writeConfiguration(target, { key, value: undefined }); + } }