mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-24 18:49:00 +01:00
rename/create should be able to define override behaviour #10659
This commit is contained in:
@@ -766,6 +766,7 @@ export interface WorkspaceSymbolsDto extends IdObject {
|
||||
export interface ResourceFileEditDto {
|
||||
oldUri: UriComponents;
|
||||
newUri: UriComponents;
|
||||
options: { override?: boolean };
|
||||
}
|
||||
|
||||
export interface ResourceTextEditDto {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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]]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user