aboutsummaryrefslogtreecommitdiff
path: root/docs/dev/lsp-extensions.md
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2020-05-25 13:12:53 +0100
committerAleksey Kladov <[email protected]>2020-05-25 13:28:47 +0100
commit76e170c3d0d0784c0e612c5849798c65a2034f29 (patch)
tree8cf69f49502a9f2b08d2d2975be79f54f9a04ccb /docs/dev/lsp-extensions.md
parente4f91bfa578e57c1ef4be3343ebb4e8950e5dae6 (diff)
Less rust-analyzer specific onEnter
Diffstat (limited to 'docs/dev/lsp-extensions.md')
-rw-r--r--docs/dev/lsp-extensions.md53
1 files changed, 53 insertions, 0 deletions
diff --git a/docs/dev/lsp-extensions.md b/docs/dev/lsp-extensions.md
index 55035cfae..e4b9fb2c2 100644
--- a/docs/dev/lsp-extensions.md
+++ b/docs/dev/lsp-extensions.md
@@ -138,6 +138,59 @@ fn main() {
138 Currently this is left to editor's discretion, but it might be useful to specify on the server via snippets. 138 Currently this is left to editor's discretion, but it might be useful to specify on the server via snippets.
139 However, it then becomes unclear how it works with multi cursor. 139 However, it then becomes unclear how it works with multi cursor.
140 140
141## On Enter
142
143**Issue:** https://github.com/microsoft/language-server-protocol/issues/1001
144
145**Server Capability:** `{ "onEnter": boolean }`
146
147This request is send from client to server to handle <kbd>Enter</kbd> keypress.
148
149**Method:** `experimental/onEnter`
150
151**Request:**: `TextDocumentPositionParams`
152
153**Response:**
154
155```typescript
156SnippetTextEdit[]
157```
158
159### Example
160
161```rust
162fn main() {
163 // Some /*cursor here*/ docs
164 let x = 92;
165}
166```
167
168`experimental/onEnter` returns the following snippet
169
170```rust
171fn main() {
172 // Some
173 // $0 docs
174 let x = 92;
175}
176```
177
178The primary goal of `onEnter` is to handle automatic indentation when opening a new line.
179This is not yet implemented.
180The secondary goal is to handle fixing up syntax, like continuing doc strings and comments, and escaping `\n` in string literals.
181
182As proper cursor positioning is raison-d'etat for `onEnter`, it uses `SnippetTextEdit`.
183
184### Unresolved Question
185
186* How to deal with synchronicity of the request?
187 One option is to require the client to block until the server returns the response.
188 Another option is to do a OT-style merging of edits from client and server.
189 A third option is to do a record-replay: client applies heuristic on enter immediatelly, then applies all user's keypresses.
190 When the server is ready with the response, the client rollbacks all the changes and applies the recorded actions on top of the correct response.
191* How to deal with multiple carets?
192* Should we extend this to arbitrary typed events and not just `onEnter`?
193
141## Structural Search Replace (SSR) 194## Structural Search Replace (SSR)
142 195
143**Server Capability:** `{ "ssr": boolean }` 196**Server Capability:** `{ "ssr": boolean }`