Skip to content

Commit 94a4693

Browse files
committed
add BulkEditPreviewHandler
1 parent 80387ea commit 94a4693

3 files changed

Lines changed: 27 additions & 4 deletions

File tree

src/vs/editor/browser/services/bulkEditService.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ import { ICodeEditor } from 'vs/editor/browser/editorBrowser';
77
import { WorkspaceEdit } from 'vs/editor/common/modes';
88
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
99
import { IProgress, IProgressStep } from 'vs/platform/progress/common/progress';
10+
import { IDisposable } from 'vs/base/common/lifecycle';
1011

1112
export const IBulkEditService = createDecorator<IBulkEditService>('IWorkspaceEditService');
1213

13-
1414
export interface IBulkEditOptions {
1515
editor?: ICodeEditor;
1616
progress?: IProgress<IProgressStep>;
@@ -20,9 +20,13 @@ export interface IBulkEditResult {
2020
ariaSummary: string;
2121
}
2222

23+
export type IBulkEditPreviewHandler = (edit: WorkspaceEdit, options?: IBulkEditOptions) => Promise<WorkspaceEdit>;
24+
2325
export interface IBulkEditService {
2426
_serviceBrand: undefined;
2527

28+
setPreviewHandler(handler: IBulkEditPreviewHandler): IDisposable;
29+
2630
apply(edit: WorkspaceEdit, options?: IBulkEditOptions): Promise<IBulkEditResult>;
2731
}
2832

src/vs/editor/standalone/browser/simpleServices.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -631,6 +631,10 @@ export class SimpleBulkEditService implements IBulkEditService {
631631
//
632632
}
633633

634+
setPreviewHandler(): IDisposable {
635+
return Disposable.None;
636+
}
637+
634638
apply(workspaceEdit: WorkspaceEdit, options?: IBulkEditOptions): Promise<IBulkEditResult> {
635639

636640
let edits = new Map<ITextModel, TextEdit[]>();

src/vs/workbench/services/bulkEdit/browser/bulkEditService.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { mergeSort } from 'vs/base/common/arrays';
7-
import { dispose, IDisposable, IReference } from 'vs/base/common/lifecycle';
7+
import { dispose, IDisposable, IReference, toDisposable } from 'vs/base/common/lifecycle';
88
import { URI } from 'vs/base/common/uri';
99
import { ICodeEditor, isCodeEditor } from 'vs/editor/browser/editorBrowser';
10-
import { IBulkEditOptions, IBulkEditResult, IBulkEditService } from 'vs/editor/browser/services/bulkEditService';
10+
import { IBulkEditOptions, IBulkEditResult, IBulkEditService, IBulkEditPreviewHandler } from 'vs/editor/browser/services/bulkEditService';
1111
import { EditOperation } from 'vs/editor/common/core/editOperation';
1212
import { Range } from 'vs/editor/common/core/range';
1313
import { EndOfLineSequence, IIdentifiedSingleEditOperation, ITextModel } from 'vs/editor/common/model';
@@ -381,6 +381,8 @@ export class BulkEditService implements IBulkEditService {
381381

382382
_serviceBrand: undefined;
383383

384+
private _previewHandler?: IBulkEditPreviewHandler;
385+
384386
constructor(
385387
@ILogService private readonly _logService: ILogService,
386388
@IModelService private readonly _modelService: IModelService,
@@ -393,7 +395,20 @@ export class BulkEditService implements IBulkEditService {
393395
@IConfigurationService private readonly _configurationService: IConfigurationService
394396
) { }
395397

396-
apply(edit: WorkspaceEdit, options: IBulkEditOptions = {}): Promise<IBulkEditResult> {
398+
setPreviewHandler(handler: IBulkEditPreviewHandler): IDisposable {
399+
this._previewHandler = handler;
400+
return toDisposable(() => {
401+
if (this._previewHandler === handler) {
402+
this._previewHandler = undefined;
403+
}
404+
});
405+
}
406+
407+
async apply(edit: WorkspaceEdit, options: IBulkEditOptions = {}): Promise<IBulkEditResult> {
408+
409+
if (this._previewHandler) {
410+
edit = await this._previewHandler(edit, options);
411+
}
397412

398413
let { edits } = edit;
399414
let codeEditor = options.editor;

0 commit comments

Comments
 (0)