rename/create should be able to define override behaviour #10659

This commit is contained in:
Johannes Rieken
2018-06-20 12:25:09 +02:00
parent c570b7364e
commit 97f48d7bba
11 changed files with 46 additions and 28 deletions

View File

@@ -766,6 +766,7 @@ export interface WorkspaceSymbolsDto extends IdObject {
export interface ResourceFileEditDto {
oldUri: UriComponents;
newUri: UriComponents;
options: { override?: boolean };
}
export interface ResourceTextEditDto {

View File

@@ -10,7 +10,7 @@ import { IDisposable } from 'vs/base/common/lifecycle';
import * as vscode from 'vscode';
import * as typeConverters from 'vs/workbench/api/node/extHostTypeConverters';
import * as types from 'vs/workbench/api/node/extHostTypes';
import { IRawColorInfo } from 'vs/workbench/api/node/extHost.protocol';
import { IRawColorInfo, WorkspaceEditDto } from 'vs/workbench/api/node/extHost.protocol';
import { ISingleEditOperation } from 'vs/editor/common/model';
import * as modes from 'vs/editor/common/modes';
import * as search from 'vs/workbench/parts/search/common/search';
@@ -344,7 +344,7 @@ export class ExtHostApiCommands {
position: position && typeConverters.Position.from(position),
newName
};
return this._commands.executeCommand<modes.WorkspaceEdit>('_executeDocumentRenameProvider', args).then(value => {
return this._commands.executeCommand<WorkspaceEditDto>('_executeDocumentRenameProvider', args).then(value => {
if (!value) {
return undefined;
}

View File

@@ -495,18 +495,18 @@ class RenameAdapter {
return typeConvert.WorkspaceEdit.from(value);
}, err => {
if (typeof err === 'string') {
return <modes.WorkspaceEdit>{
return <WorkspaceEditDto>{
edits: undefined,
rejectReason: err
};
} else if (err instanceof Error && typeof err.message === 'string') {
return <modes.WorkspaceEdit>{
return <WorkspaceEditDto>{
edits: undefined,
rejectReason: err.message
};
} else {
// generic error
return TPromise.wrapError<modes.WorkspaceEdit>(err);
return TPromise.wrapError<WorkspaceEditDto>(err);
}
});
}

View File

@@ -271,7 +271,7 @@ export const TextEdit = {
export namespace WorkspaceEdit {
export function from(value: vscode.WorkspaceEdit, documents?: ExtHostDocumentsAndEditors): WorkspaceEditDto {
const result: modes.WorkspaceEdit = {
const result: WorkspaceEditDto = {
edits: []
};
for (const entry of (value as types.WorkspaceEdit).allEntries()) {
@@ -279,10 +279,10 @@ export namespace WorkspaceEdit {
if (Array.isArray(uriOrEdits)) {
// text edits
let doc = documents ? documents.getDocument(uri.toString()) : undefined;
result.edits.push({ resource: uri, modelVersionId: doc && doc.version, edits: uriOrEdits.map(TextEdit.from) });
result.edits.push(<ResourceTextEditDto>{ resource: uri, modelVersionId: doc && doc.version, edits: uriOrEdits.map(TextEdit.from) });
} else {
// resource edits
result.edits.push({ oldUri: uri, newUri: uriOrEdits });
result.edits.push(<ResourceFileEditDto>{ oldUri: uri, newUri: uriOrEdits, options: entry[2] });
}
}
return result;
@@ -299,7 +299,8 @@ export namespace WorkspaceEdit {
} else {
result.renameFile(
URI.revive((<ResourceFileEditDto>edit).oldUri),
URI.revive((<ResourceFileEditDto>edit).newUri)
URI.revive((<ResourceFileEditDto>edit).newUri),
(<ResourceFileEditDto>edit).options
);
}
}

View File

@@ -495,23 +495,35 @@ export class TextEdit {
}
export interface IFileOperation {
_type: 1;
from: URI;
to: URI;
options?: { override?: boolean };
}
export interface IFileTextEdit {
_type: 2;
uri: URI;
edit: TextEdit;
}
export class WorkspaceEdit implements vscode.WorkspaceEdit {
private _edits = new Array<{ _type: 1, from: URI, to: URI } | { _type: 2, uri: URI, edit: TextEdit }>();
private _edits = new Array<IFileOperation | IFileTextEdit>();
createFile(uri: vscode.Uri): void {
this.renameFile(undefined, uri);
renameFile(from: vscode.Uri, to: vscode.Uri, options?: { override?: boolean }): void {
this._edits.push({ _type: 1, from, to, options });
}
createFile(uri: vscode.Uri, options?: { override?: boolean }): void {
this.renameFile(undefined, uri, options);
}
deleteFile(uri: vscode.Uri): void {
this.renameFile(uri, undefined);
}
renameFile(from: vscode.Uri, to: vscode.Uri): void {
this._edits.push({ _type: 1, from, to });
}
replace(uri: URI, range: Range, newText: string): void {
this._edits.push({ _type: 2, uri, edit: new TextEdit(range, newText) });
}
@@ -581,11 +593,11 @@ export class WorkspaceEdit implements vscode.WorkspaceEdit {
return values(textEdits);
}
allEntries(): ([URI, TextEdit[]] | [URI, URI])[] {
let res: ([URI, TextEdit[]] | [URI, URI])[] = [];
allEntries(): ([URI, TextEdit[]] | [URI, URI, { override?: boolean }])[] {
let res: ([URI, TextEdit[]] | [URI, URI, { override?: boolean }])[] = [];
for (let edit of this._edits) {
if (edit._type === 1) {
res.push([edit.from, edit.to]);
res.push([edit.from, edit.to, edit.options]);
} else {
res.push([edit.uri, [edit.edit]]);
}