debt - remove WinJS.Promise#is and replace usages with async#isThenable or async#isWinJSPromise

This commit is contained in:
Johannes Rieken 2018-08-10 10:51:06 +02:00
parent f6a6db18c4
commit d4a4d9588b
9 changed files with 20 additions and 14 deletions

View file

@ -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<any> {
const res = context ? action.run(context) : action.run();
if (TPromise.is(res)) {
if (isThenable(res)) {
return res;
}

View file

@ -408,8 +408,12 @@ export function timeout(n: number): CancelablePromise<void> {
});
}
function isWinJSPromise(candidate: any): candidate is TPromise {
return TPromise.is(candidate) && typeof (<TPromise>candidate).done === 'function';
/**
*
* @returns `true` if candidate is a `WinJS.Promise`
*/
export function isWinJSPromise(candidate: any): candidate is TPromise {
return isThenable(candidate) && typeof (<TPromise>candidate).done === 'function';
}
/**

View file

@ -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 => !(<ParsedStringPattern>parsedPattern).basenames);
aggregatedPatterns.push(aggregate);
return aggregatedPatterns;
}
}

View file

@ -29,8 +29,6 @@ export class Promise<T = any> {
public static as<T, SomePromise extends PromiseLike<T>>(value: SomePromise): SomePromise;
public static as<T>(value: T): Promise<T>;
public static is(value: any): value is PromiseLike<any>;
public static timeout(delay: number): Promise<void>;
public static join<T1, T2>(promises: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>]): Promise<[T1, T2]>;

View file

@ -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<T = any> implements Promise<T> {
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) => {

View file

@ -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> | 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());

2
src/vs/monaco.d.ts vendored
View file

@ -72,8 +72,6 @@ declare namespace monaco {
public static as<T, SomePromise extends PromiseLike<T>>(value: SomePromise): SomePromise;
public static as<T>(value: T): Promise<T>;
public static is(value: any): value is PromiseLike<any>;
public static timeout(delay: number): Promise<void>;
public static join<T1, T2>(promises: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>]): Promise<[T1, T2]>;

View file

@ -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<string[] | IPickOpenEntry[]>;
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');

View file

@ -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<any>;
try {
let result = (<Function>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);
}