提交 0edcdab8 编写于 作者: J Johannes Rieken

undo workspace edit changes for now, #10659

上级 cfea9719
...@@ -523,42 +523,42 @@ suite('workspace-namespace', () => { ...@@ -523,42 +523,42 @@ suite('workspace-namespace', () => {
}); });
test('applyEdit should fail when editing deleted resource', async () => { // test('applyEdit should fail when editing deleted resource', async () => {
const resource = await createRandomFile(); // const resource = await createRandomFile();
const edit = new vscode.WorkspaceEdit(); // const edit = new vscode.WorkspaceEdit();
edit.deleteResource(resource); // edit.deleteResource(resource);
try { // try {
edit.insert(resource, new vscode.Position(0, 0), ''); // edit.insert(resource, new vscode.Position(0, 0), '');
assert.fail(false, 'Should disallow edit of deleted resource'); // assert.fail(false, 'Should disallow edit of deleted resource');
} catch { // } catch {
// noop // // noop
} // }
}); // });
test('applyEdit should fail when renaming deleted resource', async () => {
const resource = await createRandomFile();
const edit = new vscode.WorkspaceEdit(); // test('applyEdit should fail when renaming deleted resource', async () => {
edit.deleteResource(resource); // const resource = await createRandomFile();
try {
edit.renameResource(resource, resource); // const edit = new vscode.WorkspaceEdit();
assert.fail(false, 'Should disallow rename of deleted resource'); // edit.deleteResource(resource);
} catch { // try {
// noop // edit.renameResource(resource, resource);
} // assert.fail(false, 'Should disallow rename of deleted resource');
}); // } catch {
// // noop
// }
// });
test('applyEdit should fail when editing renamed from resource', async () => { // test('applyEdit should fail when editing renamed from resource', async () => {
const resource = await createRandomFile(); // const resource = await createRandomFile();
const newResource = vscode.Uri.parse(resource.fsPath + '.1'); // const newResource = vscode.Uri.parse(resource.fsPath + '.1');
const edit = new vscode.WorkspaceEdit(); // const edit = new vscode.WorkspaceEdit();
edit.renameResource(resource, newResource); // edit.renameResource(resource, newResource);
try { // try {
edit.insert(resource, new vscode.Position(0, 0), ''); // edit.insert(resource, new vscode.Position(0, 0), '');
assert.fail(false, 'Should disallow editing renamed file'); // assert.fail(false, 'Should disallow editing renamed file');
} catch { // } catch {
// noop // // noop
} // }
}); // });
}); });
...@@ -2582,46 +2582,6 @@ declare module 'vscode' { ...@@ -2582,46 +2582,6 @@ declare module 'vscode' {
* @return A shallow copy of `[Uri, TextEdit[]]`-tuples. * @return A shallow copy of `[Uri, TextEdit[]]`-tuples.
*/ */
entries(): [Uri, TextEdit[]][]; entries(): [Uri, TextEdit[]][];
/**
* Renames a given resource in the workspace.
*
* @param from Uri of current resource.
* @param to Uri of renamed resource.
*/
renameResource(from: Uri, to: Uri): void;
/**
* Create a new resource in the workspace.
*
* @param uri Uri of resource to create.
*/
createResource(uri: Uri): void;
/**
* Delete a given resource in the workspace.
*
* @param uri Uri of resource to delete.
*/
deleteResource(uri: Uri): void;
/**
* Get the resource edits for this workspace edit.
*
* @returns A shallow copy of uri-tuples in which a rename-edit
* is represented as `[from, to]`, a delete-operation as `[from, null]`,
* and a create-operation as `[null, to]`;
*/
resourceEdits(): [Uri, Uri][];
/**
* Get all edits, textual changes and file changes. The order is the order
* in which edits have been added to this workspace edits. Textuals edits
* are grouped and the first textual edit for a resource matters.
*
* @returns A shallow copy of all changes.
*/
allEntries(): ([Uri, TextEdit[]] | [Uri, Uri])[];
} }
/** /**
......
...@@ -94,7 +94,7 @@ export class ExtHostEditors implements ExtHostEditorsShape { ...@@ -94,7 +94,7 @@ export class ExtHostEditors implements ExtHostEditorsShape {
const dto: WorkspaceEditDto = { edits: [] }; const dto: WorkspaceEditDto = { edits: [] };
for (let entry of edit.allEntries()) { for (let entry of edit.entries()) {
let [uri, uriOrEdits] = entry; let [uri, uriOrEdits] = entry;
if (Array.isArray(uriOrEdits)) { if (Array.isArray(uriOrEdits)) {
let doc = this._extHostDocumentsAndEditors.getDocument(uri.toString()); let doc = this._extHostDocumentsAndEditors.getDocument(uri.toString());
...@@ -103,8 +103,8 @@ export class ExtHostEditors implements ExtHostEditorsShape { ...@@ -103,8 +103,8 @@ export class ExtHostEditors implements ExtHostEditorsShape {
modelVersionId: doc && doc.version, modelVersionId: doc && doc.version,
edits: uriOrEdits.map(TypeConverters.TextEdit.from) edits: uriOrEdits.map(TypeConverters.TextEdit.from)
}); });
} else { // } else {
dto.edits.push({ oldUri: uri, newUri: uriOrEdits }); // dto.edits.push({ oldUri: uri, newUri: uriOrEdits });
} }
} }
......
...@@ -20,7 +20,7 @@ import { ISelection } from 'vs/editor/common/core/selection'; ...@@ -20,7 +20,7 @@ import { ISelection } from 'vs/editor/common/core/selection';
import * as htmlContent from 'vs/base/common/htmlContent'; import * as htmlContent from 'vs/base/common/htmlContent';
import { IRelativePattern } from 'vs/base/common/glob'; import { IRelativePattern } from 'vs/base/common/glob';
import { LanguageSelector, LanguageFilter } from 'vs/editor/common/modes/languageSelector'; import { LanguageSelector, LanguageFilter } from 'vs/editor/common/modes/languageSelector';
import { WorkspaceEditDto, ResourceTextEditDto, ResourceFileEditDto } from 'vs/workbench/api/node/extHost.protocol'; import { WorkspaceEditDto, ResourceTextEditDto } from 'vs/workbench/api/node/extHost.protocol';
export interface PositionLike { export interface PositionLike {
line: number; line: number;
...@@ -232,7 +232,7 @@ export namespace WorkspaceEdit { ...@@ -232,7 +232,7 @@ export namespace WorkspaceEdit {
const result: modes.WorkspaceEdit = { const result: modes.WorkspaceEdit = {
edits: [] edits: []
}; };
for (const entry of value.allEntries()) { for (const entry of value.entries()) {
const [uri, uriOrEdits] = entry; const [uri, uriOrEdits] = entry;
if (Array.isArray(uriOrEdits)) { if (Array.isArray(uriOrEdits)) {
// text edits // text edits
...@@ -253,11 +253,11 @@ export namespace WorkspaceEdit { ...@@ -253,11 +253,11 @@ export namespace WorkspaceEdit {
URI.revive((<ResourceTextEditDto>edit).resource), URI.revive((<ResourceTextEditDto>edit).resource),
<types.TextEdit[]>(<ResourceTextEditDto>edit).edits.map(TextEdit.to) <types.TextEdit[]>(<ResourceTextEditDto>edit).edits.map(TextEdit.to)
); );
} else { // } else {
result.renameResource( // result.renameResource(
URI.revive((<ResourceFileEditDto>edit).oldUri), // URI.revive((<ResourceFileEditDto>edit).oldUri),
URI.revive((<ResourceFileEditDto>edit).newUri) // URI.revive((<ResourceFileEditDto>edit).newUri)
); // );
} }
} }
return result; return result;
......
...@@ -499,21 +499,21 @@ export class WorkspaceEdit implements vscode.WorkspaceEdit { ...@@ -499,21 +499,21 @@ export class WorkspaceEdit implements vscode.WorkspaceEdit {
private _resourceEdits: { seq: number, from: URI, to: URI }[] = []; private _resourceEdits: { seq: number, from: URI, to: URI }[] = [];
private _textEdits = new Map<string, { seq: number, uri: URI, edits: TextEdit[] }>(); private _textEdits = new Map<string, { seq: number, uri: URI, edits: TextEdit[] }>();
createResource(uri: vscode.Uri): void { // createResource(uri: vscode.Uri): void {
this.renameResource(undefined, uri); // this.renameResource(undefined, uri);
} // }
deleteResource(uri: vscode.Uri): void { // deleteResource(uri: vscode.Uri): void {
this.renameResource(uri, undefined); // this.renameResource(uri, undefined);
} // }
renameResource(from: vscode.Uri, to: vscode.Uri): void { // renameResource(from: vscode.Uri, to: vscode.Uri): void {
this._resourceEdits.push({ seq: this._seqPool++, from, to }); // this._resourceEdits.push({ seq: this._seqPool++, from, to });
} // }
resourceEdits(): [vscode.Uri, vscode.Uri][] { // resourceEdits(): [vscode.Uri, vscode.Uri][] {
return this._resourceEdits.map(({ from, to }) => (<[vscode.Uri, vscode.Uri]>[from, to])); // return this._resourceEdits.map(({ from, to }) => (<[vscode.Uri, vscode.Uri]>[from, to]));
} // }
replace(uri: URI, range: Range, newText: string): void { replace(uri: URI, range: Range, newText: string): void {
let edit = new TextEdit(range, newText); let edit = new TextEdit(range, newText);
...@@ -566,19 +566,20 @@ export class WorkspaceEdit implements vscode.WorkspaceEdit { ...@@ -566,19 +566,20 @@ export class WorkspaceEdit implements vscode.WorkspaceEdit {
} }
allEntries(): ([URI, TextEdit[]] | [URI, URI])[] { allEntries(): ([URI, TextEdit[]] | [URI, URI])[] {
// use the 'seq' the we have assigned when inserting return this.entries();
// the operation and use that order in the resulting // // use the 'seq' the we have assigned when inserting
// array // // the operation and use that order in the resulting
const res: ([URI, TextEdit[]] | [URI, URI])[] = []; // // array
this._textEdits.forEach(value => { // const res: ([URI, TextEdit[]] | [URI, URI])[] = [];
const { seq, uri, edits } = value; // this._textEdits.forEach(value => {
res[seq] = [uri, edits]; // const { seq, uri, edits } = value;
}); // res[seq] = [uri, edits];
this._resourceEdits.forEach(value => { // });
const { seq, from, to } = value; // this._resourceEdits.forEach(value => {
res[seq] = [from, to]; // const { seq, from, to } = value;
}); // res[seq] = [from, to];
return res; // });
// return res;
} }
get size(): number { get size(): number {
......
...@@ -375,39 +375,39 @@ suite('ExtHostTypes', function () { ...@@ -375,39 +375,39 @@ suite('ExtHostTypes', function () {
// } // }
// }); // });
test('WorkspaceEdit - keep order of text and file changes', function () { // test('WorkspaceEdit - keep order of text and file changes', function () {
const edit = new types.WorkspaceEdit(); // const edit = new types.WorkspaceEdit();
edit.replace(URI.parse('foo:a'), new types.Range(1, 1, 1, 1), 'foo'); // edit.replace(URI.parse('foo:a'), new types.Range(1, 1, 1, 1), 'foo');
edit.renameResource(URI.parse('foo:a'), URI.parse('foo:b')); // edit.renameResource(URI.parse('foo:a'), URI.parse('foo:b'));
edit.replace(URI.parse('foo:a'), new types.Range(2, 1, 2, 1), 'bar'); // edit.replace(URI.parse('foo:a'), new types.Range(2, 1, 2, 1), 'bar');
edit.replace(URI.parse('foo:b'), new types.Range(3, 1, 3, 1), 'bazz'); // edit.replace(URI.parse('foo:b'), new types.Range(3, 1, 3, 1), 'bazz');
const all = edit.allEntries(); // const all = edit.allEntries();
assert.equal(all.length, 3); // assert.equal(all.length, 3);
function isFileChange(thing: [URI, types.TextEdit[]] | [URI, URI]): thing is [URI, URI] { // function isFileChange(thing: [URI, types.TextEdit[]] | [URI, URI]): thing is [URI, URI] {
const [f, s] = thing; // const [f, s] = thing;
return URI.isUri(f) && URI.isUri(s); // return URI.isUri(f) && URI.isUri(s);
} // }
function isTextChange(thing: [URI, types.TextEdit[]] | [URI, URI]): thing is [URI, types.TextEdit[]] { // function isTextChange(thing: [URI, types.TextEdit[]] | [URI, URI]): thing is [URI, types.TextEdit[]] {
const [f, s] = thing; // const [f, s] = thing;
return URI.isUri(f) && Array.isArray(s); // return URI.isUri(f) && Array.isArray(s);
} // }
const [first, second, third] = all; // const [first, second, third] = all;
assert.equal(first[0].toString(), 'foo:a'); // assert.equal(first[0].toString(), 'foo:a');
assert.ok(!isFileChange(first)); // assert.ok(!isFileChange(first));
assert.ok(isTextChange(first) && first[1].length === 2); // assert.ok(isTextChange(first) && first[1].length === 2);
assert.equal(second[0].toString(), 'foo:a'); // assert.equal(second[0].toString(), 'foo:a');
assert.ok(isFileChange(second)); // assert.ok(isFileChange(second));
assert.equal(third[0].toString(), 'foo:b'); // assert.equal(third[0].toString(), 'foo:b');
assert.ok(!isFileChange(third)); // assert.ok(!isFileChange(third));
assert.ok(isTextChange(third) && third[1].length === 1); // assert.ok(isTextChange(third) && third[1].length === 1);
}); // });
test('DocumentLink', function () { test('DocumentLink', function () {
assert.throws(() => new types.DocumentLink(null, null)); assert.throws(() => new types.DocumentLink(null, null));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册