Skip to content

Commit 9aebfa2

Browse files
committed
Use ES6 promises
1 parent be4e849 commit 9aebfa2

6 files changed

Lines changed: 101 additions & 107 deletions

File tree

src/vs/base/test/common/utils.ts

Lines changed: 12 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,39 +5,13 @@
55

66
import * as paths from 'vs/base/common/paths';
77
import { URI } from 'vs/base/common/uri';
8-
import { TPromise, TValueCallback } from 'vs/base/common/winjs.base';
98
import { canceled } from 'vs/base/common/errors';
109

11-
export class DeferredTPromise<T> extends TPromise<T> {
12-
13-
private completeCallback: TValueCallback<T>;
14-
private errorCallback: (err: any) => void;
15-
16-
constructor() {
17-
let captured: any;
18-
super((c, e) => {
19-
captured = { c, e };
20-
});
21-
this.completeCallback = captured.c;
22-
this.errorCallback = captured.e;
23-
}
24-
25-
public complete(value: T) {
26-
this.completeCallback(value);
27-
}
28-
29-
public error(err: any) {
30-
this.errorCallback(err);
31-
}
32-
33-
public cancel() {
34-
this.errorCallback(canceled());
35-
}
36-
}
10+
export type ValueCallback<T = any> = (value: T | Thenable<T>) => void;
3711

3812
export class DeferredPromise<T> {
3913

40-
private completeCallback: TValueCallback<T>;
14+
private completeCallback: ValueCallback<T>;
4115
private errorCallback: (err: any) => void;
4216

4317
public p: Promise<any>;
@@ -50,14 +24,20 @@ export class DeferredPromise<T> {
5024
}
5125

5226
public complete(value: T) {
53-
process.nextTick(() => {
54-
this.completeCallback(value);
27+
return new Promise(resolve => {
28+
process.nextTick(() => {
29+
this.completeCallback(value);
30+
resolve();
31+
});
5532
});
5633
}
5734

5835
public error(err: any) {
59-
process.nextTick(() => {
60-
this.errorCallback(err);
36+
return new Promise(resolve => {
37+
process.nextTick(() => {
38+
this.errorCallback(err);
39+
resolve();
40+
});
6141
});
6242
}
6343

src/vs/platform/quickinput/common/quickInput.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
7-
import { TPromise } from 'vs/base/common/winjs.base';
87
import { CancellationToken } from 'vs/base/common/cancellation';
98
import { ResolvedKeybinding } from 'vs/base/common/keyCodes';
109
import { URI } from 'vs/base/common/uri';
@@ -76,7 +75,7 @@ export interface IPickOptions<T extends IQuickPickItem> {
7675
/**
7776
* an optional property for the item to focus initially.
7877
*/
79-
activeItem?: TPromise<T> | T;
78+
activeItem?: Promise<T> | T;
8079

8180
onKeyMods?: (keyMods: IKeyMods) => void;
8281
onDidFocus?: (entry: T) => void;
@@ -231,14 +230,14 @@ export interface IQuickInputService {
231230
/**
232231
* Opens the quick input box for selecting items and returns a promise with the user selected item(s) if any.
233232
*/
234-
pick<T extends IQuickPickItem>(picks: TPromise<QuickPickInput<T>[]> | QuickPickInput<T>[], options?: IPickOptions<T> & { canPickMany: true }, token?: CancellationToken): TPromise<T[]>;
235-
pick<T extends IQuickPickItem>(picks: TPromise<QuickPickInput<T>[]> | QuickPickInput<T>[], options?: IPickOptions<T> & { canPickMany: false }, token?: CancellationToken): TPromise<T>;
236-
pick<T extends IQuickPickItem>(picks: TPromise<QuickPickInput<T>[]> | QuickPickInput<T>[], options?: Omit<IPickOptions<T>, 'canPickMany'>, token?: CancellationToken): TPromise<T>;
233+
pick<T extends IQuickPickItem>(picks: Thenable<QuickPickInput<T>[]> | QuickPickInput<T>[], options?: IPickOptions<T> & { canPickMany: true }, token?: CancellationToken): Promise<T[]>;
234+
pick<T extends IQuickPickItem>(picks: Thenable<QuickPickInput<T>[]> | QuickPickInput<T>[], options?: IPickOptions<T> & { canPickMany: false }, token?: CancellationToken): Promise<T>;
235+
pick<T extends IQuickPickItem>(picks: Thenable<QuickPickInput<T>[]> | QuickPickInput<T>[], options?: Omit<IPickOptions<T>, 'canPickMany'>, token?: CancellationToken): Promise<T>;
237236

238237
/**
239238
* Opens the quick input box for text input and returns a promise with the user typed value if any.
240239
*/
241-
input(options?: IInputOptions, token?: CancellationToken): TPromise<string>;
240+
input(options?: IInputOptions, token?: CancellationToken): Promise<string>;
242241

243242
backButton: IQuickInputButton;
244243

@@ -251,9 +250,9 @@ export interface IQuickInputService {
251250

252251
navigate(next: boolean, quickNavigate?: IQuickNavigateConfiguration): void;
253252

254-
accept(): TPromise<void>;
253+
accept(): Promise<void>;
255254

256-
back(): TPromise<void>;
255+
back(): Promise<void>;
257256

258-
cancel(): TPromise<void>;
257+
cancel(): Promise<void>;
259258
}

src/vs/workbench/browser/parts/quickinput/quickInput.ts

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import { IThemeService } from 'vs/platform/theme/common/themeService';
1313
import { contrastBorder, widgetShadow } from 'vs/platform/theme/common/colorRegistry';
1414
import { SIDE_BAR_BACKGROUND, SIDE_BAR_FOREGROUND } from 'vs/workbench/common/theme';
1515
import { IQuickOpenService } from 'vs/platform/quickOpen/common/quickOpen';
16-
import { TPromise } from 'vs/base/common/winjs.base';
1716
import { CancellationToken } from 'vs/base/common/cancellation';
1817
import { QuickInputList } from './quickInputList';
1918
import { QuickInputBox } from './quickInputBox';
@@ -1041,8 +1040,8 @@ export class QuickInputService extends Component implements IQuickInputService {
10411040
this.updateStyles();
10421041
}
10431042

1044-
pick<T extends IQuickPickItem, O extends IPickOptions<T>>(picks: TPromise<QuickPickInput<T>[]> | QuickPickInput<T>[], options: O = <O>{}, token: CancellationToken = CancellationToken.None): TPromise<O extends { canPickMany: true } ? T[] : T> {
1045-
return new TPromise<O extends { canPickMany: true } ? T[] : T>((doResolve, reject) => {
1043+
pick<T extends IQuickPickItem, O extends IPickOptions<T>>(picks: Promise<QuickPickInput<T>[]> | QuickPickInput<T>[], options: O = <O>{}, token: CancellationToken = CancellationToken.None): Promise<O extends { canPickMany: true } ? T[] : T> {
1044+
return new Promise<O extends { canPickMany: true } ? T[] : T>((doResolve, reject) => {
10461045
let resolve = (result: any) => {
10471046
resolve = doResolve;
10481047
if (options.onKeyMods) {
@@ -1117,7 +1116,7 @@ export class QuickInputService extends Component implements IQuickInputService {
11171116
input.quickNavigate = options.quickNavigate;
11181117
input.contextKey = options.contextKey;
11191118
input.busy = true;
1120-
TPromise.join([picks, options.activeItem])
1119+
Promise.all([picks, options.activeItem])
11211120
.then(([items, _activeItem]) => {
11221121
activeItem = _activeItem;
11231122
input.busy = false;
@@ -1130,29 +1129,29 @@ export class QuickInputService extends Component implements IQuickInputService {
11301129
}
11311130
});
11321131
input.show();
1133-
TPromise.wrap(picks).then(null, err => {
1132+
Promise.resolve(picks).then(null, err => {
11341133
reject(err);
11351134
input.hide();
11361135
});
11371136
});
11381137
}
11391138

1140-
input(options: IInputOptions = {}, token: CancellationToken = CancellationToken.None): TPromise<string> {
1141-
return new TPromise<string>((resolve, reject) => {
1139+
input(options: IInputOptions = {}, token: CancellationToken = CancellationToken.None): Promise<string> {
1140+
return new Promise<string>((resolve, reject) => {
11421141
if (token.isCancellationRequested) {
11431142
resolve(undefined);
11441143
return;
11451144
}
11461145
const input = this.createInputBox();
1147-
const validateInput = options.validateInput || (() => TPromise.as(undefined));
1146+
const validateInput = options.validateInput || (() => <Thenable<undefined>>Promise.resolve(undefined));
11481147
const onDidValueChange = debounceEvent(input.onDidChangeValue, (last, cur) => cur, 100);
11491148
let validationValue = options.value || '';
1150-
let validation = TPromise.wrap(validateInput(validationValue));
1149+
let validation = Promise.resolve(validateInput(validationValue));
11511150
const disposables = [
11521151
input,
11531152
onDidValueChange(value => {
11541153
if (value !== validationValue) {
1155-
validation = TPromise.wrap(validateInput(value));
1154+
validation = Promise.resolve(validateInput(value));
11561155
validationValue = value;
11571156
}
11581157
validation.then(result => {
@@ -1164,7 +1163,7 @@ export class QuickInputService extends Component implements IQuickInputService {
11641163
input.onDidAccept(() => {
11651164
const value = input.value;
11661165
if (value !== validationValue) {
1167-
validation = TPromise.wrap(validateInput(value));
1166+
validation = Promise.resolve(validateInput(value));
11681167
validationValue = value;
11691168
}
11701169
validation.then(result => {
@@ -1335,17 +1334,17 @@ export class QuickInputService extends Component implements IQuickInputService {
13351334

13361335
accept() {
13371336
this.onDidAcceptEmitter.fire();
1338-
return TPromise.as(undefined);
1337+
return Promise.resolve(undefined);
13391338
}
13401339

13411340
back() {
13421341
this.onDidTriggerButtonEmitter.fire(this.backButton);
1343-
return TPromise.as(undefined);
1342+
return Promise.resolve(undefined);
13441343
}
13451344

13461345
cancel() {
13471346
this.hide();
1348-
return TPromise.as(undefined);
1347+
return Promise.resolve(undefined);
13491348
}
13501349

13511350
layout(dimension: dom.Dimension): void {
@@ -1411,8 +1410,8 @@ export class BackAction extends Action {
14111410
super(id, label);
14121411
}
14131412

1414-
public run(): TPromise<any> {
1413+
public run(): Promise<any> {
14151414
this.quickInputService.back();
1416-
return TPromise.as(null);
1415+
return Promise.resolve(null);
14171416
}
14181417
}

src/vs/workbench/browser/parts/quickopen/quickOpenController.ts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import 'vs/css!./media/quickopen';
7-
import { TPromise, ValueCallback } from 'vs/base/common/winjs.base';
87
import * as nls from 'vs/nls';
98
import * as browser from 'vs/base/browser/browser';
109
import * as strings from 'vs/base/common/strings';
@@ -54,6 +53,8 @@ import { IStorageService } from 'vs/platform/storage/common/storage';
5453

5554
const HELP_PREFIX = '?';
5655

56+
type ValueCallback<T = any> = (value: T | Thenable<T>) => void;
57+
5758
export class QuickOpenController extends Component implements IQuickOpenService {
5859

5960
private static readonly MAX_SHORT_RESPONSE_TIME = 500;
@@ -73,7 +74,7 @@ export class QuickOpenController extends Component implements IQuickOpenService
7374
private lastSubmittedInputValue: string;
7475
private quickOpenWidget: QuickOpenWidget;
7576
private dimension: Dimension;
76-
private mapResolvedHandlersToPrefix: { [prefix: string]: TPromise<QuickOpenHandler>; } = Object.create(null);
77+
private mapResolvedHandlersToPrefix: { [prefix: string]: Promise<QuickOpenHandler>; } = Object.create(null);
7778
private mapContextKeyToContext: { [id: string]: IContextKey<boolean>; } = Object.create(null);
7879
private handlerOnOpenCalled: { [prefix: string]: boolean; } = Object.create(null);
7980
private promisesToCompleteOnHide: ValueCallback[] = [];
@@ -153,12 +154,12 @@ export class QuickOpenController extends Component implements IQuickOpenService
153154
}
154155
}
155156

156-
show(prefix?: string, options?: IShowOptions): TPromise<void> {
157+
show(prefix?: string, options?: IShowOptions): Promise<void> {
157158
let quickNavigateConfiguration = options ? options.quickNavigateConfiguration : void 0;
158159
let inputSelection = options ? options.inputSelection : void 0;
159160
let autoFocus = options ? options.autoFocus : void 0;
160161

161-
const promiseCompletedOnHide = new TPromise<void>(c => {
162+
const promiseCompletedOnHide = new Promise<void>(c => {
162163
this.promisesToCompleteOnHide.push(c);
163164
});
164165

@@ -381,7 +382,7 @@ export class QuickOpenController extends Component implements IQuickOpenService
381382
return;
382383
}
383384

384-
let resultPromise: TPromise<void>;
385+
let resultPromise: Promise<void>;
385386
let resultPromiseDone = false;
386387

387388
if (handlerDescriptor) {
@@ -426,7 +427,7 @@ export class QuickOpenController extends Component implements IQuickOpenService
426427
});
427428
}
428429

429-
private handleDefaultHandler(handler: QuickOpenHandlerDescriptor, value: string, token: CancellationToken): TPromise<void> {
430+
private handleDefaultHandler(handler: QuickOpenHandlerDescriptor, value: string, token: CancellationToken): Promise<void> {
430431

431432
// Fill in history results if matching and we are configured to search in history
432433
let matchingHistoryEntries: QuickOpenEntry[];
@@ -514,7 +515,7 @@ export class QuickOpenController extends Component implements IQuickOpenService
514515
}
515516
}
516517

517-
private handleSpecificHandler(handlerDescriptor: QuickOpenHandlerDescriptor, value: string, token: CancellationToken): TPromise<void> {
518+
private handleSpecificHandler(handlerDescriptor: QuickOpenHandlerDescriptor, value: string, token: CancellationToken): Promise<void> {
518519
return this.resolveHandler(handlerDescriptor).then((resolvedHandler: QuickOpenHandler) => {
519520

520521
// Remove handler prefix from search value
@@ -585,7 +586,7 @@ export class QuickOpenController extends Component implements IQuickOpenService
585586
return mapEntryToPath;
586587
}
587588

588-
private resolveHandler(handler: QuickOpenHandlerDescriptor): TPromise<QuickOpenHandler> {
589+
private resolveHandler(handler: QuickOpenHandlerDescriptor): Promise<QuickOpenHandler> {
589590
let result = this._resolveHandler(handler);
590591

591592
const id = handler.getId();
@@ -603,11 +604,11 @@ export class QuickOpenController extends Component implements IQuickOpenService
603604
return result.then<QuickOpenHandler>(null, (error) => {
604605
delete this.mapResolvedHandlersToPrefix[id];
605606

606-
return TPromise.wrapError(new Error(`Unable to instantiate quick open handler ${handler.getId()}: ${JSON.stringify(error)}`));
607+
return Promise.reject(new Error(`Unable to instantiate quick open handler ${handler.getId()}: ${JSON.stringify(error)}`));
607608
});
608609
}
609610

610-
private _resolveHandler(handler: QuickOpenHandlerDescriptor): TPromise<QuickOpenHandler> {
611+
private _resolveHandler(handler: QuickOpenHandlerDescriptor): Promise<QuickOpenHandler> {
611612
const id = handler.getId();
612613

613614
// Return Cached
@@ -835,7 +836,7 @@ export class RemoveFromEditorHistoryAction extends Action {
835836
super(id, label);
836837
}
837838

838-
run(): TPromise<any> {
839+
run(): Thenable<any> {
839840
interface IHistoryPickEntry extends IQuickPickItem {
840841
input: IEditorInput | IResourceInput;
841842
}

0 commit comments

Comments
 (0)