diff options
| author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-11-09 11:54:42 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-09 11:54:42 +0000 |
| commit | 2d3b0571bb02aa85e3aae390e5cfb10b0ada5c38 (patch) | |
| tree | 8aebf9a517eef712cc704cd983677183be898010 /editors/code/src | |
| parent | 2f247140817c9cbd9009085c9f9ccedb4f6a718f (diff) | |
| parent | be00b6b8fa03f9b578ca5f736e745d4d99ffd649 (diff) | |
| download | rust-2d3b0571bb02aa85e3aae390e5cfb10b0ada5c38.tar.gz rust-2d3b0571bb02aa85e3aae390e5cfb10b0ada5c38.zip | |
Merge #6465
6465: Support multiple file edits in AssistBuilder r=matklad a=Veykril Fixes #6459 Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
Diffstat (limited to 'editors/code/src')
| -rw-r--r-- | editors/code/src/snippets.ts | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/editors/code/src/snippets.ts b/editors/code/src/snippets.ts index 258b49982ef..fee736e7d90 100644 --- a/editors/code/src/snippets.ts +++ b/editors/code/src/snippets.ts @@ -3,16 +3,29 @@ import * as vscode from 'vscode'; import { assert } from './util'; export async function applySnippetWorkspaceEdit(edit: vscode.WorkspaceEdit) { - assert(edit.entries().length === 1, `bad ws edit: ${JSON.stringify(edit)}`); - const [uri, edits] = edit.entries()[0]; + if (edit.entries().length === 1) { + const [uri, edits] = edit.entries()[0]; + const editor = await editorFromUri(uri); + if (editor) await applySnippetTextEdits(editor, edits); + return; + } + for (const [uri, edits] of edit.entries()) { + const editor = await editorFromUri(uri); + if (editor) await editor.edit((builder) => { + for (const indel of edits) { + assert(!parseSnippet(indel.newText), `bad ws edit: snippet received with multiple edits: ${JSON.stringify(edit)}`); + builder.replace(indel.range, indel.newText); + } + }); + } +} +async function editorFromUri(uri: vscode.Uri): Promise<vscode.TextEditor | undefined> { if (vscode.window.activeTextEditor?.document.uri !== uri) { // `vscode.window.visibleTextEditors` only contains editors whose contents are being displayed await vscode.window.showTextDocument(uri, {}); } - const editor = vscode.window.visibleTextEditors.find((it) => it.document.uri.toString() === uri.toString()); - if (!editor) return; - await applySnippetTextEdits(editor, edits); + return vscode.window.visibleTextEditors.find((it) => it.document.uri.toString() === uri.toString()); } export async function applySnippetTextEdits(editor: vscode.TextEditor, edits: vscode.TextEdit[]) { |
