diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/workspace.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/workspace.test.ts index 77ed49227ca..1ef1c60cd41 100644 --- a/extensions/vscode-api-tests/src/singlefolder-tests/workspace.test.ts +++ b/extensions/vscode-api-tests/src/singlefolder-tests/workspace.test.ts @@ -586,7 +586,7 @@ suite('workspace-namespace', () => { assert.ok(await vscode.workspace.applyEdit(we)); // todo@ben https://github.com/Microsoft/vscode/issues/52212 // let doc = await vscode.workspace.openTextDocument(newUri); - // assert.equal(doc.getText(), 'BarFooHello'); + // assert.equal(doc.getText(), 'BarHelloFoo'); }); test('WorkspaceEdit: Problem recreating a renamed resource #42634', async function () { @@ -605,9 +605,7 @@ suite('workspace-namespace', () => { // todo@ben https://github.com/Microsoft/vscode/issues/52212 // let newDoc = await vscode.workspace.openTextDocument(newUri); - // assert.equal(newDoc.getText(), 'FooHello'); - - // todo@ben https://github.com/Microsoft/vscode/issues/52212 + // assert.equal(newDoc.getText(), 'HelloFoo'); // let doc = await vscode.workspace.openTextDocument(docUri); // assert.equal(doc.getText(), 'Bar'); }); diff --git a/src/vs/workbench/services/bulkEdit/electron-browser/bulkEditService.ts b/src/vs/workbench/services/bulkEdit/electron-browser/bulkEditService.ts index f104e52bc77..1d989c07002 100644 --- a/src/vs/workbench/services/bulkEdit/electron-browser/bulkEditService.ts +++ b/src/vs/workbench/services/bulkEdit/electron-browser/bulkEditService.ts @@ -27,6 +27,7 @@ import { emptyProgressRunner, IProgress, IProgressRunner } from 'vs/platform/pro import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; +import { mergeSort } from 'vs/base/common/arrays'; abstract class Recording { @@ -91,15 +92,7 @@ class EditTask implements IDisposable { apply(): void { if (this._edits.length > 0) { - - this._edits = this._edits.map((value, index) => ({ value, index })).sort((a, b) => { - let ret = Range.compareRangesUsingStarts(a.value.range, b.value.range); - if (ret === 0) { - ret = a.index - b.index; - } - return ret; - }).map(element => element.value); - + this._edits = mergeSort(this._edits, (a, b) => Range.compareRangesUsingStarts(a.range, b.range)); this._initialSelections = this._getInitialSelections(); this._model.pushStackElement(); this._model.pushEditOperations(this._initialSelections, this._edits, (edits) => this._getEndCursorSelections(edits)); diff --git a/src/vs/workbench/test/electron-browser/api/extHostTypes.test.ts b/src/vs/workbench/test/electron-browser/api/extHostTypes.test.ts index 6a9037d6d82..11e5187b6e6 100644 --- a/src/vs/workbench/test/electron-browser/api/extHostTypes.test.ts +++ b/src/vs/workbench/test/electron-browser/api/extHostTypes.test.ts @@ -412,6 +412,18 @@ suite('ExtHostTypes', function () { assert.ok(isTextChange(fourth) && fourth[1].length === 1); }); + test('WorkspaceEdit - two edits for one resource', function () { + let edit = new types.WorkspaceEdit(); + let uri = URI.parse('foo:bar'); + edit.insert(uri, new types.Position(0, 0), 'Hello'); + edit.insert(uri, new types.Position(0, 0), 'Foo'); + + assert.equal(edit.allEntries().length, 2); + let [first, second] = edit.allEntries(); + assert.equal((first as [URI, types.TextEdit[]])[1][0].newText, 'Hello'); + assert.equal((second as [URI, types.TextEdit[]])[1][0].newText, 'Foo'); + }); + test('DocumentLink', function () { assert.throws(() => new types.DocumentLink(null, null)); assert.throws(() => new types.DocumentLink(new types.Range(1, 1, 1, 1), null));