diff --git a/src/vs/base/common/actions.ts b/src/vs/base/common/actions.ts index a6d78296e69..d2cca21d5ed 100644 --- a/src/vs/base/common/actions.ts +++ b/src/vs/base/common/actions.ts @@ -7,6 +7,7 @@ import { TPromise } from 'vs/base/common/winjs.base'; import { IDisposable, combinedDisposable } from 'vs/base/common/lifecycle'; import { Event, Emitter } from 'vs/base/common/event'; +import { isThenable } from 'vs/base/common/async'; export interface ITelemetryData { from?: string; @@ -225,7 +226,7 @@ export class ActionRunner implements IActionRunner { protected runAction(action: IAction, context?: any): TPromise { const res = context ? action.run(context) : action.run(); - if (TPromise.is(res)) { + if (isThenable(res)) { return res; } diff --git a/src/vs/base/common/async.ts b/src/vs/base/common/async.ts index 9b4a65a1bcb..f1a9a5c4919 100644 --- a/src/vs/base/common/async.ts +++ b/src/vs/base/common/async.ts @@ -408,8 +408,12 @@ export function timeout(n: number): CancelablePromise { }); } -function isWinJSPromise(candidate: any): candidate is TPromise { - return TPromise.is(candidate) && typeof (candidate).done === 'function'; +/** + * + * @returns `true` if candidate is a `WinJS.Promise` + */ +export function isWinJSPromise(candidate: any): candidate is TPromise { + return isThenable(candidate) && typeof (candidate).done === 'function'; } /** diff --git a/src/vs/base/common/glob.ts b/src/vs/base/common/glob.ts index 93365a9fb6a..6ec8e429211 100644 --- a/src/vs/base/common/glob.ts +++ b/src/vs/base/common/glob.ts @@ -10,6 +10,7 @@ import * as paths from 'vs/base/common/paths'; import { LRUCache } from 'vs/base/common/map'; import { CharCode } from 'vs/base/common/charCode'; import { TPromise } from 'vs/base/common/winjs.base'; +import { isThenable } from 'vs/base/common/async'; export interface IExpression { [pattern: string]: boolean | SiblingClause | any; @@ -646,7 +647,7 @@ function parseExpressionPattern(pattern: string, value: any, options: IGlobOptio const clausePattern = when.replace('$(basename)', name); const matched = hasSibling(clausePattern); - return TPromise.is(matched) ? + return isThenable(matched) ? matched.then(m => m ? pattern : null) : matched ? pattern : null; }; @@ -699,4 +700,4 @@ function aggregateBasenameMatches(parsedPatterns: (ParsedStringPattern | ParsedE const aggregatedPatterns = parsedPatterns.filter(parsedPattern => !(parsedPattern).basenames); aggregatedPatterns.push(aggregate); return aggregatedPatterns; -} \ No newline at end of file +} diff --git a/src/vs/base/common/winjs.base.d.ts b/src/vs/base/common/winjs.base.d.ts index c568d4d7b05..7cf7a842c11 100644 --- a/src/vs/base/common/winjs.base.d.ts +++ b/src/vs/base/common/winjs.base.d.ts @@ -29,8 +29,6 @@ export class Promise { public static as>(value: SomePromise): SomePromise; public static as(value: T): Promise; - public static is(value: any): value is PromiseLike; - public static timeout(delay: number): Promise; public static join(promises: [T1 | PromiseLike, T2 | PromiseLike]): Promise<[T1, T2]>; diff --git a/src/vs/base/common/winjs.polyfill.promise.ts b/src/vs/base/common/winjs.polyfill.promise.ts index 6ebd06ea511..e1e094d6521 100644 --- a/src/vs/base/common/winjs.polyfill.promise.ts +++ b/src/vs/base/common/winjs.polyfill.promise.ts @@ -5,6 +5,7 @@ import { Promise as WinJSPromise } from './winjs.base'; import * as platform from 'vs/base/common/platform'; +import { isWinJSPromise } from 'vs/base/common/async'; /** * A polyfill for the native promises. The implementation is based on @@ -45,7 +46,7 @@ export class PolyfillPromise implements Promise { constructor(callback: (resolve: (value?: T) => void, reject: (err?: any) => void) => any); constructor(initOrPromise: WinJSPromise | ((resolve: (value?: T) => void, reject: (err?: any) => void) => any)) { - if (WinJSPromise.is(initOrPromise)) { + if (isWinJSPromise(initOrPromise)) { this._winjsPromise = initOrPromise; } else { this._winjsPromise = new WinJSPromise((resolve, reject) => { diff --git a/src/vs/editor/common/services/modelServiceImpl.ts b/src/vs/editor/common/services/modelServiceImpl.ts index 560ed428507..1a1202dde3c 100644 --- a/src/vs/editor/common/services/modelServiceImpl.ts +++ b/src/vs/editor/common/services/modelServiceImpl.ts @@ -28,6 +28,7 @@ import { overviewRulerWarning, overviewRulerError, overviewRulerInfo } from 'vs/ import { ITextModel, IModelDeltaDecoration, IModelDecorationOptions, TrackedRangeStickiness, OverviewRulerLane, DefaultEndOfLine, ITextModelCreationOptions, EndOfLineSequence, IIdentifiedSingleEditOperation, ITextBufferFactory, ITextBuffer, EndOfLinePreference } from 'vs/editor/common/model'; import { isFalsyOrEmpty } from 'vs/base/common/arrays'; import { basename } from 'vs/base/common/paths'; +import { isThenable } from 'vs/base/common/async'; function MODEL_ID(resource: URI): string { return resource.toString(); @@ -500,7 +501,7 @@ export class ModelServiceImpl implements IModelService { public createModel(value: string | ITextBufferFactory, modeOrPromise: TPromise | IMode, resource: URI, isForSimpleWidget: boolean = false): ITextModel { let modelData: ModelData; - if (!modeOrPromise || TPromise.is(modeOrPromise)) { + if (!modeOrPromise || isThenable(modeOrPromise)) { modelData = this._createModelData(value, PLAINTEXT_LANGUAGE_IDENTIFIER, resource, isForSimpleWidget); this.setMode(modelData.model, modeOrPromise); } else { @@ -521,7 +522,7 @@ export class ModelServiceImpl implements IModelService { if (!modeOrPromise) { return; } - if (TPromise.is(modeOrPromise)) { + if (isThenable(modeOrPromise)) { modeOrPromise.then((mode) => { if (!model.isDisposed()) { model.setMode(mode.getLanguageIdentifier()); diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index 0642820ecfc..96a56b9807e 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -72,8 +72,6 @@ declare namespace monaco { public static as>(value: SomePromise): SomePromise; public static as(value: T): Promise; - public static is(value: any): value is PromiseLike; - public static timeout(delay: number): Promise; public static join(promises: [T1 | PromiseLike, T2 | PromiseLike]): Promise<[T1, T2]>; diff --git a/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts b/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts index e35dd586dd8..5d64bc0a385 100644 --- a/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts +++ b/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts @@ -56,6 +56,7 @@ import { Dimension, addClass } from 'vs/base/browser/dom'; import { IEditorService, ACTIVE_GROUP, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService'; import { IEditorGroupsService } from 'vs/workbench/services/group/common/editorGroupsService'; import { IUriDisplayService } from 'vs/platform/uriDisplay/common/uriDisplay'; +import { isThenable } from 'vs/base/common/async'; const HELP_PREFIX = '?'; @@ -157,7 +158,7 @@ export class QuickOpenController extends Component implements IQuickOpenService let arrayPromise: TPromise; if (Array.isArray(arg1)) { arrayPromise = TPromise.as(arg1); - } else if (TPromise.is(arg1)) { + } else if (isThenable(arg1)) { arrayPromise = arg1; } else { throw new Error('illegal input'); diff --git a/src/vs/workbench/test/electron-browser/api/testRPCProtocol.ts b/src/vs/workbench/test/electron-browser/api/testRPCProtocol.ts index 4d9a092e6be..b62caa2691b 100644 --- a/src/vs/workbench/test/electron-browser/api/testRPCProtocol.ts +++ b/src/vs/workbench/test/electron-browser/api/testRPCProtocol.ts @@ -9,6 +9,7 @@ import { TPromise } from 'vs/base/common/winjs.base'; import { ProxyIdentifier } from 'vs/workbench/services/extensions/node/proxyIdentifier'; import { CharCode } from 'vs/base/common/charCode'; import { IExtHostContext } from 'vs/workbench/api/node/extHost.protocol'; +import { isThenable } from 'vs/base/common/async'; export function SingleProxyRPCProtocol(thing: any): IExtHostContext { return { @@ -106,7 +107,7 @@ export class TestRPCProtocol implements IExtHostContext { let p: Thenable; try { let result = (instance[path]).apply(instance, wireArgs); - p = TPromise.is(result) ? result : TPromise.as(result); + p = isThenable(result) ? result : TPromise.as(result); } catch (err) { p = TPromise.wrapError(err); }