mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 13:33:31 +00:00
35 lines
1 KiB
Markdown
35 lines
1 KiB
Markdown
|
# LSP Extensions
|
||
|
|
||
|
This document describes LSP extensions used by rust-analyzer.
|
||
|
It's a best effort document, when in doubt, consult the source (and send a PR with clarification ;-) ).
|
||
|
We aim to upstream all non Rust-specific extensions to the protocol, but this is not a top priority.
|
||
|
All capabilities are enabled via `experimental` field of `ClientCapabilities`.
|
||
|
|
||
|
## `SnippetTextEdit`
|
||
|
|
||
|
**Capability**
|
||
|
|
||
|
```typescript
|
||
|
{
|
||
|
"snippetTextEdit": boolean
|
||
|
}
|
||
|
```
|
||
|
|
||
|
If this capability is set, `WorkspaceEdit`s returned from `codeAction` requests might contain `SnippetTextEdit`s instead of usual `TextEdit`s:
|
||
|
|
||
|
```typescript
|
||
|
interface SnippetTextEdit extends TextEdit {
|
||
|
insertTextFormat?: InsertTextFormat;
|
||
|
}
|
||
|
```
|
||
|
|
||
|
```typescript
|
||
|
export interface TextDocumentEdit {
|
||
|
textDocument: VersionedTextDocumentIdentifier;
|
||
|
edits: (TextEdit | SnippetTextEdit)[];
|
||
|
}
|
||
|
```
|
||
|
|
||
|
When applying such code action, 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`.
|