mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-08 17:19:48 +01:00
fix #88561
This commit is contained in:
@@ -22,6 +22,7 @@ import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/co
|
||||
import { KeyMod, KeyCode } from 'vs/base/common/keyCodes';
|
||||
import { WorkbenchListFocusContextKey } from 'vs/platform/list/browser/listService';
|
||||
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
|
||||
function getBulkEditPane(panelService: IPanelService): BulkEditPane | undefined {
|
||||
let view: ViewPane | undefined;
|
||||
@@ -84,7 +85,15 @@ class BulkEditPreviewContribution {
|
||||
// (3) close preview editors
|
||||
for (let group of this._editorGroupsService.groups) {
|
||||
for (let input of group.editors) {
|
||||
if (input instanceof DiffEditorInput && input.modifiedInput.getResource()?.scheme === BulkEditPreviewProvider.Schema) {
|
||||
|
||||
let resource: URI | undefined;
|
||||
if (input instanceof DiffEditorInput) {
|
||||
resource = input.modifiedInput.getResource();
|
||||
} else {
|
||||
resource = input.getResource();
|
||||
}
|
||||
|
||||
if (resource?.scheme === BulkEditPreviewProvider.Schema) {
|
||||
group.closeEditor(input, { preserveFocus: true });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ import { diffInserted, diffRemoved } from 'vs/platform/theme/common/colorRegistr
|
||||
import { localize } from 'vs/nls';
|
||||
import { DisposableStore } from 'vs/base/common/lifecycle';
|
||||
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||
import { BulkEditPreviewProvider, BulkFileOperations } from 'vs/workbench/contrib/bulkEdit/browser/bulkEditPreview';
|
||||
import { BulkEditPreviewProvider, BulkFileOperations, BulkTextEdit, BulkFileOperationType } from 'vs/workbench/contrib/bulkEdit/browser/bulkEditPreview';
|
||||
import { ILabelService } from 'vs/platform/label/common/label';
|
||||
import { ITextModelService } from 'vs/editor/common/services/resolverService';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
@@ -28,6 +28,7 @@ import { IViewletViewOptions } from 'vs/workbench/browser/parts/views/viewsViewl
|
||||
import { ResourceLabels, IResourceLabelsContainer } from 'vs/workbench/browser/labels';
|
||||
import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
|
||||
import Severity from 'vs/base/common/severity';
|
||||
import { basename } from 'vs/base/common/resources';
|
||||
|
||||
const enum State {
|
||||
Data = 'data',
|
||||
@@ -107,9 +108,9 @@ export class BulkEditPane extends ViewPane {
|
||||
this._disposables.add(this._tree.onDidOpen(e => {
|
||||
const [first] = e.elements;
|
||||
if (first instanceof TextEditElement) {
|
||||
this._previewTextEditElement(first);
|
||||
this._openElementAsEditor(first.parent, first.edit);
|
||||
} else if (first instanceof FileElement) {
|
||||
this._previewFileElement();
|
||||
this._openElementAsEditor(first);
|
||||
}
|
||||
}));
|
||||
|
||||
@@ -214,32 +215,54 @@ export class BulkEditPane extends ViewPane {
|
||||
this._sessionDisposables.clear();
|
||||
}
|
||||
|
||||
private async _previewTextEditElement(element: TextEditElement): Promise<void> {
|
||||
private async _openElementAsEditor(fileElement: FileElement, textElement?: BulkTextEdit): Promise<void> {
|
||||
|
||||
let leftResource: URI;
|
||||
try {
|
||||
(await this._textModelService.createModelReference(element.parent.uri)).dispose();
|
||||
leftResource = element.parent.uri;
|
||||
} catch {
|
||||
leftResource = BulkEditPreviewProvider.emptyPreview;
|
||||
if (!textElement) {
|
||||
textElement = fileElement.edit.textEdits[0];
|
||||
}
|
||||
|
||||
const previewUri = BulkEditPreviewProvider.asPreviewUri(element.parent.uri);
|
||||
|
||||
this._editorService.openEditor({
|
||||
leftResource,
|
||||
rightResource: previewUri,
|
||||
label: localize('edt.title', "{0} (Refactor Preview)", this._labelService.getUriLabel(element.parent.uri)),
|
||||
options: {
|
||||
selection: element.edit.edit.range,
|
||||
revealInCenterIfOutsideViewport: true,
|
||||
preserveFocus: true
|
||||
let leftResource: URI | undefined;
|
||||
if (fileElement.edit.type & BulkFileOperationType.TextEdit) {
|
||||
try {
|
||||
(await this._textModelService.createModelReference(fileElement.uri)).dispose();
|
||||
leftResource = fileElement.uri;
|
||||
} catch {
|
||||
leftResource = BulkEditPreviewProvider.emptyPreview;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private _previewFileElement(): void {
|
||||
const previewUri = BulkEditPreviewProvider.asPreviewUri(fileElement.uri);
|
||||
|
||||
if (leftResource) {
|
||||
// show diff editor
|
||||
this._editorService.openEditor({
|
||||
leftResource,
|
||||
rightResource: previewUri,
|
||||
label: localize('edt.title', "{0} (refactor preview)", basename(fileElement.uri)),
|
||||
options: {
|
||||
selection: textElement?.edit.range,
|
||||
revealInCenterIfOutsideViewport: true,
|
||||
preserveFocus: true
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// show 'normal' editor
|
||||
|
||||
let typeLabel: string | undefined;
|
||||
if (fileElement.edit.type & BulkFileOperationType.Rename) {
|
||||
typeLabel = localize('rename', "rename");
|
||||
} else if (fileElement.edit.type & BulkFileOperationType.Create) {
|
||||
typeLabel = localize('create', "create");
|
||||
} else if (fileElement.edit.type & BulkFileOperationType.Delete) {
|
||||
typeLabel = localize('delete', "delete");
|
||||
}
|
||||
|
||||
this._editorService.openEditor({
|
||||
label: typeLabel && localize('edt.title2', "{0} ({1}, refactor preview)", basename(fileElement.uri), typeLabel),
|
||||
resource: previewUri,
|
||||
options: { preserveFocus: true }
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -49,15 +49,15 @@ export class BulkTextEdit extends CheckedObject {
|
||||
}
|
||||
|
||||
export const enum BulkFileOperationType {
|
||||
None = 0,
|
||||
Create = 0b0001,
|
||||
Delete = 0b0010,
|
||||
Rename = 0b0100,
|
||||
TextEdit = 1,
|
||||
Create = 2,
|
||||
Delete = 4,
|
||||
Rename = 8,
|
||||
}
|
||||
|
||||
export class BulkFileOperation extends CheckedObject {
|
||||
|
||||
type = BulkFileOperationType.None;
|
||||
type: BulkFileOperationType = 0;
|
||||
textEdits: BulkTextEdit[] = [];
|
||||
originalEdits = new Map<number, ResourceTextEdit | ResourceFileEdit>();
|
||||
newUri?: URI;
|
||||
@@ -118,7 +118,7 @@ export class BulkFileOperations {
|
||||
let type: BulkFileOperationType;
|
||||
|
||||
if (isResourceTextEdit(edit)) {
|
||||
type = BulkFileOperationType.None;
|
||||
type = BulkFileOperationType.TextEdit;
|
||||
uri = edit.resource;
|
||||
|
||||
} else if (edit.newUri && edit.oldUri) {
|
||||
|
||||
Reference in New Issue
Block a user