about summary refs log tree commit diff
path: root/docs
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2023-11-12 15:20:42 +0000
committerbors <bors@rust-lang.org>2023-11-12 15:20:42 +0000
commit92d9ca7d647f44094377cd4fb6d6a79c3bfa003e (patch)
tree0555af5347eb5432011265a0800757381ad1e39d /docs
parent8bfe0aaba904ac26219ce362283f05b5a0db8ddc (diff)
parent1e4686865efbe5c3a305708d3aceacc181081be8 (diff)
downloadrust-92d9ca7d647f44094377cd4fb6d6a79c3bfa003e.tar.gz
rust-92d9ca7d647f44094377cd4fb6d6a79c3bfa003e.zip
Auto merge of #15876 - DropDemBits:lsp-ext-multiple-snippet-textedit, r=Veykril
minor: Allow multiple snippet edits in a `TextDocumentEdit`

Explicitly[^1] allow a single `TextDocumentEdit` to have multiple `SnippetTextEdit`s. This allows things like renaming extracted variables and functions without having to go through a separate rename step. For an example of what this looks like, see the video in [this comment](https://github.com/microsoft/vscode/issues/145374#issuecomment-1177341711).

The behavior described here lines up with [what VSCode does](https://github.com/microsoft/vscode/blob/bdc113ffe148a92d0e1a8ec34b12c44ea0b73f29/src/vscode-dts/vscode.d.ts#L3728-L3731), and presumably what the eventual LSP behavior will be.

[^1]: This was technically the case before #15269, a single `TextDocumentEdit` always had multiple edits which were `InsertTextFormat.Snippet` as all of the edits were marked as being snippets, even if there weren't any tab stops or placeholders.
Diffstat (limited to 'docs')
-rw-r--r--docs/dev/lsp-extensions.md5
1 files changed, 3 insertions, 2 deletions
diff --git a/docs/dev/lsp-extensions.md b/docs/dev/lsp-extensions.md
index 0801e988f5c..b66c9c943a1 100644
--- a/docs/dev/lsp-extensions.md
+++ b/docs/dev/lsp-extensions.md
@@ -57,8 +57,9 @@ export interface TextDocumentEdit {
 }
 ```
 
-When applying such code action or text edit, the editor should insert snippet, with tab stops and placeholder.
-At the moment, rust-analyzer guarantees that only a single edit will have `InsertTextFormat.Snippet`.
+When applying such code action or text edit, the editor should insert snippet, with tab stops and placeholders.
+At the moment, rust-analyzer guarantees that only a single `TextDocumentEdit` will have edits which can be `InsertTextFormat.Snippet`.
+Any additional `TextDocumentEdit`s will only have edits which are `InsertTextFormat.PlainText`.
 
 ### Example