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

undo workspace edit changes for now, #10659

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