diff options
author | Jonas Schievink <[email protected]> | 2021-04-13 19:32:45 +0100 |
---|---|---|
committer | Jonas Schievink <[email protected]> | 2021-04-13 23:03:04 +0100 |
commit | 30aae2cefb9d068055ca8d250d04a288e3684394 (patch) | |
tree | 081a70d030c79437074e2d5ba15f7a9efd5d01cf /editors/code | |
parent | 10a243ea55565a0dd1de52f8f802c3e3a7bfef54 (diff) |
Move cursor position when using item movers
Diffstat (limited to 'editors/code')
-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 1a0805bd3..4092435db 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 { | |||
148 | const client = ctx.client; | 148 | const client = ctx.client; |
149 | if (!editor || !client) return; | 149 | if (!editor || !client) return; |
150 | 150 | ||
151 | const edit = await client.sendRequest(ra.moveItem, { | 151 | const lcEdits = await client.sendRequest(ra.moveItem, { |
152 | range: client.code2ProtocolConverter.asRange(editor.selection), | 152 | range: client.code2ProtocolConverter.asRange(editor.selection), |
153 | textDocument: ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(editor.document), | 153 | textDocument: ctx.client.code2ProtocolConverter.asTextDocumentIdentifier(editor.document), |
154 | direction | 154 | direction |
155 | }); | 155 | }); |
156 | 156 | ||
157 | if (!edit) return; | 157 | if (!lcEdits) return; |
158 | 158 | ||
159 | let cursor: vscode.Position | null = null; | 159 | const edits = client.protocol2CodeConverter.asTextEdits(lcEdits); |
160 | 160 | await applySnippetTextEdits(editor, edits); | |
161 | await editor.edit((builder) => { | ||
162 | client.protocol2CodeConverter.asTextEdits(edit.edits).forEach((edit: any) => { | ||
163 | builder.replace(edit.range, edit.newText); | ||
164 | |||
165 | if (direction === ra.Direction.Up) { | ||
166 | if (!cursor || edit.range.end.isBeforeOrEqual(cursor)) { | ||
167 | cursor = edit.range.end; | ||
168 | } | ||
169 | } else { | ||
170 | if (!cursor || edit.range.end.isAfterOrEqual(cursor)) { | ||
171 | cursor = edit.range.end; | ||
172 | } | ||
173 | } | ||
174 | }); | ||
175 | }).then(() => { | ||
176 | const newPosition = cursor ?? editor.selection.start; | ||
177 | editor.selection = new vscode.Selection(newPosition, newPosition); | ||
178 | }); | ||
179 | }; | 161 | }; |
180 | } | 162 | } |
181 | 163 | ||
diff --git a/editors/code/src/lsp_ext.ts b/editors/code/src/lsp_ext.ts index e453bb9e0..f78de894b 100644 --- a/editors/code/src/lsp_ext.ts +++ b/editors/code/src/lsp_ext.ts | |||
@@ -129,7 +129,7 @@ export interface OpenCargoTomlParams { | |||
129 | textDocument: lc.TextDocumentIdentifier; | 129 | textDocument: lc.TextDocumentIdentifier; |
130 | } | 130 | } |
131 | 131 | ||
132 | export const moveItem = new lc.RequestType<MoveItemParams, lc.TextDocumentEdit | void, void>("experimental/moveItem"); | 132 | export const moveItem = new lc.RequestType<MoveItemParams, lc.TextEdit[], void>("experimental/moveItem"); |
133 | 133 | ||
134 | export interface MoveItemParams { | 134 | export interface MoveItemParams { |
135 | textDocument: lc.TextDocumentIdentifier; | 135 | textDocument: lc.TextDocumentIdentifier; |