diff options
| author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-05-25 12:29:47 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-25 12:29:47 +0000 |
| commit | 8686d0b0ac765c2144b22b897de1d8fda68ecc6e (patch) | |
| tree | 8cf69f49502a9f2b08d2d2975be79f54f9a04ccb /docs/dev | |
| parent | e4f91bfa578e57c1ef4be3343ebb4e8950e5dae6 (diff) | |
| parent | 76e170c3d0d0784c0e612c5849798c65a2034f29 (diff) | |
| download | rust-8686d0b0ac765c2144b22b897de1d8fda68ecc6e.tar.gz rust-8686d0b0ac765c2144b22b897de1d8fda68ecc6e.zip | |
Merge #4607
4607: Less rust-analyzer specific onEnter r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
Diffstat (limited to 'docs/dev')
| -rw-r--r-- | docs/dev/lsp-extensions.md | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/docs/dev/lsp-extensions.md b/docs/dev/lsp-extensions.md index 55035cfae18..e4b9fb2c25e 100644 --- a/docs/dev/lsp-extensions.md +++ b/docs/dev/lsp-extensions.md @@ -138,6 +138,59 @@ fn main() { Currently this is left to editor's discretion, but it might be useful to specify on the server via snippets. However, it then becomes unclear how it works with multi cursor. +## On Enter + +**Issue:** https://github.com/microsoft/language-server-protocol/issues/1001 + +**Server Capability:** `{ "onEnter": boolean }` + +This request is send from client to server to handle <kbd>Enter</kbd> keypress. + +**Method:** `experimental/onEnter` + +**Request:**: `TextDocumentPositionParams` + +**Response:** + +```typescript +SnippetTextEdit[] +``` + +### Example + +```rust +fn main() { + // Some /*cursor here*/ docs + let x = 92; +} +``` + +`experimental/onEnter` returns the following snippet + +```rust +fn main() { + // Some + // $0 docs + let x = 92; +} +``` + +The primary goal of `onEnter` is to handle automatic indentation when opening a new line. +This is not yet implemented. +The secondary goal is to handle fixing up syntax, like continuing doc strings and comments, and escaping `\n` in string literals. + +As proper cursor positioning is raison-d'etat for `onEnter`, it uses `SnippetTextEdit`. + +### Unresolved Question + +* How to deal with synchronicity of the request? + One option is to require the client to block until the server returns the response. + Another option is to do a OT-style merging of edits from client and server. + A third option is to do a record-replay: client applies heuristic on enter immediatelly, then applies all user's keypresses. + 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. +* How to deal with multiple carets? +* Should we extend this to arbitrary typed events and not just `onEnter`? + ## Structural Search Replace (SSR) **Server Capability:** `{ "ssr": boolean }` |
