diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts index 5987ac5d21e..2deeef9273b 100644 --- a/src/vs/workbench/api/common/extHost.api.impl.ts +++ b/src/vs/workbench/api/common/extHost.api.impl.ts @@ -133,12 +133,36 @@ export class ExtHostAPIImplementation { }); const pluginHostCommands = this._threadService.getRemotable(ExtHostCommands); + const pluginHostEditors = this._threadService.getRemotable(ExtHostEditors); + const pluginHostMessageService = new ExtHostMessageService(this._threadService, this.commands); + const pluginHostQuickOpen = new ExtHostQuickOpen(this._threadService); + const pluginHostStatusBar = new ExtHostStatusBar(this._threadService); + const extHostOutputService = new ExtHostOutputService(this._threadService); + + // commands namespace this.commands = { registerCommand(id: string, command: (...args: any[]) => T | Thenable, thisArgs?: any): vscode.Disposable { return pluginHostCommands.registerCommand(id, command, thisArgs); }, - registerTextEditorCommand(commandId: string, callback: (textEditor: vscode.TextEditor, edit: vscode.TextEditorEdit) => void, thisArg?: any): vscode.Disposable { - return pluginHostCommands.registerTextEditorCommand(commandId, callback, thisArg); + registerTextEditorCommand(id: string, callback: (textEditor: vscode.TextEditor, edit: vscode.TextEditorEdit) => void, thisArg?: any): vscode.Disposable { + let actualCallback: typeof callback = thisArg ? callback.bind(thisArg) : callback; + return pluginHostCommands.registerCommand(id, () => { + let activeTextEditor = pluginHostEditors.getActiveTextEditor(); + if (!activeTextEditor) { + console.warn('Cannot execute ' + id + ' because there is no active text editor.'); + return; + } + + activeTextEditor.edit((edit: vscode.TextEditorEdit) => { + actualCallback(activeTextEditor, edit); + }).then((result) => { + if (!result) { + console.warn('Edits from command ' + id + ' were not applied.'); + } + }, (err) => { + console.warn('An error occured while running command ' + id, err); + }); + }); }, executeCommand(id: string, ...args: any[]): Thenable { return pluginHostCommands.executeCommand(id, args); @@ -148,11 +172,6 @@ export class ExtHostAPIImplementation { } }; - const pluginHostEditors = this._threadService.getRemotable(ExtHostEditors); - const pluginHostMessageService = new ExtHostMessageService(this._threadService, this.commands); - const pluginHostQuickOpen = new ExtHostQuickOpen(this._threadService); - const pluginHostStatusBar = new ExtHostStatusBar(this._threadService); - const extHostOutputService = new ExtHostOutputService(this._threadService); this.window = { get activeTextEditor() { return pluginHostEditors.getActiveTextEditor(); diff --git a/src/vs/workbench/api/common/extHostCommands.ts b/src/vs/workbench/api/common/extHostCommands.ts index 37ea7d47f81..a40ece29e2b 100644 --- a/src/vs/workbench/api/common/extHostCommands.ts +++ b/src/vs/workbench/api/common/extHostCommands.ts @@ -11,7 +11,6 @@ import {IKeybindingService, ICommandHandlerDescription} from 'vs/platform/keybin import {TPromise} from 'vs/base/common/winjs.base'; import {ExtHostEditors} from 'vs/workbench/api/common/extHostEditors'; import {Disposable} from 'vs/workbench/api/common/extHostTypes'; -import * as vscode from 'vscode'; interface CommandHandler { callback: Function; @@ -47,27 +46,6 @@ export class ExtHostCommands { return new Disposable(() => delete this._commands[id]); } - registerTextEditorCommand(id: string, callback: (textEditor: vscode.TextEditor, edit: vscode.TextEditorEdit) => void, thisArg?: any): vscode.Disposable { - let actualCallback: typeof callback = thisArg ? callback.bind(thisArg) : callback; - return this.registerCommand(id, () => { - let activeTextEditor = this._pluginHostEditors.getActiveTextEditor(); - if (!activeTextEditor) { - console.warn('Cannot execute ' + id + ' because there is no active text editor.'); - return; - } - - activeTextEditor.edit((edit: vscode.TextEditorEdit) => { - actualCallback(activeTextEditor, edit); - }).then((result) => { - if (!result) { - console.warn('Edits from command ' + id + ' were not applied.'); - } - }, (err) => { - console.warn('An error occured while running command ' + id, err); - }); - }); - } - executeCommand(id: string, ...args: any[]): Thenable { if (this._commands[id]) { @@ -153,7 +131,7 @@ export class MainThreadCommands { KeybindingsRegistry.registerCommandDesc({ id, handler: (serviceAccessor, ...args: any[]) => { - return this._proxy.$executeContributedCommand(id, ...args); //TODO@Joh - we cannot serialize the args + return this._proxy.$executeContributedCommand(id, ...args); }, weight: undefined, context: undefined, @@ -174,19 +152,6 @@ export class MainThreadCommands { $getCommands(): Thenable { return TPromise.as(Object.keys(KeybindingsRegistry.getCommands())); } - - $getCommandHandlerDescriptions(): TPromise<{ [id: string]: string | ICommandHandlerDescription }> { - return this._proxy.$getContributedCommandHandlerDescriptions().then(result => { - const commands = KeybindingsRegistry.getCommands(); - for (let id in commands) { - let {description} = commands[id]; - if (description) { - result[id] = description; - } - } - return result; - }); - } } @@ -195,7 +160,18 @@ export class MainThreadCommands { KeybindingsRegistry.registerCommandDesc({ id: '_generateCommandsDocumentation', handler: function(accessor) { - return accessor.get(IThreadService).getRemotable(MainThreadCommands).$getCommandHandlerDescriptions().then(result => { + return accessor.get(IThreadService).getRemotable(ExtHostCommands).$getContributedCommandHandlerDescriptions().then(result => { + + // add local commands + const commands = KeybindingsRegistry.getCommands(); + for (let id in commands) { + let {description} = commands[id]; + if (description) { + result[id] = description; + } + } + + // print all as markdown const all: string[] = []; for (let id in result) { all.push('`' + id + '` - ' + _generateMarkdown(result[id])); @@ -225,4 +201,4 @@ function _generateMarkdown(description: string | ICommandHandlerDescription): st parts.push('\n\n'); return parts.join(''); } -} \ No newline at end of file +}