From e910e4e678ee08d1afa932ae0cab1df983491f40 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Mon, 21 Jan 2019 17:39:16 -0800 Subject: [PATCH] OpenerService#open should return a boolean --- .../editor/browser/services/openerService.ts | 39 +++++++++++-------- src/vs/platform/opener/common/opener.ts | 2 +- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/vs/editor/browser/services/openerService.ts b/src/vs/editor/browser/services/openerService.ts index 40b76672b35..587ffb1fd09 100644 --- a/src/vs/editor/browser/services/openerService.ts +++ b/src/vs/editor/browser/services/openerService.ts @@ -23,15 +23,24 @@ export class OpenerService implements IOpenerService { // } - open(resource: URI, options?: { openToSide?: boolean }): Promise { + open(resource: URI, options?: { openToSide?: boolean }): Promise { const { scheme, path, query, fragment } = resource; - let promise: Promise | undefined = undefined; - if (scheme === Schemas.http || scheme === Schemas.https || scheme === Schemas.mailto) { + if (!scheme) { + // no scheme ?!? + return Promise.resolve(false); + + } else if (scheme === Schemas.http || scheme === Schemas.https || scheme === Schemas.mailto) { // open http or default mail application dom.windowOpenNoOpener(resource.toString(true)); - } else if (scheme === 'command' && CommandsRegistry.getCommand(path)) { + return Promise.resolve(true); + + } else if (scheme === Schemas.command) { + // run command or bail out if command isn't known + if (!CommandsRegistry.getCommand(path)) { + return Promise.reject(`command '${path}' NOT known`); + } // execute as command let args: any = []; try { @@ -42,13 +51,10 @@ export class OpenerService implements IOpenerService { } catch (e) { // } - promise = this._commandService.executeCommand(path, ...args); + return this._commandService.executeCommand(path, ...args).then(() => true); } else { - let selection: { - startLineNumber: number; - startColumn: number; - } | undefined = undefined; + let selection: { startLineNumber: number; startColumn: number; } | undefined = undefined; const match = /^L?(\d+)(?:,(\d+))?/.exec(fragment); if (match) { // support file:///some/file.js#73,84 @@ -61,16 +67,15 @@ export class OpenerService implements IOpenerService { resource = resource.with({ fragment: '' }); } - if (!resource.scheme) { - // we cannot handle those - return Promise.resolve(undefined); - - } else if (resource.scheme === Schemas.file) { + if (resource.scheme === Schemas.file) { resource = resources.normalizePath(resource); // workaround for non-normalized paths (https://github.com/Microsoft/vscode/issues/12954) } - promise = this._editorService.openCodeEditor({ resource, options: { selection, } }, this._editorService.getFocusedCodeEditor(), options && options.openToSide); - } - return Promise.resolve(promise); + return this._editorService.openCodeEditor( + { resource, options: { selection, } }, + this._editorService.getFocusedCodeEditor(), + options && options.openToSide + ).then(() => true); + } } } diff --git a/src/vs/platform/opener/common/opener.ts b/src/vs/platform/opener/common/opener.ts index 85075ec864a..551749c071b 100644 --- a/src/vs/platform/opener/common/opener.ts +++ b/src/vs/platform/opener/common/opener.ts @@ -18,7 +18,7 @@ export interface IOpenerService { * @param resource A resource * @return A promise that resolves when the opening is done. */ - open(resource: URI, options?: { openToSide?: boolean }): Promise; + open(resource: URI, options?: { openToSide?: boolean }): Promise; } export const NullOpenerService: IOpenerService = Object.freeze({