diff --git a/src/vs/base/common/event.ts b/src/vs/base/common/event.ts index 605eb2d2b4a..bd9d04eb781 100644 --- a/src/vs/base/common/event.ts +++ b/src/vs/base/common/event.ts @@ -600,14 +600,17 @@ export class Emitter { export interface IWaitUntil { + token: CancellationToken; waitUntil(thenable: Promise): void; } +export type IWaitUntilData = Omit, 'token'>; + export class AsyncEmitter extends Emitter { - private _asyncDeliveryQueue?: LinkedList<[Listener, Omit]>; + private _asyncDeliveryQueue?: LinkedList<[Listener, IWaitUntilData]>; - async fireAsync(data: Omit, token: CancellationToken, promiseJoin?: (p: Promise, listener: Function) => Promise): Promise { + async fireAsync(data: IWaitUntilData, token: CancellationToken, promiseJoin?: (p: Promise, listener: Function) => Promise): Promise { if (!this._listeners) { return; } @@ -627,6 +630,7 @@ export class AsyncEmitter extends Emitter { const event = { ...data, + token, waitUntil: (p: Promise): void => { if (Object.isFrozen(thenables)) { throw new Error('waitUntil can NOT be called asynchronous'); diff --git a/src/vs/workbench/api/common/extHostFileSystemEventService.ts b/src/vs/workbench/api/common/extHostFileSystemEventService.ts index 78ffb23b51f..6109683d1f2 100644 --- a/src/vs/workbench/api/common/extHostFileSystemEventService.ts +++ b/src/vs/workbench/api/common/extHostFileSystemEventService.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter, Event, AsyncEmitter, IWaitUntil } from 'vs/base/common/event'; +import { Emitter, Event, AsyncEmitter, IWaitUntil, IWaitUntilData } from 'vs/base/common/event'; import { IRelativePattern, parse } from 'vs/base/common/glob'; import { URI } from 'vs/base/common/uri'; import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors'; @@ -189,7 +189,7 @@ export class ExtHostFileSystemEventService implements ExtHostFileSystemEventServ return undefined; } - private async _fireWillEvent(emitter: AsyncEmitter, data: Omit, timeout: number, token: CancellationToken): Promise { + private async _fireWillEvent(emitter: AsyncEmitter, data: IWaitUntilData, timeout: number, token: CancellationToken): Promise { const extensionNames = new Set(); const edits: WorkspaceEdit[] = []; diff --git a/src/vscode-dts/vscode.d.ts b/src/vscode-dts/vscode.d.ts index afdb41a0505..431e536255e 100644 --- a/src/vscode-dts/vscode.d.ts +++ b/src/vscode-dts/vscode.d.ts @@ -10554,6 +10554,11 @@ declare module 'vscode' { */ export interface FileWillCreateEvent { + /** + * A cancellation token. + */ + readonly token: CancellationToken; + /** * The files that are going to be created. */ @@ -10609,6 +10614,11 @@ declare module 'vscode' { */ export interface FileWillDeleteEvent { + /** + * A cancellation token. + */ + readonly token: CancellationToken; + /** * The files that are going to be deleted. */ @@ -10664,6 +10674,11 @@ declare module 'vscode' { */ export interface FileWillRenameEvent { + /** + * A cancellation token. + */ + readonly token: CancellationToken; + /** * The files that are going to be renamed. */