Skip to content

Commit 3140b9c

Browse files
committed
1 parent 980d8ef commit 3140b9c

3 files changed

Lines changed: 62 additions & 30 deletions

File tree

src/vs/workbench/contrib/bulkEdit/browser/bulkEdit.contribution.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/co
2222
import { KeyMod, KeyCode } from 'vs/base/common/keyCodes';
2323
import { WorkbenchListFocusContextKey } from 'vs/platform/list/browser/listService';
2424
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
25+
import { URI } from 'vs/base/common/uri';
2526

2627
function getBulkEditPane(panelService: IPanelService): BulkEditPane | undefined {
2728
let view: ViewPane | undefined;
@@ -84,7 +85,15 @@ class BulkEditPreviewContribution {
8485
// (3) close preview editors
8586
for (let group of this._editorGroupsService.groups) {
8687
for (let input of group.editors) {
87-
if (input instanceof DiffEditorInput && input.modifiedInput.getResource()?.scheme === BulkEditPreviewProvider.Schema) {
88+
89+
let resource: URI | undefined;
90+
if (input instanceof DiffEditorInput) {
91+
resource = input.modifiedInput.getResource();
92+
} else {
93+
resource = input.getResource();
94+
}
95+
96+
if (resource?.scheme === BulkEditPreviewProvider.Schema) {
8897
group.closeEditor(input, { preserveFocus: true });
8998
}
9099
}

src/vs/workbench/contrib/bulkEdit/browser/bulkEditPane.ts

Lines changed: 46 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { diffInserted, diffRemoved } from 'vs/platform/theme/common/colorRegistr
1515
import { localize } from 'vs/nls';
1616
import { DisposableStore } from 'vs/base/common/lifecycle';
1717
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
18-
import { BulkEditPreviewProvider, BulkFileOperations } from 'vs/workbench/contrib/bulkEdit/browser/bulkEditPreview';
18+
import { BulkEditPreviewProvider, BulkFileOperations, BulkTextEdit, BulkFileOperationType } from 'vs/workbench/contrib/bulkEdit/browser/bulkEditPreview';
1919
import { ILabelService } from 'vs/platform/label/common/label';
2020
import { ITextModelService } from 'vs/editor/common/services/resolverService';
2121
import { URI } from 'vs/base/common/uri';
@@ -28,6 +28,7 @@ import { IViewletViewOptions } from 'vs/workbench/browser/parts/views/viewsViewl
2828
import { ResourceLabels, IResourceLabelsContainer } from 'vs/workbench/browser/labels';
2929
import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
3030
import Severity from 'vs/base/common/severity';
31+
import { basename } from 'vs/base/common/resources';
3132

3233
const enum State {
3334
Data = 'data',
@@ -107,9 +108,9 @@ export class BulkEditPane extends ViewPane {
107108
this._disposables.add(this._tree.onDidOpen(e => {
108109
const [first] = e.elements;
109110
if (first instanceof TextEditElement) {
110-
this._previewTextEditElement(first);
111+
this._openElementAsEditor(first.parent, first.edit);
111112
} else if (first instanceof FileElement) {
112-
this._previewFileElement();
113+
this._openElementAsEditor(first);
113114
}
114115
}));
115116

@@ -214,32 +215,54 @@ export class BulkEditPane extends ViewPane {
214215
this._sessionDisposables.clear();
215216
}
216217

217-
private async _previewTextEditElement(element: TextEditElement): Promise<void> {
218+
private async _openElementAsEditor(fileElement: FileElement, textElement?: BulkTextEdit): Promise<void> {
218219

219-
let leftResource: URI;
220-
try {
221-
(await this._textModelService.createModelReference(element.parent.uri)).dispose();
222-
leftResource = element.parent.uri;
223-
} catch {
224-
leftResource = BulkEditPreviewProvider.emptyPreview;
220+
if (!textElement) {
221+
textElement = fileElement.edit.textEdits[0];
225222
}
226223

227-
const previewUri = BulkEditPreviewProvider.asPreviewUri(element.parent.uri);
228-
229-
this._editorService.openEditor({
230-
leftResource,
231-
rightResource: previewUri,
232-
label: localize('edt.title', "{0} (Refactor Preview)", this._labelService.getUriLabel(element.parent.uri)),
233-
options: {
234-
selection: element.edit.edit.range,
235-
revealInCenterIfOutsideViewport: true,
236-
preserveFocus: true
224+
let leftResource: URI | undefined;
225+
if (fileElement.edit.type & BulkFileOperationType.TextEdit) {
226+
try {
227+
(await this._textModelService.createModelReference(fileElement.uri)).dispose();
228+
leftResource = fileElement.uri;
229+
} catch {
230+
leftResource = BulkEditPreviewProvider.emptyPreview;
237231
}
238-
});
239-
}
232+
}
240233

241-
private _previewFileElement(): void {
234+
const previewUri = BulkEditPreviewProvider.asPreviewUri(fileElement.uri);
235+
236+
if (leftResource) {
237+
// show diff editor
238+
this._editorService.openEditor({
239+
leftResource,
240+
rightResource: previewUri,
241+
label: localize('edt.title', "{0} (refactor preview)", basename(fileElement.uri)),
242+
options: {
243+
selection: textElement?.edit.range,
244+
revealInCenterIfOutsideViewport: true,
245+
preserveFocus: true
246+
}
247+
});
248+
} else {
249+
// show 'normal' editor
250+
251+
let typeLabel: string | undefined;
252+
if (fileElement.edit.type & BulkFileOperationType.Rename) {
253+
typeLabel = localize('rename', "rename");
254+
} else if (fileElement.edit.type & BulkFileOperationType.Create) {
255+
typeLabel = localize('create', "create");
256+
} else if (fileElement.edit.type & BulkFileOperationType.Delete) {
257+
typeLabel = localize('delete', "delete");
258+
}
242259

260+
this._editorService.openEditor({
261+
label: typeLabel && localize('edt.title2', "{0} ({1}, refactor preview)", basename(fileElement.uri), typeLabel),
262+
resource: previewUri,
263+
options: { preserveFocus: true }
264+
});
265+
}
243266
}
244267
}
245268

src/vs/workbench/contrib/bulkEdit/browser/bulkEditPreview.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,15 @@ export class BulkTextEdit extends CheckedObject {
4949
}
5050

5151
export const enum BulkFileOperationType {
52-
None = 0,
53-
Create = 0b0001,
54-
Delete = 0b0010,
55-
Rename = 0b0100,
52+
TextEdit = 1,
53+
Create = 2,
54+
Delete = 4,
55+
Rename = 8,
5656
}
5757

5858
export class BulkFileOperation extends CheckedObject {
5959

60-
type = BulkFileOperationType.None;
60+
type: BulkFileOperationType = 0;
6161
textEdits: BulkTextEdit[] = [];
6262
originalEdits = new Map<number, ResourceTextEdit | ResourceFileEdit>();
6363
newUri?: URI;
@@ -118,7 +118,7 @@ export class BulkFileOperations {
118118
let type: BulkFileOperationType;
119119

120120
if (isResourceTextEdit(edit)) {
121-
type = BulkFileOperationType.None;
121+
type = BulkFileOperationType.TextEdit;
122122
uri = edit.resource;
123123

124124
} else if (edit.newUri && edit.oldUri) {

0 commit comments

Comments
 (0)