diff --git a/build/monaco/monaco.d.ts.recipe b/build/monaco/monaco.d.ts.recipe index 096f516afcf27..9c2970d508bc2 100644 --- a/build/monaco/monaco.d.ts.recipe +++ b/build/monaco/monaco.d.ts.recipe @@ -5,16 +5,7 @@ declare module monaco { - interface Thenable { - /** - * Attaches callbacks for the resolution and/or rejection of the Promise. - * @param onfulfilled The callback to execute when the Promise is resolved. - * @param onrejected The callback to execute when the Promise is rejected. - * @returns A Promise for the completion of which ever callback is executed. - */ - then(onfulfilled?: (value: T) => TResult | Thenable, onrejected?: (reason: any) => TResult | Thenable): Thenable; - then(onfulfilled?: (value: T) => TResult | Thenable, onrejected?: (reason: any) => void): Thenable; - } + type Thenable = PromiseLike; export interface IDisposable { dispose(): void; @@ -41,7 +32,7 @@ declare module monaco { Error = 3, } -#include(vs/base/common/winjs.base.d.ts): TValueCallback, ProgressCallback, TPromise +#include(vs/base/common/winjs.base.d.ts): TValueCallback, ProgressCallback, Promise #include(vs/base/common/cancellation): CancellationTokenSource, CancellationToken #include(vs/base/common/uri): URI #include(vs/editor/common/standalone/standaloneBase): KeyCode, KeyMod diff --git a/src/vs/base/common/errors.ts b/src/vs/base/common/errors.ts index 743e88c5946e1..a00d5ebd2ad8b 100644 --- a/src/vs/base/common/errors.ts +++ b/src/vs/base/common/errors.ts @@ -132,24 +132,24 @@ export function setUnexpectedErrorHandler(newUnexpectedErrorHandler: (e: any) => errorHandler.setUnexpectedErrorHandler(newUnexpectedErrorHandler); } -export function onUnexpectedError(e: any): void { - +export function onUnexpectedError(e: any): undefined { // ignore errors from cancelled promises if (!isPromiseCanceledError(e)) { errorHandler.onUnexpectedError(e); } + return undefined; } -export function onUnexpectedExternalError(e: any): void { - +export function onUnexpectedExternalError(e: any): undefined { // ignore errors from cancelled promises if (!isPromiseCanceledError(e)) { errorHandler.onUnexpectedExternalError(e); } + return undefined; } -export function onUnexpectedPromiseError(promise: TPromise): TPromise { - return promise.then(null, onUnexpectedError); +export function onUnexpectedPromiseError(promise: TPromise): TPromise { + return promise.then(null, onUnexpectedError); } export function transformErrorForSerialization(error: any): any { diff --git a/src/vs/base/common/winjs.base.d.ts b/src/vs/base/common/winjs.base.d.ts index bb8ebf440d54b..434db0a5fa846 100644 --- a/src/vs/base/common/winjs.base.d.ts +++ b/src/vs/base/common/winjs.base.d.ts @@ -4,136 +4,71 @@ *--------------------------------------------------------------------------------------------*/ /// Interfaces for WinJS -export interface ValueCallback { - (value: any): any; -} - -export interface EventCallback { - (value: any): void; -} +export type ErrorCallback = (error: any) => void; +export type ProgressCallback = (progress: TProgress) => void; + +export declare class Promise { + constructor( + executor: ( + resolve: (value: T | PromiseLike) => void, + reject: (reason: any) => void, + progress: (progress: TProgress) => void) => void, + oncancel?: () => void); + + public then( + onfulfilled?: ((value: T) => TResult1 | PromiseLike) | null, + onrejected?: ((reason: any) => TResult2 | PromiseLike) | null, + onprogress?: (progress: TProgress) => void): Promise; + + public done( + onfulfilled?: (value: T) => void, + onrejected?: (reason: any) => void, + onprogress?: (progress: TProgress) => void): void; -export interface ErrorCallback { - (error: any): any; -} + public cancel(): void; -export interface ProgressCallback { - (progress: any): any; -} + public static as(value: null): Promise; + public static as(value: undefined): Promise; + public static as>(value: TPromise): TPromise; + public static as(value: T): Promise; -export declare class Promise { - // commented out because this conflicts with the native promise - // constructor(init: (complete: ValueCallback, error: ErrorCallback, progress: ProgressCallback) => void, oncancel?: any); + public static is(value: any): value is PromiseLike; - // commented out to speed up adoption of TPromise - // static as(value:any):Promise; + public static timeout(delay: number): Promise; - // static join(promises: { [name: string]: Promise; }): Promise; - static join(promises: Promise[]): Promise; - // static any(promises: Promise[]): Promise; + public static join(promises: [T1 | PromiseLike, T2 | PromiseLike]): Promise<[T1, T2]>; + public static join(promises: (T | PromiseLike)[]): Promise; + public static join(promises: { [n: string]: T | PromiseLike }): Promise<{ [n: string]: T }>; - // commented out to speed up adoption of TPromise - // static timeout(delay:number):Promise; + public static any(promises: (T | PromiseLike)[]): Promise<{ key: string; value: Promise; }>; - // static wrapError(error: Error): Promise; - // static is(value: any): value is Thenable; - // static addEventListener(type: string, fn: EventCallback): void; + public static wrap(value: T | PromiseLike): Promise; - public then(success?: ValueCallback, error?: ErrorCallback, progress?: ProgressCallback): Promise; - // public then(success?: ValueCallback, error?: ErrorCallback, progress?: ProgressCallback): TPromise; - public done(success?: ValueCallback, error?: ErrorCallback, progress?: ProgressCallback): void; - public cancel(): void; -} + public static wrapError(error: Error): Promise; -/** - * The value callback to complete a promise - */ -export interface TValueCallback { - (value: T | Thenable): void; + /** + * @internal + */ + public static addEventListener(event: 'error', promiseErrorHandler: (e: IPromiseError) => void); } +export type TValueCallback = (value: T | PromiseLike) => void; -export interface TProgressCallback { - (progress: T): void; -} +export { + Promise as TPromise, + Promise as PPromise, + TValueCallback as ValueCallback, + ProgressCallback as TProgressCallback +}; -interface IPromiseErrorDetail { - parent: TPromise; +export interface IPromiseErrorDetail { + parent: Promise; error: any; id: number; handler: Function; exception: Error; } -interface IPromiseError { +export interface IPromiseError { detail: IPromiseErrorDetail; } - -/** - * A Promise implementation that supports progress and cancelation. - */ -export declare class TPromise { - - constructor(init: (complete: TValueCallback, error: (err: any) => void, progress: ProgressCallback) => void, oncancel?: any); - - public then(success?: (value: V) => TPromise, error?: (err: any) => TPromise, progress?: ProgressCallback): TPromise; - public then(success?: (value: V) => TPromise, error?: (err: any) => TPromise | U, progress?: ProgressCallback): TPromise; - public then(success?: (value: V) => TPromise, error?: (err: any) => U, progress?: ProgressCallback): TPromise; - public then(success?: (value: V) => TPromise, error?: (err: any) => void, progress?: ProgressCallback): TPromise; - public then(success?: (value: V) => TPromise | U, error?: (err: any) => TPromise, progress?: ProgressCallback): TPromise; - public then(success?: (value: V) => TPromise | U, error?: (err: any) => TPromise | U, progress?: ProgressCallback): TPromise; - public then(success?: (value: V) => TPromise | U, error?: (err: any) => U, progress?: ProgressCallback): TPromise; - public then(success?: (value: V) => TPromise | U, error?: (err: any) => void, progress?: ProgressCallback): TPromise; - public then(success?: (value: V) => U, error?: (err: any) => TPromise, progress?: ProgressCallback): TPromise; - public then(success?: (value: V) => U, error?: (err: any) => TPromise | U, progress?: ProgressCallback): TPromise; - public then(success?: (value: V) => U, error?: (err: any) => U, progress?: ProgressCallback): TPromise; - public then(success?: (value: V) => U, error?: (err: any) => void, progress?: ProgressCallback): TPromise; - - public done(success?: (value: V) => void, error?: (err: any) => any, progress?: ProgressCallback): void; - public cancel(): void; - - public static as(value: null): TPromise; - public static as(value: undefined): TPromise; - public static as(value: TPromise): TPromise; - public static as(value: Thenable): Thenable; - public static as(value: ValueType): TPromise; - - public static is(value: any): value is Thenable; - public static timeout(delay: number): TPromise; - public static join(promises: TPromise[]): TPromise; - public static join(promises: Thenable[]): Thenable; - public static join(promises: { [n: string]: TPromise }): TPromise<{ [n: string]: ValueType }>; - public static any(promises: TPromise[]): TPromise<{ key: string; value: TPromise; }>; - - public static wrap(value: Thenable): TPromise; - public static wrap(value: ValueType): TPromise; - - public static wrapError(error: Error): TPromise; - - /** - * @internal - */ - public static addEventListener(event: 'error', promiseErrorHandler: (e: IPromiseError) => void); -} - -// --- Generic promise with generic progress value -export declare class PPromise extends TPromise { - - constructor(init: (complete: TValueCallback, error: (err: any) => void, progress: TProgressCallback

) => void, oncancel?: any); - - public then(success?: (value: C) => PPromise, error?: (err: any) => PPromise, progress?: (value: P) => void): PPromise; - public then(success?: (value: C) => PPromise, error?: (err: any) => U, progress?: (value: P) => void): PPromise; - public then(success?: (value: C) => PPromise, error?: (err: any) => void, progress?: (value: P) => void): PPromise; - public then(success?: (value: C) => U, error?: (err: any) => PPromise, progress?: (value: P) => void): PPromise; - public then(success?: (value: C) => U, error?: (err: any) => U, progress?: (value: P) => void): PPromise; - public then(success?: (value: C) => U, error?: (err: any) => void, progress?: (value: P) => void): PPromise; - - public done(success?: (value: C) => void, error?: (err: any) => any, progress?: (value: P) => void): void; - public cancel(): void; - - public static as(value: V): TPromise; - public static timeout(delay: number): PPromise; - public static join(promises: PPromise[]): PPromise; - public static join(promises: { [n: string]: PPromise }): PPromise<{ [n: string]: C }, P>; - public static any(promises: PPromise[]): PPromise<{ key: string; value: PPromise; }, P>; - public static wrapError(error: Error): TPromise; -} diff --git a/src/vs/code/electron-browser/sharedProcessMain.ts b/src/vs/code/electron-browser/sharedProcessMain.ts index 646098f8b6fb9..ef7a31319cf89 100644 --- a/src/vs/code/electron-browser/sharedProcessMain.ts +++ b/src/vs/code/electron-browser/sharedProcessMain.ts @@ -138,7 +138,7 @@ function main(server: Server, initData: ISharedProcessInitData): void { function setupIPC(hook: string): TPromise { function setup(retry: boolean): TPromise { - return serve(hook).then(null, err => { + return serve(hook).then(null, err => { if (!retry || platform.isWindows || err.code !== 'EADDRINUSE') { return TPromise.wrapError(err); } diff --git a/src/vs/editor/contrib/goToDeclaration/browser/goToDeclaration.ts b/src/vs/editor/contrib/goToDeclaration/browser/goToDeclaration.ts index 182404712f76c..a006d5eb1dad7 100644 --- a/src/vs/editor/contrib/goToDeclaration/browser/goToDeclaration.ts +++ b/src/vs/editor/contrib/goToDeclaration/browser/goToDeclaration.ts @@ -41,10 +41,9 @@ function getDefinitions( const promises = provider.map((provider, idx) => { return asWinJsPromise((token) => { return provide(provider, model, position, token); - }).then(result => { - return result; - }, err => { + }).then(undefined, err => { onUnexpectedExternalError(err); + return null; }); }); return outputResults(promises); diff --git a/src/vs/editor/contrib/goToDeclaration/browser/goToDeclarationCommands.ts b/src/vs/editor/contrib/goToDeclaration/browser/goToDeclarationCommands.ts index 0115099afdc79..17e7a051baa43 100644 --- a/src/vs/editor/contrib/goToDeclaration/browser/goToDeclarationCommands.ts +++ b/src/vs/editor/contrib/goToDeclaration/browser/goToDeclarationCommands.ts @@ -103,7 +103,6 @@ export class DefinitionAction extends EditorAction { }, (err) => { // report an error messageService.show(Severity.Error, err); - return false; }); } diff --git a/src/vs/editor/contrib/hover/browser/hoverOperation.ts b/src/vs/editor/contrib/hover/browser/hoverOperation.ts index 59ea0eff077b0..71c151f9fa122 100644 --- a/src/vs/editor/contrib/hover/browser/hoverOperation.ts +++ b/src/vs/editor/contrib/hover/browser/hoverOperation.ts @@ -99,7 +99,7 @@ export class HoverOperation { this._asyncComputationPromise = this._computer.computeAsync().then((asyncResult: Result) => { this._asyncComputationPromiseDone = true; this._withAsyncResult(asyncResult); - }, () => this._onError); + }, (e) => this._onError(e)); } else { this._asyncComputationPromiseDone = true; } diff --git a/src/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.ts b/src/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.ts index d5ee521195b57..fd83ce1c00eb3 100644 --- a/src/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.ts +++ b/src/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.ts @@ -91,7 +91,7 @@ export class ParameterHintsModel extends Disposable { private doTrigger(): void { provideSignatureHelp(this.editor.getModel(), this.editor.getPosition()) - .then(null, onUnexpectedError) + .then(null, onUnexpectedError) .then(result => { if (!result || !result.signatures || result.signatures.length === 0) { this.cancel(); diff --git a/src/vs/editor/contrib/wordHighlighter/common/wordHighlighter.ts b/src/vs/editor/contrib/wordHighlighter/common/wordHighlighter.ts index 52b6d50d1511c..289dde559d221 100644 --- a/src/vs/editor/contrib/wordHighlighter/common/wordHighlighter.ts +++ b/src/vs/editor/contrib/wordHighlighter/common/wordHighlighter.ts @@ -44,6 +44,7 @@ export function getOccurrencesAtPosition(model: editorCommon.IReadOnlyModel, pos return undefined; }, err => { onUnexpectedExternalError(err); + return undefined; }); } return undefined; diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index ae8c929e84eda..97c8a13a94d56 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -5,16 +5,7 @@ declare module monaco { - interface Thenable { - /** - * Attaches callbacks for the resolution and/or rejection of the Promise. - * @param onfulfilled The callback to execute when the Promise is resolved. - * @param onrejected The callback to execute when the Promise is rejected. - * @returns A Promise for the completion of which ever callback is executed. - */ - then(onfulfilled?: (value: T) => TResult | Thenable, onrejected?: (reason: any) => TResult | Thenable): Thenable; - then(onfulfilled?: (value: T) => TResult | Thenable, onrejected?: (reason: any) => void): Thenable; - } + type Thenable = PromiseLike; export interface IDisposable { dispose(): void; @@ -43,59 +34,49 @@ declare module monaco { - /** - * The value callback to complete a promise - */ - export interface TValueCallback { - (value: T | Thenable): void; - } + export type TValueCallback = (value: T | PromiseLike) => void; + export type ProgressCallback = (progress: TProgress) => void; - export interface ProgressCallback { - (progress: any): any; - } + export class Promise { + constructor( + executor: ( + resolve: (value: T | PromiseLike) => void, + reject: (reason: any) => void, + progress: (progress: TProgress) => void) => void, + oncancel?: () => void); - /** - * A Promise implementation that supports progress and cancelation. - */ - export class Promise { - - constructor(init: (complete: TValueCallback, error: (err: any) => void, progress: ProgressCallback) => void, oncancel?: any); + public then( + onfulfilled?: ((value: T) => TResult1 | PromiseLike) | null, + onrejected?: ((reason: any) => TResult2 | PromiseLike) | null, + onprogress?: (progress: TProgress) => void): Promise; - public then(success?: (value: V) => Promise, error?: (err: any) => Promise, progress?: ProgressCallback): Promise; - public then(success?: (value: V) => Promise, error?: (err: any) => Promise | U, progress?: ProgressCallback): Promise; - public then(success?: (value: V) => Promise, error?: (err: any) => U, progress?: ProgressCallback): Promise; - public then(success?: (value: V) => Promise, error?: (err: any) => void, progress?: ProgressCallback): Promise; - public then(success?: (value: V) => Promise | U, error?: (err: any) => Promise, progress?: ProgressCallback): Promise; - public then(success?: (value: V) => Promise | U, error?: (err: any) => Promise | U, progress?: ProgressCallback): Promise; - public then(success?: (value: V) => Promise | U, error?: (err: any) => U, progress?: ProgressCallback): Promise; - public then(success?: (value: V) => Promise | U, error?: (err: any) => void, progress?: ProgressCallback): Promise; - public then(success?: (value: V) => U, error?: (err: any) => Promise, progress?: ProgressCallback): Promise; - public then(success?: (value: V) => U, error?: (err: any) => Promise | U, progress?: ProgressCallback): Promise; - public then(success?: (value: V) => U, error?: (err: any) => U, progress?: ProgressCallback): Promise; - public then(success?: (value: V) => U, error?: (err: any) => void, progress?: ProgressCallback): Promise; + public done( + onfulfilled?: (value: T) => void, + onrejected?: (reason: any) => void, + onprogress?: (progress: TProgress) => void): void; - public done(success?: (value: V) => void, error?: (err: any) => any, progress?: ProgressCallback): void; public cancel(): void; public static as(value: null): Promise; public static as(value: undefined): Promise; - public static as(value: Promise): Promise; - public static as(value: Thenable): Thenable; - public static as(value: ValueType): Promise; + public static as>(value: TPromise): TPromise; + public static as(value: T): Promise; + + public static is(value: any): value is PromiseLike; - public static is(value: any): value is Thenable; public static timeout(delay: number): Promise; - public static join(promises: Promise[]): Promise; - public static join(promises: Thenable[]): Thenable; - public static join(promises: { [n: string]: Promise }): Promise<{ [n: string]: ValueType }>; - public static any(promises: Promise[]): Promise<{ key: string; value: Promise; }>; - public static wrap(value: Thenable): Promise; - public static wrap(value: ValueType): Promise; + public static join(promises: [T1 | PromiseLike, T2 | PromiseLike]): Promise<[T1, T2]>; + public static join(promises: (T | PromiseLike)[]): Promise; + public static join(promises: { [n: string]: T | PromiseLike }): Promise<{ [n: string]: T }>; + + public static any(promises: (T | PromiseLike)[]): Promise<{ key: string; value: Promise; }>; + + public static wrap(value: T | PromiseLike): Promise; - public static wrapError(error: Error): Promise; + public static wrapError(error: Error): Promise; } export class CancellationTokenSource { diff --git a/src/vs/platform/extensionManagement/node/extensionGalleryService.ts b/src/vs/platform/extensionManagement/node/extensionGalleryService.ts index 6b5d9a67ca1b6..a70e63cbb760e 100644 --- a/src/vs/platform/extensionManagement/node/extensionGalleryService.ts +++ b/src/vs/platform/extensionManagement/node/extensionGalleryService.ts @@ -515,7 +515,7 @@ export class ExtensionGalleryService implements IExtensionGalleryService { const firstOptions = assign({}, options, { url: asset.uri }); return this.requestService.request(firstOptions) - .then(context => context.res.statusCode === 200 ? context : TPromise.wrapError(new Error('expected 200'))) + .then(context => context.res.statusCode === 200 ? context : TPromise.wrapError(new Error('expected 200'))) .then(null, err => { this.telemetryService.publicLog('galleryService:requestError', { cdn: true, message: getErrorMessage(err) }); this.telemetryService.publicLog('galleryService:cdnFallback', { url: asset.uri }); diff --git a/src/vs/platform/extensionManagement/node/extensionManagementService.ts b/src/vs/platform/extensionManagement/node/extensionManagementService.ts index ebe55654b9011..19142629db98a 100644 --- a/src/vs/platform/extensionManagement/node/extensionManagementService.ts +++ b/src/vs/platform/extensionManagement/node/extensionManagementService.ts @@ -55,7 +55,7 @@ function readManifest(extensionPath: string): TPromise<{ manifest: IExtensionMan pfs.readFile(path.join(extensionPath, 'package.json'), 'utf8') .then(raw => parseManifest(raw)), pfs.readFile(path.join(extensionPath, 'package.nls.json'), 'utf8') - .then(null, err => err.code !== 'ENOENT' ? TPromise.wrapError(err) : '{}') + .then(null, err => err.code !== 'ENOENT' ? TPromise.wrapError(err) : '{}') .then(raw => JSON.parse(raw)) ]; @@ -294,13 +294,13 @@ export class ExtensionManagementService implements IExtensionManagementService { uninstall(extension: ILocalExtension, force = false): TPromise { return this.removeOutdatedExtensions().then(() => { - return this.scanUserExtensions().then(installed => { + return this.scanUserExtensions().then(installed => { const promises = installed .filter(e => e.manifest.publisher === extension.manifest.publisher && e.manifest.name === extension.manifest.name) .map(e => this.checkForDependenciesAndUninstall(e, installed, force)); return TPromise.join(promises); }); - }); + }).then(() => { /* drop resolved value */ }); } private checkForDependenciesAndUninstall(extension: ILocalExtension, installed: ILocalExtension[], force: boolean): TPromise { @@ -575,7 +575,7 @@ export class ExtensionManagementService implements IExtensionManagementService { return this.obsoleteFileLimiter.queue(() => { let result: T = null; return pfs.readFile(this.obsoletePath, 'utf8') - .then(null, err => err.code === 'ENOENT' ? TPromise.as('{}') : TPromise.wrapError(err)) + .then(null, err => err.code === 'ENOENT' ? TPromise.as('{}') : TPromise.wrapError(err)) .then<{ [id: string]: boolean }>(raw => { try { return JSON.parse(raw); } catch (e) { return {}; } }) .then(obsolete => { result = fn(obsolete); return obsolete; }) .then(obsolete => { diff --git a/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts b/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts index b22f7c6df8b47..0a09b6598d0f6 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts @@ -85,7 +85,7 @@ export class MainThreadDebugService implements MainThreadDebugServiceShape { if (process) { return process.getId(); } - return TPromise.wrapError(new Error('cannot create debug session')); + return TPromise.wrapError(new Error('cannot create debug session')); }, err => { return TPromise.wrapError(err && err.message ? err.message : 'cannot start debug session'); }); diff --git a/src/vs/workbench/api/electron-browser/mainThreadTreeViews.ts b/src/vs/workbench/api/electron-browser/mainThreadTreeViews.ts index 52b1ba27df4df..ed31354268d2a 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadTreeViews.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadTreeViews.ts @@ -62,7 +62,10 @@ class TreeViewDataProvider implements ITreeViewDataProvider { .then(elements => { this.postGetElements(null, elements); return elements; - }, err => this.messageService.show(Severity.Error, err)); + }, err => { + this.messageService.show(Severity.Error, err); + return null; + }); } getChildren(treeItem: ITreeItem): TPromise { @@ -73,7 +76,10 @@ class TreeViewDataProvider implements ITreeViewDataProvider { .then(children => { this.postGetElements(treeItem.handle, children); return children; - }, err => this.messageService.show(Severity.Error, err)); + }, err => { + this.messageService.show(Severity.Error, err); + return null; + }); } refresh(treeItemHandles: number[]) { diff --git a/src/vs/workbench/api/node/extHostTextEditor.ts b/src/vs/workbench/api/node/extHostTextEditor.ts index c990fba30bd92..763969acc9696 100644 --- a/src/vs/workbench/api/node/extHostTextEditor.ts +++ b/src/vs/workbench/api/node/extHostTextEditor.ts @@ -542,10 +542,10 @@ export class ExtHostTextEditor implements vscode.TextEditor { return TPromise.as(undefined); } return callback().then(() => this, err => { - if (err instanceof Error && err.name === 'DISPOSED') { - return; + if (!(err instanceof Error && err.name === 'DISPOSED')) { + console.warn(err); } - console.warn(err); + return null; }); } } diff --git a/src/vs/workbench/browser/parts/editor/editorPart.ts b/src/vs/workbench/browser/parts/editor/editorPart.ts index 6c625a26b618b..abf883ccba4d0 100644 --- a/src/vs/workbench/browser/parts/editor/editorPart.ts +++ b/src/vs/workbench/browser/parts/editor/editorPart.ts @@ -403,7 +403,10 @@ export class EditorPart extends Part implements IEditorPart, IEditorGroupService return editor; - }, e => this.messageService.show(Severity.Error, types.isString(e) ? new Error(e) : e)); + }, e => { + this.messageService.show(Severity.Error, types.isString(e) ? new Error(e) : e); + return null; + }); } private doCreateEditor(group: EditorGroup, descriptor: IEditorDescriptor, monitor: ProgressMonitor): TPromise { @@ -513,7 +516,10 @@ export class EditorPart extends Part implements IEditorPart, IEditorGroupService // Fullfill promise with Editor that is being used return editor; - }, e => this.doHandleSetInputError(e, group, editor, input, options, monitor)); + }, e => { + this.doHandleSetInputError(e, group, editor, input, options, monitor); + return null; + }); } private doHandleSetInputError(e: Error | IMessageWithAction, group: EditorGroup, editor: BaseEditor, input: EditorInput, options: EditorOptions, monitor: ProgressMonitor): void { diff --git a/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts b/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts index 2670b54ac6253..084c5d086f342 100644 --- a/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts +++ b/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts @@ -207,6 +207,7 @@ export class QuickOpenController extends Component implements IQuickOpenService }); }, err => { // ignore + return null; }); } } diff --git a/src/vs/workbench/parts/backup/common/backupRestorer.ts b/src/vs/workbench/parts/backup/common/backupRestorer.ts index 26c470d63bd89..f035909c3e9c6 100644 --- a/src/vs/workbench/parts/backup/common/backupRestorer.ts +++ b/src/vs/workbench/parts/backup/common/backupRestorer.ts @@ -62,7 +62,7 @@ export class BackupRestorer implements IWorkbenchContribution { private doResolveOpenedBackups(backups: URI[]): TPromise { const stacks = this.groupService.getStacksModel(); - const restorePromises: TPromise[] = []; + const restorePromises: TPromise[] = []; const unresolved: URI[] = []; backups.forEach(backup => { diff --git a/src/vs/workbench/parts/cli/electron-browser/cli.contribution.ts b/src/vs/workbench/parts/cli/electron-browser/cli.contribution.ts index c852b905cd12a..3aa4c25c5327c 100644 --- a/src/vs/workbench/parts/cli/electron-browser/cli.contribution.ts +++ b/src/vs/workbench/parts/cli/electron-browser/cli.contribution.ts @@ -81,7 +81,9 @@ class InstallAction extends Action { }); } }) - .then(() => this.messageService.show(Severity.Info, nls.localize('successIn', "Shell command '{0}' successfully installed in PATH.", product.applicationName))); + .then(() => { + this.messageService.show(Severity.Info, nls.localize('successIn', "Shell command '{0}' successfully installed in PATH.", product.applicationName)); + }); }); } @@ -141,8 +143,9 @@ class UninstallAction extends Action { return pfs.unlink(this.target) .then(null, ignore('ENOENT')) - .then(() => this.messageService.show(Severity.Info, nls.localize('successFrom', "Shell command '{0}' successfully uninstalled from PATH.", product.applicationName))) - .then(null); + .then(() => { + this.messageService.show(Severity.Info, nls.localize('successFrom', "Shell command '{0}' successfully uninstalled from PATH.", product.applicationName)); + }); }); } } diff --git a/src/vs/workbench/parts/debug/electron-browser/debugService.ts b/src/vs/workbench/parts/debug/electron-browser/debugService.ts index efee1adc6d134..5089c0e472003 100644 --- a/src/vs/workbench/parts/debug/electron-browser/debugService.ts +++ b/src/vs/workbench/parts/debug/electron-browser/debugService.ts @@ -656,7 +656,7 @@ export class DebugService implements debug.IDebugService { return TPromise.wrapError(new Error(nls.localize('configMissing', "Configuration '{0}' is missing in 'launch.json'.", configOrName))); } - return manager.getStartSessionCommand(config ? config.type : undefined).then(commandAndType => { + return manager.getStartSessionCommand(config ? config.type : undefined).then(commandAndType => { if (noDebug && config) { config.noDebug = true; } @@ -753,13 +753,15 @@ export class DebugService implements debug.IDebugService { }); }, err => { if (!this.contextService.hasWorkspace()) { - return this.messageService.show(severity.Error, nls.localize('noFolderWorkspaceDebugError', "The active file can not be debugged. Make sure it is saved on disk and that you have a debug extension installed for that file type.")); + this.messageService.show(severity.Error, nls.localize('noFolderWorkspaceDebugError', "The active file can not be debugged. Make sure it is saved on disk and that you have a debug extension installed for that file type.")); + return undefined; } return this.configurationManager.selectedLaunch.openConfigFile(false).then(openend => { if (openend) { this.messageService.show(severity.Info, nls.localize('NewLaunchConfig', "Please set up the launch configuration file for your application. {0}", err.message)); } + return undefined; }); }) ); diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionsUtils.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionsUtils.ts index c33a4ecd7d4ea..bfd75970a5917 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionsUtils.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionsUtils.ts @@ -79,7 +79,7 @@ export class KeymapExtensions implements IWorkbenchContribution { localize('no', "No") ]; return this.choiceService.choose(Severity.Info, message, options, 1, false) - .then(value => { + .then(value => { const confirmed = value === 0; telemetryData['confirmed'] = confirmed; this.telemetryService.publicLog('disableOtherKeymaps', telemetryData); @@ -89,7 +89,8 @@ export class KeymapExtensions implements IWorkbenchContribution { })); } return undefined; - }, error => TPromise.wrapError(canceled())); + }, error => TPromise.wrapError(canceled())) + .then(() => { /* drop resolved value */ }); } dispose(): void { diff --git a/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts b/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts index 8229a8fed8643..f6a30f32c9aab 100644 --- a/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts +++ b/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts @@ -830,7 +830,7 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService { nls.localize('install', "Install"), nls.localize('cancel', "Cancel") ]; - return this.choiceService.choose(Severity.Info, message, options, 2, false).then(value => { + return this.choiceService.choose(Severity.Info, message, options, 2, false).then(value => { if (value !== 0) { return TPromise.as(null); } diff --git a/src/vs/workbench/parts/files/browser/fileActions.ts b/src/vs/workbench/parts/files/browser/fileActions.ts index 40822918de9be..6016dda0910ff 100644 --- a/src/vs/workbench/parts/files/browser/fileActions.ts +++ b/src/vs/workbench/parts/files/browser/fileActions.ts @@ -1338,7 +1338,10 @@ export abstract class BaseSaveFileAction extends BaseErrorReportingAction { } public run(context?: any): TPromise { - return this.doRun(context).then(() => true, error => this.onError(error)); + return this.doRun(context).then(() => true, error => { + this.onError(error); + return null; + }); } protected abstract doRun(context?: any): TPromise; diff --git a/src/vs/workbench/parts/files/browser/fileCommands.ts b/src/vs/workbench/parts/files/browser/fileCommands.ts index e38fb596c2ce0..be7013d7286ea 100644 --- a/src/vs/workbench/parts/files/browser/fileCommands.ts +++ b/src/vs/workbench/parts/files/browser/fileCommands.ts @@ -215,12 +215,12 @@ function withFocusedExplorerItem(accessor: ServicesAccessor): TPromise { if (res) { - return res.item; + return res.item as FileStat | OpenEditor; } return void 0; }); - }) as TPromise; // TypeScript fail + }); }; export const renameFocusedFilesExplorerViewItemCommand = (accessor: ServicesAccessor) => { diff --git a/src/vs/workbench/parts/files/browser/views/explorerView.ts b/src/vs/workbench/parts/files/browser/views/explorerView.ts index d28ad5904f17c..679a6fae06e23 100644 --- a/src/vs/workbench/parts/files/browser/views/explorerView.ts +++ b/src/vs/workbench/parts/files/browser/views/explorerView.ts @@ -866,7 +866,7 @@ export class ExplorerView extends CollapsibleView { // Select and Reveal return this.explorerViewer.refresh(root).then(() => this.doSelect(root.find(resource), reveal)); - }, e => this.messageService.show(Severity.Error, e)); + }, e => { this.messageService.show(Severity.Error, e); }); } private hasSelection(resource: URI): FileStat { diff --git a/src/vs/workbench/parts/files/common/editors/fileEditorInput.ts b/src/vs/workbench/parts/files/common/editors/fileEditorInput.ts index b85202fdc87be..4ab1512df6a05 100644 --- a/src/vs/workbench/parts/files/common/editors/fileEditorInput.ts +++ b/src/vs/workbench/parts/files/common/editors/fileEditorInput.ts @@ -228,7 +228,7 @@ export class FileEditorInput extends EditorInput implements IFileEditorInput { } // Bubble any other error up - return TPromise.wrapError(error); + return TPromise.wrapError(error); }); } diff --git a/src/vs/workbench/parts/preferences/browser/preferencesService.ts b/src/vs/workbench/parts/preferences/browser/preferencesService.ts index 1ac73c1283e05..046c8e24c1549 100644 --- a/src/vs/workbench/parts/preferences/browser/preferencesService.ts +++ b/src/vs/workbench/parts/preferences/browser/preferencesService.ts @@ -340,15 +340,15 @@ export class PreferencesService extends Disposable implements IPreferencesServic return this.createIfNotExists(resource, emptyEditableSettingsContent).then(() => { }); } - private createIfNotExists(resource: URI, contents: string): TPromise { + private createIfNotExists(resource: URI, contents: string): TPromise { return this.fileService.resolveContent(resource, { acceptTextOnly: true }).then(null, error => { if ((error).fileOperationResult === FileOperationResult.FILE_NOT_FOUND) { return this.fileService.updateContent(resource, contents).then(null, error => { - return TPromise.wrapError(new Error(nls.localize('fail.createSettings', "Unable to create '{0}' ({1}).", labels.getPathLabel(resource, this.contextService, this.environmentService), error))); + return TPromise.wrapError(new Error(nls.localize('fail.createSettings', "Unable to create '{0}' ({1}).", labels.getPathLabel(resource, this.contextService, this.environmentService), error))); }); } - return TPromise.wrapError(error); + return TPromise.wrapError(error); }); } diff --git a/src/vs/workbench/parts/search/browser/openAnythingHandler.ts b/src/vs/workbench/parts/search/browser/openAnythingHandler.ts index 8c79b5fa0ead1..3eae07844b7cc 100644 --- a/src/vs/workbench/parts/search/browser/openAnythingHandler.ts +++ b/src/vs/workbench/parts/search/browser/openAnythingHandler.ts @@ -216,6 +216,7 @@ export class OpenAnythingHandler extends QuickOpenHandler { }, (error: Error) => { this.pendingSearch = null; this.messageService.show(Severity.Error, error); + return null; }); return this.pendingSearch; diff --git a/src/vs/workbench/parts/tasks/node/processRunnerDetector.ts b/src/vs/workbench/parts/tasks/node/processRunnerDetector.ts index ed09f3635baf3..eb29e67c02351 100644 --- a/src/vs/workbench/parts/tasks/node/processRunnerDetector.ts +++ b/src/vs/workbench/parts/tasks/node/processRunnerDetector.ts @@ -232,7 +232,7 @@ export class ProcessRunnerDetector { let config = ProcessRunnerDetector.detectorConfig('gulp'); let process = new LineProcess('gulp', [config.arg, '--no-color'], true, { cwd: this._cwd }); return this.runDetection(process, 'gulp', true, config.matcher, ProcessRunnerDetector.DefaultProblemMatchers, list); - }, (err: any): TaskConfig.ExternalTaskRunnerConfiguration => { + }, (err: any) => { return null; }); } @@ -242,7 +242,7 @@ export class ProcessRunnerDetector { let config = ProcessRunnerDetector.detectorConfig('grunt'); let process = new LineProcess('grunt', [config.arg, '--no-color'], true, { cwd: this._cwd }); return this.runDetection(process, 'grunt', true, config.matcher, ProcessRunnerDetector.DefaultProblemMatchers, list); - }, (err: any): TaskConfig.ExternalTaskRunnerConfiguration => { + }, (err: any) => { return null; }); } @@ -258,7 +258,7 @@ export class ProcessRunnerDetector { }, (err: any) => { return this.fileService.resolveFile(this.contextService.toResource('Jakefile.js')).then((stat) => { // TODO@Dirk (https://github.com/Microsoft/vscode/issues/29454) return run(); - }, (err: any): TaskConfig.ExternalTaskRunnerConfiguration => { + }, (err: any) => { return null; }); }); diff --git a/src/vs/workbench/parts/welcome/page/electron-browser/welcomePage.ts b/src/vs/workbench/parts/welcome/page/electron-browser/welcomePage.ts index fd738117cd000..7264d548e8581 100644 --- a/src/vs/workbench/parts/welcome/page/electron-browser/welcomePage.ts +++ b/src/vs/workbench/parts/welcome/page/electron-browser/welcomePage.ts @@ -458,7 +458,7 @@ class WelcomePage { }) ] }); - }).then(null, err => { + }).then(null, err => { this.telemetryService.publicLog(strings.installedEvent, { from: telemetryFrom, extensionId: extensionSuggestion.id, diff --git a/src/vs/workbench/services/configuration/node/configurationEditingService.ts b/src/vs/workbench/services/configuration/node/configurationEditingService.ts index 259864baf1c5f..39dcec2fb8057 100644 --- a/src/vs/workbench/services/configuration/node/configurationEditingService.ts +++ b/src/vs/workbench/services/configuration/node/configurationEditingService.ts @@ -153,10 +153,10 @@ export class ConfigurationEditingService implements IConfigurationEditingService this.commandService.executeCommand(ConfigurationTarget.USER === target ? 'workbench.action.openGlobalSettings' : 'workbench.action.openWorkspaceSettings'); } - private wrapError(code: ConfigurationEditingErrorCode, target: ConfigurationTarget, operation: IConfigurationEditOperation): TPromise { + private wrapError(code: ConfigurationEditingErrorCode, target: ConfigurationTarget, operation: IConfigurationEditOperation): TPromise { const message = this.toErrorMessage(code, target, operation); - return TPromise.wrapError(new ConfigurationEditingError(message, code)); + return TPromise.wrapError(new ConfigurationEditingError(message, code)); } private toErrorMessage(error: ConfigurationEditingErrorCode, target: ConfigurationTarget, operation: IConfigurationEditOperation): string { @@ -271,14 +271,14 @@ export class ConfigurationEditingService implements IConfigurationEditingService const model = reference.object.textEditorModel; if (this.hasParseErrors(model, operation)) { - return this.wrapError(ConfigurationEditingErrorCode.ERROR_INVALID_CONFIGURATION, target, operation); + return this.wrapError(ConfigurationEditingErrorCode.ERROR_INVALID_CONFIGURATION, target, operation); } // Target cannot be dirty if not writing into buffer if (checkDirty && this.textFileService.isDirty(operation.resource)) { - return this.wrapError(ConfigurationEditingErrorCode.ERROR_CONFIGURATION_FILE_DIRTY, target, operation); + return this.wrapError(ConfigurationEditingErrorCode.ERROR_CONFIGURATION_FILE_DIRTY, target, operation); } - return TPromise.wrap(reference); + return reference; }); } diff --git a/src/vs/workbench/services/extensions/electron-browser/extensionService.ts b/src/vs/workbench/services/extensions/electron-browser/extensionService.ts index 340c982cd20c9..e33388b77756a 100644 --- a/src/vs/workbench/services/extensions/electron-browser/extensionService.ts +++ b/src/vs/workbench/services/extensions/electron-browser/extensionService.ts @@ -356,7 +356,7 @@ export class ExtensionService implements IExtensionService { }); return Object.keys(result).map(name => result[name]); - }).then(null, err => { + }).then(null, err => { log.error('', err); return []; }); diff --git a/src/vs/workbench/services/textfile/common/textFileService.ts b/src/vs/workbench/services/textfile/common/textFileService.ts index d4bfaa7bf8206..413d030c6cabe 100644 --- a/src/vs/workbench/services/textfile/common/textFileService.ts +++ b/src/vs/workbench/services/textfile/common/textFileService.ts @@ -561,7 +561,7 @@ export abstract class TextFileService implements ITextFileService { modelPromise = this.untitledEditorService.loadOrCreate({ resource }); } - return modelPromise.then(model => { + return modelPromise.then(model => { // We have a model: Use it (can be null e.g. if this file is binary and not a text file or was never opened before) if (model) { diff --git a/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.ts b/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.ts index 8f0acdd5f7cf6..10b047cc5e013 100644 --- a/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.ts +++ b/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.ts @@ -340,7 +340,7 @@ export class WorkbenchThemeService implements IWorkbenchThemeService { }); } - private initialize(): TPromise { + private initialize(): TPromise<[IColorTheme, IFileIconTheme]> { this.updateColorCustomizations(false);