diff --git a/src/vs/workbench/api/node/extHost.api.impl.ts b/src/vs/workbench/api/node/extHost.api.impl.ts index 0e6822072e3..0eb129114bc 100644 --- a/src/vs/workbench/api/node/extHost.api.impl.ts +++ b/src/vs/workbench/api/node/extHost.api.impl.ts @@ -255,18 +255,6 @@ export function createApiFactory(initData: IInitData, threadService: IThreadServ } }; - const emptyMessageOptions: vscode.MessageOptions = Object.create(null); - - function parseMessageArguments(args: any[]): { options: vscode.MessageOptions; items: any[]; } { - const [first, ...rest] = args; - - if (typeof first === 'string' || (first && first.title)) { - return { options: emptyMessageOptions, items: args }; - } else { - return { options: first || emptyMessageOptions, items: rest }; - } - } - // namespace: window const window: typeof vscode.window = { get activeTextEditor() { @@ -299,17 +287,14 @@ export function createApiFactory(initData: IInitData, threadService: IThreadServ onDidCloseTerminal(listener, thisArg?, disposables?) { return extHostTerminalService.onDidCloseTerminal(listener, thisArg, disposables); }, - showInformationMessage(message, ...args) { - const { options, items } = parseMessageArguments(args); - return extHostMessageService.showMessage(Severity.Info, message, options, items); + showInformationMessage(message, first, ...rest) { + return extHostMessageService.showMessage(Severity.Info, message, first, rest); }, - showWarningMessage(message, ...args) { - const { options, items } = parseMessageArguments(args); - return extHostMessageService.showMessage(Severity.Warning, message, options, items); + showWarningMessage(message, first, ...rest) { + return extHostMessageService.showMessage(Severity.Warning, message, first, rest); }, - showErrorMessage(message, ...args) { - const { options, items } = parseMessageArguments(args); - return extHostMessageService.showMessage(Severity.Error, message, options, items); + showErrorMessage(message, first, ...rest) { + return extHostMessageService.showMessage(Severity.Error, message, first, rest); }, showQuickPick(items: any, options: vscode.QuickPickOptions, token?: vscode.CancellationToken) { return extHostQuickOpen.showQuickPick(items, options, token); diff --git a/src/vs/workbench/api/node/extHostMessageService.ts b/src/vs/workbench/api/node/extHostMessageService.ts index b02a13f349c..20817326501 100644 --- a/src/vs/workbench/api/node/extHostMessageService.ts +++ b/src/vs/workbench/api/node/extHostMessageService.ts @@ -9,6 +9,20 @@ import Severity from 'vs/base/common/severity'; import vscode = require('vscode'); import { MainContext, MainThreadMessageServiceShape } from './extHost.protocol'; +const emptyMessageOptions: vscode.MessageOptions = Object.create(null); + +function isMessageItem(item: any): item is vscode.MessageItem { + return item && item.title; +} + +function parseMessageArguments(first: vscode.MessageOptions | string | vscode.MessageItem, rest: (string | vscode.MessageItem)[]): { options: vscode.MessageOptions; items: (string | vscode.MessageItem)[]; } { + if (typeof first === 'string' || isMessageItem(first)) { + return { options: emptyMessageOptions, items: [first, ...rest] }; + } else { + return { options: first || emptyMessageOptions, items: rest }; + } +} + export class ExtHostMessageService { private _proxy: MainThreadMessageServiceShape; @@ -17,25 +31,25 @@ export class ExtHostMessageService { this._proxy = threadService.get(MainContext.MainThreadMessageService); } - showMessage(severity: Severity, message: string, options: vscode.MessageOptions, commands: (string | vscode.MessageItem)[]): Thenable { + showMessage(severity: Severity, message: string, optionsOrFirstItem: vscode.MessageOptions | string | vscode.MessageItem, rest: (string | vscode.MessageItem)[]): Thenable { + const { options, items } = parseMessageArguments(optionsOrFirstItem, rest); + const commands: { title: string; isCloseAffordance: boolean; handle: number; }[] = []; - const items: { title: string; isCloseAffordance: boolean; handle: number; }[] = []; - - for (let handle = 0; handle < commands.length; handle++) { - let command = commands[handle]; + for (let handle = 0; handle < items.length; handle++) { + let command = items[handle]; if (typeof command === 'string') { - items.push({ title: command, handle, isCloseAffordance: false }); + commands.push({ title: command, handle, isCloseAffordance: false }); } else if (typeof command === 'object') { let {title, isCloseAffordance} = command; - items.push({ title, isCloseAffordance, handle }); + commands.push({ title, isCloseAffordance, handle }); } else { console.warn('Invalid message item:', command); } } - return this._proxy.$showMessage(severity, message, options, items).then(handle => { + return this._proxy.$showMessage(severity, message, options, commands).then(handle => { if (typeof handle === 'number') { - return commands[handle]; + return items[handle]; } }); }