undo workspace edit changes for now, #10659
This commit is contained in:
parent
cfea97191c
commit
0edcdab82e
|
@ -523,42 +523,42 @@ suite('workspace-namespace', () => {
|
|||
});
|
||||
|
||||
|
||||
test('applyEdit should fail when editing 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.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 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
|
||||
}
|
||||
});
|
||||
// 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
|
||||
// }
|
||||
// });
|
||||
});
|
||||
|
|
40
src/vs/vscode.d.ts
vendored
40
src/vs/vscode.d.ts
vendored
|
@ -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 () {
|
||||
// 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 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);
|
||||
// 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 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);
|
||||
}
|
||||
// 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);
|
||||
// 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(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);
|
||||
});
|
||||
// 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));
|
||||
|
|
Loading…
Reference in a new issue