aboutsummaryrefslogtreecommitdiff
path: root/docs/dev/lsp-extensions.md
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2020-05-24 15:18:46 +0100
committerAleksey Kladov <[email protected]>2020-05-24 15:53:18 +0100
commit934227361623b258d833be20e464e1509cb432ad (patch)
treecfb43f218d80f8e29045cf75e6e31ccfd6ca3782 /docs/dev/lsp-extensions.md
parent7e862626cc892662c3c95ba393483ac89c07e31a (diff)
Document matchingBrace LSP request
Diffstat (limited to 'docs/dev/lsp-extensions.md')
-rw-r--r--docs/dev/lsp-extensions.md47
1 files changed, 46 insertions, 1 deletions
diff --git a/docs/dev/lsp-extensions.md b/docs/dev/lsp-extensions.md
index 1cc51410b..9fa1c5fc2 100644
--- a/docs/dev/lsp-extensions.md
+++ b/docs/dev/lsp-extensions.md
@@ -95,7 +95,7 @@ Invoking code action at this position will yield two code actions for importing
95 95
96This request is send from client to server to handle "Join Lines" editor action. 96This request is send from client to server to handle "Join Lines" editor action.
97 97
98**Method:** `experimental/JoinLines` 98**Method:** `experimental/joinLines`
99 99
100**Request:** 100**Request:**
101 101
@@ -172,3 +172,48 @@ SSR with query `foo($a:expr, $b:expr) ==>> ($a).foo($b)` will transform, eg `foo
172 172
173* Probably needs search without replace mode 173* Probably needs search without replace mode
174* Needs a way to limit the scope to certain files. 174* Needs a way to limit the scope to certain files.
175
176## Matching Brace
177
178**Issue:** https://github.com/microsoft/language-server-protocol/issues/999
179
180**Server Capability:** `{ "matchingBrace": boolean }`
181
182This request is send from client to server to handle "Matching Brace" editor action.
183
184**Method:** `experimental/matchingBrace`
185
186**Request:**
187
188```typescript
189interface MatchingBraceParams {
190 textDocument: TextDocumentIdentifier,
191 /// Position for each cursor
192 positions: Position[],
193}
194```
195
196**Response:**
197
198```typescript
199Position[]
200```
201
202### Example
203
204```rust
205fn main() {
206 let x: Vec<()>/*cursor here*/ = vec![]
207}
208```
209
210`experimental/matchingBrace` yields the position of `<`.
211In many cases, matching braces can be handled by the editor.
212However, some cases (like disambiguating between generics and comparison operations) need a real parser.
213Moreover, it would be cool if editors didn't need to implement even basic language parsing
214
215### Unresolved Question
216
217* Should we return a a nested brace structure, to allow paredit-like actions of jump *out* of the current brace pair?
218 This is how `SelectionRange` request works.
219* Alternatively, should we perhaps flag certain `SelectionRange`s as being brace pairs?