diff options
| author | Jonas Schievink <jonasschievink@gmail.com> | 2021-04-13 20:32:45 +0200 |
|---|---|---|
| committer | Jonas Schievink <jonasschievink@gmail.com> | 2021-04-14 00:03:04 +0200 |
| commit | 30aae2cefb9d068055ca8d250d04a288e3684394 (patch) | |
| tree | 081a70d030c79437074e2d5ba15f7a9efd5d01cf /editors/code/src | |
| parent | 10a243ea55565a0dd1de52f8f802c3e3a7bfef54 (diff) | |
| download | rust-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.ts | 26 | ||||
| -rw-r--r-- | editors/code/src/lsp_ext.ts | 2 |
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; |
