From 6dcfa8fbfed9c1ff80bd0024e71f766f1f5f6070 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Tue, 19 Jun 2018 16:13:14 +0200 Subject: [PATCH] add proposed onWillRenameFile event, #43768 --- src/vs/vscode.proposed.d.ts | 7 +++++++ src/vs/workbench/api/node/extHost.api.impl.ts | 3 +++ .../api/node/extHostFileSystemEventService.ts | 20 ++++++++++++++++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/vs/vscode.proposed.d.ts b/src/vs/vscode.proposed.d.ts index 6e4e551b5d9..13c728dda87 100644 --- a/src/vs/vscode.proposed.d.ts +++ b/src/vs/vscode.proposed.d.ts @@ -634,7 +634,14 @@ declare module 'vscode' { readonly newUri: Uri; } + export interface FileWillRenameEvent { + readonly oldUri: Uri; + readonly newUri: Uri; + waitUntil(thenable: Thenable): void; + } + export namespace workspace { + export const onWillRenameFile: Event; export const onDidRenameFile: Event; } //#endregion diff --git a/src/vs/workbench/api/node/extHost.api.impl.ts b/src/vs/workbench/api/node/extHost.api.impl.ts index 59476e88872..8002c970830 100644 --- a/src/vs/workbench/api/node/extHost.api.impl.ts +++ b/src/vs/workbench/api/node/extHost.api.impl.ts @@ -578,6 +578,9 @@ export function createApiFactory( }), onDidRenameFile: proposedApiFunction(extension, (listener, thisArg?, disposables?) => { return extHostFileSystemEvent.onDidRenameFile(listener, thisArg, disposables); + }), + onWillRenameFile: proposedApiFunction(extension, (listener, thisArg?, disposables?) => { + return extHostFileSystemEvent.onWillRenameFile(listener, thisArg, disposables); }) }; diff --git a/src/vs/workbench/api/node/extHostFileSystemEventService.ts b/src/vs/workbench/api/node/extHostFileSystemEventService.ts index 5fd040d24a6..476a96a3c00 100644 --- a/src/vs/workbench/api/node/extHostFileSystemEventService.ts +++ b/src/vs/workbench/api/node/extHostFileSystemEventService.ts @@ -98,8 +98,10 @@ export class ExtHostFileSystemEventService implements ExtHostFileSystemEventServ private _onFileEvent = new Emitter(); private _onDidRenameFile = new Emitter(); + private _onWillRenameFile = new Emitter(); readonly onDidRenameFile: Event = this._onDidRenameFile.event; + readonly onWillRenameFile: Event = this._onWillRenameFile.event; constructor() { } @@ -117,6 +119,22 @@ export class ExtHostFileSystemEventService implements ExtHostFileSystemEventServ } $onWillRename(oldUri: UriComponents, newUri: UriComponents): TPromise { - return undefined; + + let thenables: Thenable[] = []; + + this._onWillRenameFile.fire({ + oldUri: URI.revive(oldUri), + newUri: URI.revive(newUri), + waitUntil(thenable: Thenable): void { + if (Object.isFrozen(thenables)) { + throw new Error('waitUntil cannot be called async'); + } + thenables.push(thenable.then(undefined, err => console.error(err))); + } + }); + + Object.freeze(thenables); + + return TPromise.join(thenables); } }