From 6021c45d7c7d26cd38e4a2a758d46f7b4ca551fa Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Thu, 6 Jul 2017 19:17:56 -0700 Subject: [PATCH 1/3] Update definition of Promise in winjs.base.d.ts. --- build/monaco/monaco.d.ts.recipe | 13 +-- src/vs/base/common/winjs.base.d.ts | 163 +++++++++-------------------- src/vs/monaco.d.ts | 82 ++++++--------- 3 files changed, 88 insertions(+), 170 deletions(-) diff --git a/build/monaco/monaco.d.ts.recipe b/build/monaco/monaco.d.ts.recipe index 1a3f3c6143124a..bf3d916065dedb 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/winjs.base.d.ts b/src/vs/base/common/winjs.base.d.ts index 5cbbf2394a9133..340c0da13bf135 100644 --- a/src/vs/base/common/winjs.base.d.ts +++ b/src/vs/base/common/winjs.base.d.ts @@ -4,135 +4,76 @@ *--------------------------------------------------------------------------------------------*/ /// 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) => void) | null, + onprogress?: (progress: TProgress) => void): Promise; + + 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 { - 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/monaco.d.ts b/src/vs/monaco.d.ts index 7e3864f54b5c60..51b20f0af75918 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,54 @@ 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 { + public then( + onfulfilled?: ((value: T) => TResult1 | PromiseLike) | null, + onrejected?: ((reason: any) => void) | null, + onprogress?: (progress: TProgress) => void): 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 { From 2ba3a0ae5b14c5431e1562bba86b9290046d297b Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Thu, 6 Jul 2017 19:31:15 -0700 Subject: [PATCH 2/3] Update to new Promise declaration --- src/vs/base/common/errors.ts | 4 ++-- src/vs/base/common/winjs.base.d.ts | 5 ----- .../parameterHints/browser/parameterHintsWidget.ts | 2 +- src/vs/monaco.d.ts | 5 ----- .../extensionManagement/node/extensionGalleryService.ts | 2 +- .../node/extensionManagementService.ts | 6 +++--- .../api/electron-browser/mainThreadDebugService.ts | 2 +- src/vs/workbench/parts/backup/common/backupRestorer.ts | 2 +- .../parts/cli/electron-browser/cli.contribution.ts | 8 ++++++-- .../parts/debug/electron-browser/debugService.ts | 6 ++++-- .../parts/extensions/electron-browser/extensionsUtils.ts | 5 +++-- src/vs/workbench/parts/files/browser/fileCommands.ts | 4 ++-- .../parts/files/common/editors/fileEditorInput.ts | 2 +- .../parts/preferences/browser/preferencesService.ts | 6 +++--- src/vs/workbench/parts/search/browser/searchActions.ts | 2 +- .../parts/welcome/page/electron-browser/welcomePage.ts | 2 +- .../configuration/node/configurationEditingService.ts | 8 ++++---- .../workbench/services/textfile/common/textFileService.ts | 2 +- .../themes/electron-browser/workbenchThemeService.ts | 2 +- 19 files changed, 36 insertions(+), 39 deletions(-) diff --git a/src/vs/base/common/errors.ts b/src/vs/base/common/errors.ts index 4830dbb03c8d48..58eff6e1362bdb 100644 --- a/src/vs/base/common/errors.ts +++ b/src/vs/base/common/errors.ts @@ -148,8 +148,8 @@ export function onUnexpectedExternalError(e: any): void { } } -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 340c0da13bf135..434db0a5fa846f 100644 --- a/src/vs/base/common/winjs.base.d.ts +++ b/src/vs/base/common/winjs.base.d.ts @@ -15,11 +15,6 @@ export declare class Promise { progress: (progress: TProgress) => void) => void, oncancel?: () => void); - public then( - onfulfilled?: ((value: T) => TResult1 | PromiseLike) | null, - onrejected?: ((reason: any) => void) | null, - onprogress?: (progress: TProgress) => void): Promise; - public then( onfulfilled?: ((value: T) => TResult1 | PromiseLike) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | null, diff --git a/src/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.ts b/src/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.ts index d5ee521195b57d..fd83ce1c00eb36 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/monaco.d.ts b/src/vs/monaco.d.ts index 51b20f0af75918..03af3b9986751d 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -47,11 +47,6 @@ declare module monaco { progress: (progress: TProgress) => void) => void, oncancel?: () => void); - public then( - onfulfilled?: ((value: T) => TResult1 | PromiseLike) | null, - onrejected?: ((reason: any) => void) | null, - onprogress?: (progress: TProgress) => void): Promise; - public then( onfulfilled?: ((value: T) => TResult1 | PromiseLike) | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | null, diff --git a/src/vs/platform/extensionManagement/node/extensionGalleryService.ts b/src/vs/platform/extensionManagement/node/extensionGalleryService.ts index 6b5d9a67ca1b62..a70e63cbb760e8 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 2fa14e5bf6b412..37030da9a7f233 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 { diff --git a/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts b/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts index e73d8eecbb2f6d..a244960382cfad 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadDebugService.ts @@ -50,7 +50,7 @@ export class MainThreadDebugService extends 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 create debug session'); }); diff --git a/src/vs/workbench/parts/backup/common/backupRestorer.ts b/src/vs/workbench/parts/backup/common/backupRestorer.ts index 26c470d63bd89d..f035909c3e9c6d 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 053bfa2d5546a5..3aa4c25c5327cd 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,7 +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(() => { + 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 ba5fe5d180110f..e7390dc643b2da 100644 --- a/src/vs/workbench/parts/debug/electron-browser/debugService.ts +++ b/src/vs/workbench/parts/debug/electron-browser/debugService.ts @@ -652,7 +652,7 @@ export class DebugService implements debug.IDebugService { return TPromise.wrapError(new Error(nls.localize('configMissing', "Configuration '{0}' is missing in 'launch.json'.", configName))); } - return manager.getStartSessionCommand(config ? config.type : undefined).then(commandAndType => { + return manager.getStartSessionCommand(config ? config.type : undefined).then(commandAndType => { if (noDebug && config) { config.noDebug = true; } @@ -733,13 +733,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.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 c33a4ecd7d4ea3..bfd75970a59172 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/files/browser/fileCommands.ts b/src/vs/workbench/parts/files/browser/fileCommands.ts index 4db2af9e1b4679..84482d847b9b1e 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/common/editors/fileEditorInput.ts b/src/vs/workbench/parts/files/common/editors/fileEditorInput.ts index 8700ed4ecdd04d..f7bccc94744f87 100644 --- a/src/vs/workbench/parts/files/common/editors/fileEditorInput.ts +++ b/src/vs/workbench/parts/files/common/editors/fileEditorInput.ts @@ -221,7 +221,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 d3355b34349a18..fc5299be1b831e 100644 --- a/src/vs/workbench/parts/preferences/browser/preferencesService.ts +++ b/src/vs/workbench/parts/preferences/browser/preferencesService.ts @@ -267,15 +267,15 @@ export class PreferencesService extends Disposable implements IPreferencesServic return null; } - 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/searchActions.ts b/src/vs/workbench/parts/search/browser/searchActions.ts index 346ecc21b54e94..469aa7a8d32e85 100644 --- a/src/vs/workbench/parts/search/browser/searchActions.ts +++ b/src/vs/workbench/parts/search/browser/searchActions.ts @@ -535,6 +535,6 @@ export class ConfigureGlobalExclusionsAction extends Action { } public run(): TPromise { - return this.preferencesService.openGlobalSettings().then(null, errors.onUnexpectedError); + return this.preferencesService.openGlobalSettings().then(() => { /*drop resolved value*/ }, errors.onUnexpectedError); } } 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 d8f457f5577fae..fbb222df97c660 100644 --- a/src/vs/workbench/parts/welcome/page/electron-browser/welcomePage.ts +++ b/src/vs/workbench/parts/welcome/page/electron-browser/welcomePage.ts @@ -414,7 +414,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 ba58a32aee094c..ed95ccb7e0c572 100644 --- a/src/vs/workbench/services/configuration/node/configurationEditingService.ts +++ b/src/vs/workbench/services/configuration/node/configurationEditingService.ts @@ -152,10 +152,10 @@ export class ConfigurationEditingService implements IConfigurationEditingService this.commandService.executeCommand(ConfigurationTarget.USER === target ? 'workbench.action.openGlobalSettings' : 'workbench.action.openWorkspaceSettings'); } - private wrapError(code: ConfigurationEditingErrorCode, target: ConfigurationTarget): TPromise { + private wrapError(code: ConfigurationEditingErrorCode, target: ConfigurationTarget): TPromise { const message = this.toErrorMessage(code, target); - return TPromise.wrapError(new ConfigurationEditingError(message, code)); + return TPromise.wrapError(new ConfigurationEditingError(message, code)); } private toErrorMessage(error: ConfigurationEditingErrorCode, target: ConfigurationTarget): string { @@ -246,12 +246,12 @@ export class ConfigurationEditingService implements IConfigurationEditingService const model = reference.object.textEditorModel; if (this.hasParseErrors(model, operation)) { - return this.wrapError(ConfigurationEditingErrorCode.ERROR_INVALID_CONFIGURATION, target); + return this.wrapError(ConfigurationEditingErrorCode.ERROR_INVALID_CONFIGURATION, target); } // 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); + return this.wrapError(ConfigurationEditingErrorCode.ERROR_CONFIGURATION_FILE_DIRTY, target); } return reference; }); diff --git a/src/vs/workbench/services/textfile/common/textFileService.ts b/src/vs/workbench/services/textfile/common/textFileService.ts index 44de8fc65728a4..20c047878aaebb 100644 --- a/src/vs/workbench/services/textfile/common/textFileService.ts +++ b/src/vs/workbench/services/textfile/common/textFileService.ts @@ -556,7 +556,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 9db6ae108477d6..41d675651ba9df 100644 --- a/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.ts +++ b/src/vs/workbench/services/themes/electron-browser/workbenchThemeService.ts @@ -336,7 +336,7 @@ export class WorkbenchThemeService implements IWorkbenchThemeService { }); } - private initialize(): TPromise { + private initialize(): TPromise<[IColorTheme, IFileIconTheme]> { this.updateColorCustomizations(false); From 831332157532b52190ab57399e21ec47d6cc545f Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Thu, 17 Aug 2017 19:10:56 -0700 Subject: [PATCH 3/3] Fix remaining errors. --- src/vs/base/common/errors.ts | 8 ++++---- src/vs/code/electron-browser/sharedProcessMain.ts | 2 +- .../contrib/goToDeclaration/browser/goToDeclaration.ts | 5 ++--- .../goToDeclaration/browser/goToDeclarationCommands.ts | 1 - src/vs/editor/contrib/hover/browser/hoverOperation.ts | 2 +- .../contrib/wordHighlighter/common/wordHighlighter.ts | 1 + .../node/extensionManagementService.ts | 2 +- .../api/electron-browser/mainThreadTreeViews.ts | 10 ++++++++-- src/vs/workbench/api/node/extHostTextEditor.ts | 6 +++--- src/vs/workbench/browser/parts/editor/editorPart.ts | 10 ++++++++-- .../browser/parts/quickopen/quickOpenController.ts | 1 + .../extensions/node/extensionsWorkbenchService.ts | 2 +- src/vs/workbench/parts/files/browser/fileActions.ts | 5 ++++- .../parts/files/browser/views/explorerView.ts | 2 +- .../parts/search/browser/openAnythingHandler.ts | 1 + .../parts/tasks/node/processRunnerDetector.ts | 6 +++--- .../extensions/electron-browser/extensionService.ts | 2 +- 17 files changed, 41 insertions(+), 25 deletions(-) diff --git a/src/vs/base/common/errors.ts b/src/vs/base/common/errors.ts index 33adc88801f6ff..a00d5ebd2ad8b2 100644 --- a/src/vs/base/common/errors.ts +++ b/src/vs/base/common/errors.ts @@ -132,20 +132,20 @@ 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 { diff --git a/src/vs/code/electron-browser/sharedProcessMain.ts b/src/vs/code/electron-browser/sharedProcessMain.ts index 646098f8b6fb9b..ef7a31319cf898 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 182404712f76ca..a006d5eb1dad77 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 0115099afdc792..17e7a051baa437 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 59ea0eff077b07..71c151f9fa122e 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/wordHighlighter/common/wordHighlighter.ts b/src/vs/editor/contrib/wordHighlighter/common/wordHighlighter.ts index 52b6d50d1511c2..289dde559d221f 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/platform/extensionManagement/node/extensionManagementService.ts b/src/vs/platform/extensionManagement/node/extensionManagementService.ts index fddda86246271a..19142629db98a4 100644 --- a/src/vs/platform/extensionManagement/node/extensionManagementService.ts +++ b/src/vs/platform/extensionManagement/node/extensionManagementService.ts @@ -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/mainThreadTreeViews.ts b/src/vs/workbench/api/electron-browser/mainThreadTreeViews.ts index 52b1ba27df4df7..ed31354268d2a7 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 c990fba30bd92f..763969acc9696e 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 6c625a26b618bb..abf883ccba4d04 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 2670b54ac62539..084c5d086f342b 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/extensions/node/extensionsWorkbenchService.ts b/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts index 15cca4f051763f..ebf757b8920dde 100644 --- a/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts +++ b/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts @@ -827,7 +827,7 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService { nls.localize('cancel', "Cancel") ]; return this.choiceService.choose(Severity.Info, message, options, 2, false) - .then(value => { + .then(value => { if (value === 0) { const promises: TPromise[] = []; if (this.local.every(local => local.id !== extension.id)) { diff --git a/src/vs/workbench/parts/files/browser/fileActions.ts b/src/vs/workbench/parts/files/browser/fileActions.ts index 5b431213cf5349..8b59df219c2e72 100644 --- a/src/vs/workbench/parts/files/browser/fileActions.ts +++ b/src/vs/workbench/parts/files/browser/fileActions.ts @@ -1326,7 +1326,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/views/explorerView.ts b/src/vs/workbench/parts/files/browser/views/explorerView.ts index d28ad5904f17c2..679a6fae06e239 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/search/browser/openAnythingHandler.ts b/src/vs/workbench/parts/search/browser/openAnythingHandler.ts index 8c79b5fa0ead1e..3eae07844b7cc2 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 ed09f3635baf3b..eb29e67c02351b 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/services/extensions/electron-browser/extensionService.ts b/src/vs/workbench/services/extensions/electron-browser/extensionService.ts index da1a86518b9a7e..9849eda383a125 100644 --- a/src/vs/workbench/services/extensions/electron-browser/extensionService.ts +++ b/src/vs/workbench/services/extensions/electron-browser/extensionService.ts @@ -255,7 +255,7 @@ export class ExtensionService implements IExtensionService { }); return Object.keys(result).map(name => result[name]); - }).then(null, err => { + }).then(null, err => { log.error('', err); return []; });