about summary refs log tree commit diff
path: root/editors/code/src
diff options
context:
space:
mode:
authorJonas Schievink <jonasschievink@gmail.com>2021-04-13 20:32:45 +0200
committerJonas Schievink <jonasschievink@gmail.com>2021-04-14 00:03:04 +0200
commit30aae2cefb9d068055ca8d250d04a288e3684394 (patch)
tree081a70d030c79437074e2d5ba15f7a9efd5d01cf /editors/code/src
parent10a243ea55565a0dd1de52f8f802c3e3a7bfef54 (diff)
downloadrust-30aae2cefb9d068055ca8d250d04a288e3684394.tar.gz
rust-30aae2cefb9d068055ca8d250d04a288e3684394.zip
Move cursor position when using item movers
Diffstat (limited to 'editors/code/src')
-rw-r--r--editors/code/src/commands.ts26
-rw-r--r--editors/code/src/lsp_ext.ts2
2 files changed, 5 insertions, 23 deletions
diff --git a/editors/code/src/commands.ts b/editors/code/src/commands.ts
index 1a0805bd378..4092435dbe7 100644
--- a/editors/code/src/commands.ts
+++ b/editors/code/src/commands.ts
@@ -148,34 +148,16 @@ export function moveItem(ctx: Ctx, direction: ra.Direction): Cmd {
         const client = ctx.client;
         if (!editor || !client) return;
 
-        const edit = await client.sendRequest(ra.moveItem, {
+        const lcEdits = await client.sendRequest(ra.moveItem, {
             range: client.code2ProtocolConverter.asRange(editor.selection),
             textDocument: ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(editor.document),
             direction
         });
 
-        if (!edit) return;
+        if (!lcEdits) return;
 
-        let cursor: vscode.Position | null = null;
-
-        await editor.edit((builder) => {
-            client.protocol2CodeConverter.asTextEdits(edit.edits).forEach((edit: any) => {
-                builder.replace(edit.range, edit.newText);
-
-                if (direction === ra.Direction.Up) {
-                    if (!cursor || edit.range.end.isBeforeOrEqual(cursor)) {
-                        cursor = edit.range.end;
-                    }
-                } else {
-                    if (!cursor || edit.range.end.isAfterOrEqual(cursor)) {
-                        cursor = edit.range.end;
-                    }
-                }
-            });
-        }).then(() => {
-            const newPosition = cursor ?? editor.selection.start;
-            editor.selection = new vscode.Selection(newPosition, newPosition);
-        });
+        const edits = client.protocol2CodeConverter.asTextEdits(lcEdits);
+        await applySnippetTextEdits(editor, edits);
     };
 }
 
diff --git a/editors/code/src/lsp_ext.ts b/editors/code/src/lsp_ext.ts
index e453bb9e0bc..f78de894b54 100644
--- a/editors/code/src/lsp_ext.ts
+++ b/editors/code/src/lsp_ext.ts
@@ -129,7 +129,7 @@ export interface OpenCargoTomlParams {
     textDocument: lc.TextDocumentIdentifier;
 }
 
-export const moveItem = new lc.RequestType<MoveItemParams, lc.TextDocumentEdit | void, void>("experimental/moveItem");
+export const moveItem = new lc.RequestType<MoveItemParams, lc.TextEdit[], void>("experimental/moveItem");
 
 export interface MoveItemParams {
     textDocument: lc.TextDocumentIdentifier;