aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/dev/README.md2
-rw-r--r--docs/dev/architecture.md11
-rw-r--r--docs/dev/guide.md10
-rw-r--r--docs/dev/lsp-extensions.md20
-rw-r--r--docs/dev/style.md10
-rw-r--r--docs/user/generated_config.adoc324
-rw-r--r--docs/user/manual.adoc4
7 files changed, 298 insertions, 83 deletions
diff --git a/docs/dev/README.md b/docs/dev/README.md
index d6fae5295..b91013f13 100644
--- a/docs/dev/README.md
+++ b/docs/dev/README.md
@@ -58,8 +58,6 @@ Use `env RUN_SLOW_TESTS=1 cargo test` to run the full suite.
58 58
59We use bors-ng to enforce the [not rocket science](https://graydon2.dreamwidth.org/1597.html) rule. 59We use bors-ng to enforce the [not rocket science](https://graydon2.dreamwidth.org/1597.html) rule.
60 60
61You can run `cargo xtask install-pre-commit-hook` to install git-hook to run rustfmt on commit.
62
63# Launching rust-analyzer 61# Launching rust-analyzer
64 62
65Debugging the language server can be tricky. 63Debugging the language server can be tricky.
diff --git a/docs/dev/architecture.md b/docs/dev/architecture.md
index ead12616e..fb991133a 100644
--- a/docs/dev/architecture.md
+++ b/docs/dev/architecture.md
@@ -46,7 +46,7 @@ This is *the* entry point, but it front-loads a lot of complexity, so its fine t
46 46
47`crates/rust-analyzer/src/handlers.rs` implements all LSP requests and is a great place to start if you are already familiar with LSP. 47`crates/rust-analyzer/src/handlers.rs` implements all LSP requests and is a great place to start if you are already familiar with LSP.
48 48
49`Analysis` and `AnalysisHost` types define the main API. 49`Analysis` and `AnalysisHost` types define the main API for consumers of IDE services.
50 50
51## Code Map 51## Code Map
52 52
@@ -97,13 +97,13 @@ See [RFC](https://github.com/rust-lang/rfcs/pull/2256) and [./syntax.md](./synta
97 97
98- [rowan](https://github.com/rust-analyzer/rowan) library is used for constructing syntax trees. 98- [rowan](https://github.com/rust-analyzer/rowan) library is used for constructing syntax trees.
99- `ast` provides a type safe API on top of the raw `rowan` tree. 99- `ast` provides a type safe API on top of the raw `rowan` tree.
100- `ungrammar` description of the grammar, which is used to generate `syntax_kinds` and `ast` modules, using `cargo xtask codegen` command. 100- `ungrammar` description of the grammar, which is used to generate `syntax_kinds` and `ast` modules, using `cargo test -p xtask` command.
101 101
102Tests for ra_syntax are mostly data-driven. 102Tests for ra_syntax are mostly data-driven.
103`test_data/parser` contains subdirectories with a bunch of `.rs` (test vectors) and `.txt` files with corresponding syntax trees. 103`test_data/parser` contains subdirectories with a bunch of `.rs` (test vectors) and `.txt` files with corresponding syntax trees.
104During testing, we check `.rs` against `.txt`. 104During testing, we check `.rs` against `.txt`.
105If the `.txt` file is missing, it is created (this is how you update tests). 105If the `.txt` file is missing, it is created (this is how you update tests).
106Additionally, running `cargo xtask codegen` will walk the grammar module and collect all `// test test_name` comments into files inside `test_data/parser/inline` directory. 106Additionally, running the xtask test suite with `cargo test -p xtask` will walk the grammar module and collect all `// test test_name` comments into files inside `test_data/parser/inline` directory.
107 107
108To update test data, run with `UPDATE_EXPECT` variable: 108To update test data, run with `UPDATE_EXPECT` variable:
109 109
@@ -111,7 +111,7 @@ To update test data, run with `UPDATE_EXPECT` variable:
111env UPDATE_EXPECT=1 cargo qt 111env UPDATE_EXPECT=1 cargo qt
112``` 112```
113 113
114After adding a new inline test you need to run `cargo xtest codegen` and also update the test data as described above. 114After adding a new inline test you need to run `cargo test -p xtask` and also update the test data as described above.
115 115
116Note [`api_walkthrough`](https://github.com/rust-analyzer/rust-analyzer/blob/2fb6af89eb794f775de60b82afe56b6f986c2a40/crates/ra_syntax/src/lib.rs#L190-L348) 116Note [`api_walkthrough`](https://github.com/rust-analyzer/rust-analyzer/blob/2fb6af89eb794f775de60b82afe56b6f986c2a40/crates/ra_syntax/src/lib.rs#L190-L348)
117in particular: it shows off various methods of working with syntax tree. 117in particular: it shows off various methods of working with syntax tree.
@@ -308,9 +308,8 @@ This sections talks about the things which are everywhere and nowhere in particu
308### Code generation 308### Code generation
309 309
310Some of the components of this repository are generated through automatic processes. 310Some of the components of this repository are generated through automatic processes.
311`cargo xtask codegen` runs all generation tasks. 311Generated code is updated automatically on `cargo test`.
312Generated code is generally committed to the git repository. 312Generated code is generally committed to the git repository.
313There are tests to check that the generated code is fresh.
314 313
315In particular, we generate: 314In particular, we generate:
316 315
diff --git a/docs/dev/guide.md b/docs/dev/guide.md
index b5a5d7c93..c1a55c56c 100644
--- a/docs/dev/guide.md
+++ b/docs/dev/guide.md
@@ -65,11 +65,11 @@ Next, let's talk about what the inputs to the `Analysis` are, precisely.
65 65
66Rust Analyzer never does any I/O itself, all inputs get passed explicitly via 66Rust Analyzer never does any I/O itself, all inputs get passed explicitly via
67the `AnalysisHost::apply_change` method, which accepts a single argument, a 67the `AnalysisHost::apply_change` method, which accepts a single argument, a
68`AnalysisChange`. [`AnalysisChange`] is a builder for a single change 68`Change`. [`Change`] is a builder for a single change
69"transaction", so it suffices to study its methods to understand all of the 69"transaction", so it suffices to study its methods to understand all of the
70input data. 70input data.
71 71
72[`AnalysisChange`]: https://github.com/rust-analyzer/rust-analyzer/blob/guide-2019-01/crates/ide_api/src/lib.rs#L119-L167 72[`Change`]: https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/base_db/src/change.rs#L14-L89
73 73
74The `(add|change|remove)_file` methods control the set of the input files, where 74The `(add|change|remove)_file` methods control the set of the input files, where
75each file has an integer id (`FileId`, picked by the client), text (`String`) 75each file has an integer id (`FileId`, picked by the client), text (`String`)
@@ -158,7 +158,7 @@ it should be possible to dynamically reconfigure it later without restart.
158[main_loop.rs#L62-L70](https://github.com/rust-analyzer/rust-analyzer/blob/guide-2019-01/crates/ra_lsp_server/src/main_loop.rs#L62-L70) 158[main_loop.rs#L62-L70](https://github.com/rust-analyzer/rust-analyzer/blob/guide-2019-01/crates/ra_lsp_server/src/main_loop.rs#L62-L70)
159 159
160The [`ProjectModel`] we get after this step is very Cargo and sysroot specific, 160The [`ProjectModel`] we get after this step is very Cargo and sysroot specific,
161it needs to be lowered to get the input in the form of `AnalysisChange`. This 161it needs to be lowered to get the input in the form of `Change`. This
162happens in [`ServerWorldState::new`] method. Specifically 162happens in [`ServerWorldState::new`] method. Specifically
163 163
164* Create a `SourceRoot` for each Cargo package and sysroot. 164* Create a `SourceRoot` for each Cargo package and sysroot.
@@ -175,7 +175,7 @@ of the main loop, just like any other change. Here's where we handle:
175* [File system changes](https://github.com/rust-analyzer/rust-analyzer/blob/guide-2019-01/crates/ra_lsp_server/src/main_loop.rs#L194) 175* [File system changes](https://github.com/rust-analyzer/rust-analyzer/blob/guide-2019-01/crates/ra_lsp_server/src/main_loop.rs#L194)
176* [Changes from the editor](https://github.com/rust-analyzer/rust-analyzer/blob/guide-2019-01/crates/ra_lsp_server/src/main_loop.rs#L377) 176* [Changes from the editor](https://github.com/rust-analyzer/rust-analyzer/blob/guide-2019-01/crates/ra_lsp_server/src/main_loop.rs#L377)
177 177
178After a single loop's turn, we group the changes into one `AnalysisChange` and 178After a single loop's turn, we group the changes into one `Change` and
179[apply] it. This always happens on the main thread and blocks the loop. 179[apply] it. This always happens on the main thread and blocks the loop.
180 180
181[apply]: https://github.com/rust-analyzer/rust-analyzer/blob/guide-2019-01/crates/ra_lsp_server/src/server_world.rs#L216 181[apply]: https://github.com/rust-analyzer/rust-analyzer/blob/guide-2019-01/crates/ra_lsp_server/src/server_world.rs#L216
@@ -256,7 +256,7 @@ database.
256[`RootDatabase`]: https://github.com/rust-analyzer/rust-analyzer/blob/guide-2019-01/crates/ide_api/src/db.rs#L88-L134 256[`RootDatabase`]: https://github.com/rust-analyzer/rust-analyzer/blob/guide-2019-01/crates/ide_api/src/db.rs#L88-L134
257 257
258Salsa input queries are defined in [`FilesDatabase`] (which is a part of 258Salsa input queries are defined in [`FilesDatabase`] (which is a part of
259`RootDatabase`). They closely mirror the familiar `AnalysisChange` structure: 259`RootDatabase`). They closely mirror the familiar `Change` structure:
260indeed, what `apply_change` does is it sets the values of input queries. 260indeed, what `apply_change` does is it sets the values of input queries.
261 261
262[`FilesDatabase`]: https://github.com/rust-analyzer/rust-analyzer/blob/guide-2019-01/crates/base_db/src/input.rs#L150-L174 262[`FilesDatabase`]: https://github.com/rust-analyzer/rust-analyzer/blob/guide-2019-01/crates/base_db/src/input.rs#L150-L174
diff --git a/docs/dev/lsp-extensions.md b/docs/dev/lsp-extensions.md
index 6c34c4021..694fafcd5 100644
--- a/docs/dev/lsp-extensions.md
+++ b/docs/dev/lsp-extensions.md
@@ -39,7 +39,7 @@ If a language client does not know about `rust-analyzer`'s configuration options
39 39
40**Issue:** https://github.com/microsoft/language-server-protocol/issues/724 40**Issue:** https://github.com/microsoft/language-server-protocol/issues/724
41 41
42**Client Capability:** `{ "snippetTextEdit": boolean }` 42**Experimental Client Capability:** `{ "snippetTextEdit": boolean }`
43 43
44If this capability is set, `WorkspaceEdit`s returned from `codeAction` requests might contain `SnippetTextEdit`s instead of usual `TextEdit`s: 44If this capability is set, `WorkspaceEdit`s returned from `codeAction` requests might contain `SnippetTextEdit`s instead of usual `TextEdit`s:
45 45
@@ -72,7 +72,7 @@ At the moment, rust-analyzer guarantees that only a single edit will have `Inser
72 72
73**Issue:** https://github.com/microsoft/language-server-protocol/issues/994 73**Issue:** https://github.com/microsoft/language-server-protocol/issues/994
74 74
75**Client Capability:** `{ "codeActionGroup": boolean }` 75**Experimental Client Capability:** `{ "codeActionGroup": boolean }`
76 76
77If this capability is set, `CodeAction` returned from the server contain an additional field, `group`: 77If this capability is set, `CodeAction` returned from the server contain an additional field, `group`:
78 78
@@ -119,7 +119,7 @@ Invoking code action at this position will yield two code actions for importing
119 119
120**Issue:** https://github.com/microsoft/language-server-protocol/issues/1002 120**Issue:** https://github.com/microsoft/language-server-protocol/issues/1002
121 121
122**Server Capability:** `{ "parentModule": boolean }` 122**Experimental Server Capability:** `{ "parentModule": boolean }`
123 123
124This request is sent from client to server to handle "Goto Parent Module" editor action. 124This request is sent from client to server to handle "Goto Parent Module" editor action.
125 125
@@ -153,7 +153,7 @@ mod foo;
153 153
154**Issue:** https://github.com/microsoft/language-server-protocol/issues/992 154**Issue:** https://github.com/microsoft/language-server-protocol/issues/992
155 155
156**Server Capability:** `{ "joinLines": boolean }` 156**Experimental Server Capability:** `{ "joinLines": boolean }`
157 157
158This request is sent from client to server to handle "Join Lines" editor action. 158This request is sent from client to server to handle "Join Lines" editor action.
159 159
@@ -200,7 +200,7 @@ fn main() {
200 200
201**Issue:** https://github.com/microsoft/language-server-protocol/issues/1001 201**Issue:** https://github.com/microsoft/language-server-protocol/issues/1001
202 202
203**Server Capability:** `{ "onEnter": boolean }` 203**Experimental Server Capability:** `{ "onEnter": boolean }`
204 204
205This request is sent from client to server to handle <kbd>Enter</kbd> keypress. 205This request is sent from client to server to handle <kbd>Enter</kbd> keypress.
206 206
@@ -251,7 +251,7 @@ As proper cursor positioning is raison-d'etat for `onEnter`, it uses `SnippetTex
251 251
252## Structural Search Replace (SSR) 252## Structural Search Replace (SSR)
253 253
254**Server Capability:** `{ "ssr": boolean }` 254**Experimental Server Capability:** `{ "ssr": boolean }`
255 255
256This request is sent from client to server to handle structural search replace -- automated syntax tree based transformation of the source. 256This request is sent from client to server to handle structural search replace -- automated syntax tree based transformation of the source.
257 257
@@ -293,7 +293,7 @@ SSR with query `foo($a, $b) ==>> ($a).foo($b)` will transform, eg `foo(y + 5, z)
293 293
294**Issue:** https://github.com/microsoft/language-server-protocol/issues/999 294**Issue:** https://github.com/microsoft/language-server-protocol/issues/999
295 295
296**Server Capability:** `{ "matchingBrace": boolean }` 296**Experimental Server Capability:** `{ "matchingBrace": boolean }`
297 297
298This request is sent from client to server to handle "Matching Brace" editor action. 298This request is sent from client to server to handle "Matching Brace" editor action.
299 299
@@ -338,7 +338,7 @@ Moreover, it would be cool if editors didn't need to implement even basic langua
338 338
339**Issue:** https://github.com/microsoft/language-server-protocol/issues/944 339**Issue:** https://github.com/microsoft/language-server-protocol/issues/944
340 340
341**Server Capability:** `{ "runnables": { "kinds": string[] } }` 341**Experimental Server Capability:** `{ "runnables": { "kinds": string[] } }`
342 342
343This request is sent from client to server to get the list of things that can be run (tests, binaries, `cargo check -p`). 343This request is sent from client to server to get the list of things that can be run (tests, binaries, `cargo check -p`).
344 344
@@ -421,7 +421,7 @@ Reloads project information (that is, re-executes `cargo metadata`).
421 421
422## Status Notification 422## Status Notification
423 423
424**Client Capability:** `{ "statusNotification": boolean }` 424**Experimental Client Capability:** `{ "statusNotification": boolean }`
425 425
426**Method:** `rust-analyzer/status` 426**Method:** `rust-analyzer/status`
427 427
@@ -519,7 +519,7 @@ interface InlayHint {
519 519
520## Hover Actions 520## Hover Actions
521 521
522**Client Capability:** `{ "hoverActions": boolean }` 522**Experimental Client Capability:** `{ "hoverActions": boolean }`
523 523
524If this capability is set, `Hover` request returned from the server might contain an additional field, `actions`: 524If this capability is set, `Hover` request returned from the server might contain an additional field, `actions`:
525 525
diff --git a/docs/dev/style.md b/docs/dev/style.md
index dd71e3932..46bd8b9b2 100644
--- a/docs/dev/style.md
+++ b/docs/dev/style.md
@@ -145,7 +145,7 @@ Formatting ensures that you can use your editor's "number of selected characters
145## Marked Tests 145## Marked Tests
146 146
147Use 147Use
148[`mark::hit! / mark::check!`](https://github.com/rust-analyzer/rust-analyzer/blob/71fe719dd5247ed8615641d9303d7ca1aa201c2f/crates/test_utils/src/mark.rs) 148[`cov_mark::hit! / cov_mark::check!`](https://github.com/matklad/cov-mark)
149when testing specific conditions. 149when testing specific conditions.
150Do not place several marks into a single test or condition. 150Do not place several marks into a single test or condition.
151Do not reuse marks between several tests. 151Do not reuse marks between several tests.
@@ -769,14 +769,20 @@ fn foo() -> Option<Bar> {
769 769
770## Comparisons 770## Comparisons
771 771
772Use `<`/`<=`, avoid `>`/`>=`. 772When doing multiple comparisons use `<`/`<=`, avoid `>`/`>=`.
773 773
774```rust 774```rust
775// GOOD 775// GOOD
776assert!(lo <= x && x <= hi); 776assert!(lo <= x && x <= hi);
777assert!(r1 < l2 || r2 < l1);
778assert!(x < y);
779assert!(x > 0);
777 780
778// BAD 781// BAD
779assert!(x >= lo && x <= hi>); 782assert!(x >= lo && x <= hi>);
783assert!(r1 < l2 || l1 > r2);
784assert!(y > x);
785assert!(0 > x);
780``` 786```
781 787
782**Rationale:** Less-then comparisons are more intuitive, they correspond spatially to [real line](https://en.wikipedia.org/wiki/Real_line). 788**Rationale:** Less-then comparisons are more intuitive, they correspond spatially to [real line](https://en.wikipedia.org/wiki/Real_line).
diff --git a/docs/user/generated_config.adoc b/docs/user/generated_config.adoc
index f91e04c31..042ba2d54 100644
--- a/docs/user/generated_config.adoc
+++ b/docs/user/generated_config.adoc
@@ -1,112 +1,322 @@
1[[rust-analyzer.assist.importMergeBehavior]]rust-analyzer.assist.importMergeBehavior (default: `"full"`):: 1[[rust-analyzer.assist.importMergeBehavior]]rust-analyzer.assist.importMergeBehavior (default: `"full"`)::
2 The strategy to use when inserting new imports or merging imports. 2+
3--
4The strategy to use when inserting new imports or merging imports.
5--
3[[rust-analyzer.assist.importPrefix]]rust-analyzer.assist.importPrefix (default: `"plain"`):: 6[[rust-analyzer.assist.importPrefix]]rust-analyzer.assist.importPrefix (default: `"plain"`)::
4 The path structure for newly inserted paths to use. 7+
8--
9The path structure for newly inserted paths to use.
10--
11[[rust-analyzer.assist.importGroup]]rust-analyzer.assist.importGroup (default: `true`)::
12+
13--
14Group inserted imports by the [following order](https://rust-analyzer.github.io/manual.html#auto-import). Groups are separated by newlines.
15--
5[[rust-analyzer.callInfo.full]]rust-analyzer.callInfo.full (default: `true`):: 16[[rust-analyzer.callInfo.full]]rust-analyzer.callInfo.full (default: `true`)::
6 Show function name and docs in parameter hints. 17+
18--
19Show function name and docs in parameter hints.
20--
7[[rust-analyzer.cargo.autoreload]]rust-analyzer.cargo.autoreload (default: `true`):: 21[[rust-analyzer.cargo.autoreload]]rust-analyzer.cargo.autoreload (default: `true`)::
8 Automatically refresh project info via `cargo metadata` on `Cargo.toml` changes. 22+
23--
24Automatically refresh project info via `cargo metadata` on
25`Cargo.toml` changes.
26--
9[[rust-analyzer.cargo.allFeatures]]rust-analyzer.cargo.allFeatures (default: `false`):: 27[[rust-analyzer.cargo.allFeatures]]rust-analyzer.cargo.allFeatures (default: `false`)::
10 Activate all available features (`--all-features`). 28+
29--
30Activate all available features (`--all-features`).
31--
11[[rust-analyzer.cargo.features]]rust-analyzer.cargo.features (default: `[]`):: 32[[rust-analyzer.cargo.features]]rust-analyzer.cargo.features (default: `[]`)::
12 List of features to activate. 33+
13[[rust-analyzer.cargo.loadOutDirsFromCheck]]rust-analyzer.cargo.loadOutDirsFromCheck (default: `false`):: 34--
14 Run `cargo check` on startup to get the correct value for package OUT_DIRs. 35List of features to activate.
36--
37[[rust-analyzer.cargo.runBuildScripts]]rust-analyzer.cargo.runBuildScripts (default: `true`)::
38+
39--
40Run build scripts (`build.rs`) for more precise code analysis.
41--
15[[rust-analyzer.cargo.noDefaultFeatures]]rust-analyzer.cargo.noDefaultFeatures (default: `false`):: 42[[rust-analyzer.cargo.noDefaultFeatures]]rust-analyzer.cargo.noDefaultFeatures (default: `false`)::
16 Do not activate the `default` feature. 43+
44--
45Do not activate the `default` feature.
46--
17[[rust-analyzer.cargo.target]]rust-analyzer.cargo.target (default: `null`):: 47[[rust-analyzer.cargo.target]]rust-analyzer.cargo.target (default: `null`)::
18 Compilation target (target triple). 48+
49--
50Compilation target (target triple).
51--
19[[rust-analyzer.cargo.noSysroot]]rust-analyzer.cargo.noSysroot (default: `false`):: 52[[rust-analyzer.cargo.noSysroot]]rust-analyzer.cargo.noSysroot (default: `false`)::
20 Internal config for debugging, disables loading of sysroot crates. 53+
54--
55Internal config for debugging, disables loading of sysroot crates.
56--
21[[rust-analyzer.checkOnSave.enable]]rust-analyzer.checkOnSave.enable (default: `true`):: 57[[rust-analyzer.checkOnSave.enable]]rust-analyzer.checkOnSave.enable (default: `true`)::
22 Run specified `cargo check` command for diagnostics on save. 58+
59--
60Run specified `cargo check` command for diagnostics on save.
61--
23[[rust-analyzer.checkOnSave.allFeatures]]rust-analyzer.checkOnSave.allFeatures (default: `null`):: 62[[rust-analyzer.checkOnSave.allFeatures]]rust-analyzer.checkOnSave.allFeatures (default: `null`)::
24 Check with all features (`--all-features`). Defaults to `#rust-analyzer.cargo.allFeatures#`. 63+
64--
65Check with all features (`--all-features`).
66Defaults to `#rust-analyzer.cargo.allFeatures#`.
67--
25[[rust-analyzer.checkOnSave.allTargets]]rust-analyzer.checkOnSave.allTargets (default: `true`):: 68[[rust-analyzer.checkOnSave.allTargets]]rust-analyzer.checkOnSave.allTargets (default: `true`)::
26 Check all targets and tests (`--all-targets`). 69+
70--
71Check all targets and tests (`--all-targets`).
72--
27[[rust-analyzer.checkOnSave.command]]rust-analyzer.checkOnSave.command (default: `"check"`):: 73[[rust-analyzer.checkOnSave.command]]rust-analyzer.checkOnSave.command (default: `"check"`)::
28 Cargo command to use for `cargo check`. 74+
75--
76Cargo command to use for `cargo check`.
77--
29[[rust-analyzer.checkOnSave.noDefaultFeatures]]rust-analyzer.checkOnSave.noDefaultFeatures (default: `null`):: 78[[rust-analyzer.checkOnSave.noDefaultFeatures]]rust-analyzer.checkOnSave.noDefaultFeatures (default: `null`)::
30 Do not activate the `default` feature. 79+
80--
81Do not activate the `default` feature.
82--
31[[rust-analyzer.checkOnSave.target]]rust-analyzer.checkOnSave.target (default: `null`):: 83[[rust-analyzer.checkOnSave.target]]rust-analyzer.checkOnSave.target (default: `null`)::
32 Check for a specific target. Defaults to `#rust-analyzer.cargo.target#`. 84+
85--
86Check for a specific target. Defaults to
87`#rust-analyzer.cargo.target#`.
88--
33[[rust-analyzer.checkOnSave.extraArgs]]rust-analyzer.checkOnSave.extraArgs (default: `[]`):: 89[[rust-analyzer.checkOnSave.extraArgs]]rust-analyzer.checkOnSave.extraArgs (default: `[]`)::
34 Extra arguments for `cargo check`. 90+
91--
92Extra arguments for `cargo check`.
93--
35[[rust-analyzer.checkOnSave.features]]rust-analyzer.checkOnSave.features (default: `null`):: 94[[rust-analyzer.checkOnSave.features]]rust-analyzer.checkOnSave.features (default: `null`)::
36 List of features to activate. Defaults to `#rust-analyzer.cargo.features#`. 95+
96--
97List of features to activate. Defaults to
98`#rust-analyzer.cargo.features#`.
99--
37[[rust-analyzer.checkOnSave.overrideCommand]]rust-analyzer.checkOnSave.overrideCommand (default: `null`):: 100[[rust-analyzer.checkOnSave.overrideCommand]]rust-analyzer.checkOnSave.overrideCommand (default: `null`)::
38 Advanced option, fully override the command rust-analyzer uses for checking. The command should include `--message-format=json` or similar option. 101+
102--
103Advanced option, fully override the command rust-analyzer uses for
104checking. The command should include `--message-format=json` or
105similar option.
106--
39[[rust-analyzer.completion.addCallArgumentSnippets]]rust-analyzer.completion.addCallArgumentSnippets (default: `true`):: 107[[rust-analyzer.completion.addCallArgumentSnippets]]rust-analyzer.completion.addCallArgumentSnippets (default: `true`)::
40 Whether to add argument snippets when completing functions. 108+
109--
110Whether to add argument snippets when completing functions.
111--
41[[rust-analyzer.completion.addCallParenthesis]]rust-analyzer.completion.addCallParenthesis (default: `true`):: 112[[rust-analyzer.completion.addCallParenthesis]]rust-analyzer.completion.addCallParenthesis (default: `true`)::
42 Whether to add parenthesis when completing functions. 113+
114--
115Whether to add parenthesis when completing functions.
116--
43[[rust-analyzer.completion.postfix.enable]]rust-analyzer.completion.postfix.enable (default: `true`):: 117[[rust-analyzer.completion.postfix.enable]]rust-analyzer.completion.postfix.enable (default: `true`)::
44 Whether to show postfix snippets like `dbg`, `if`, `not`, etc. 118+
119--
120Whether to show postfix snippets like `dbg`, `if`, `not`, etc.
121--
45[[rust-analyzer.completion.autoimport.enable]]rust-analyzer.completion.autoimport.enable (default: `true`):: 122[[rust-analyzer.completion.autoimport.enable]]rust-analyzer.completion.autoimport.enable (default: `true`)::
46 Toggles the additional completions that automatically add imports when completed. Note that your client must specify the `additionalTextEdits` LSP client capability to truly have this feature enabled. 123+
124--
125Toggles the additional completions that automatically add imports when completed.
126Note that your client must specify the `additionalTextEdits` LSP client capability to truly have this feature enabled.
127--
47[[rust-analyzer.diagnostics.enable]]rust-analyzer.diagnostics.enable (default: `true`):: 128[[rust-analyzer.diagnostics.enable]]rust-analyzer.diagnostics.enable (default: `true`)::
48 Whether to show native rust-analyzer diagnostics. 129+
130--
131Whether to show native rust-analyzer diagnostics.
132--
49[[rust-analyzer.diagnostics.enableExperimental]]rust-analyzer.diagnostics.enableExperimental (default: `true`):: 133[[rust-analyzer.diagnostics.enableExperimental]]rust-analyzer.diagnostics.enableExperimental (default: `true`)::
50 Whether to show experimental rust-analyzer diagnostics that might have more false positives than usual. 134+
135--
136Whether to show experimental rust-analyzer diagnostics that might
137have more false positives than usual.
138--
51[[rust-analyzer.diagnostics.disabled]]rust-analyzer.diagnostics.disabled (default: `[]`):: 139[[rust-analyzer.diagnostics.disabled]]rust-analyzer.diagnostics.disabled (default: `[]`)::
52 List of rust-analyzer diagnostics to disable. 140+
141--
142List of rust-analyzer diagnostics to disable.
143--
53[[rust-analyzer.diagnostics.warningsAsHint]]rust-analyzer.diagnostics.warningsAsHint (default: `[]`):: 144[[rust-analyzer.diagnostics.warningsAsHint]]rust-analyzer.diagnostics.warningsAsHint (default: `[]`)::
54 List of warnings that should be displayed with info severity.\n\nThe warnings will be indicated by a blue squiggly underline in code and a blue icon in the `Problems Panel`. 145+
146--
147List of warnings that should be displayed with info severity.
148
149The warnings will be indicated by a blue squiggly underline in code
150and a blue icon in the `Problems Panel`.
151--
55[[rust-analyzer.diagnostics.warningsAsInfo]]rust-analyzer.diagnostics.warningsAsInfo (default: `[]`):: 152[[rust-analyzer.diagnostics.warningsAsInfo]]rust-analyzer.diagnostics.warningsAsInfo (default: `[]`)::
56 List of warnings that should be displayed with hint severity.\n\nThe warnings will be indicated by faded text or three dots in code and will not show up in the `Problems Panel`. 153+
154--
155List of warnings that should be displayed with hint severity.
156
157The warnings will be indicated by faded text or three dots in code
158and will not show up in the `Problems Panel`.
159--
57[[rust-analyzer.files.watcher]]rust-analyzer.files.watcher (default: `"client"`):: 160[[rust-analyzer.files.watcher]]rust-analyzer.files.watcher (default: `"client"`)::
58 Controls file watching implementation. 161+
162--
163Controls file watching implementation.
164--
59[[rust-analyzer.files.excludeDirs]]rust-analyzer.files.excludeDirs (default: `[]`):: 165[[rust-analyzer.files.excludeDirs]]rust-analyzer.files.excludeDirs (default: `[]`)::
60 These directories will be ignored by rust-analyzer. 166+
167--
168These directories will be ignored by rust-analyzer.
169--
61[[rust-analyzer.hoverActions.debug]]rust-analyzer.hoverActions.debug (default: `true`):: 170[[rust-analyzer.hoverActions.debug]]rust-analyzer.hoverActions.debug (default: `true`)::
62 Whether to show `Debug` action. Only applies when `#rust-analyzer.hoverActions.enable#` is set. 171+
172--
173Whether to show `Debug` action. Only applies when
174`#rust-analyzer.hoverActions.enable#` is set.
175--
63[[rust-analyzer.hoverActions.enable]]rust-analyzer.hoverActions.enable (default: `true`):: 176[[rust-analyzer.hoverActions.enable]]rust-analyzer.hoverActions.enable (default: `true`)::
64 Whether to show HoverActions in Rust files. 177+
178--
179Whether to show HoverActions in Rust files.
180--
65[[rust-analyzer.hoverActions.gotoTypeDef]]rust-analyzer.hoverActions.gotoTypeDef (default: `true`):: 181[[rust-analyzer.hoverActions.gotoTypeDef]]rust-analyzer.hoverActions.gotoTypeDef (default: `true`)::
66 Whether to show `Go to Type Definition` action. Only applies when `#rust-analyzer.hoverActions.enable#` is set. 182+
183--
184Whether to show `Go to Type Definition` action. Only applies when
185`#rust-analyzer.hoverActions.enable#` is set.
186--
67[[rust-analyzer.hoverActions.implementations]]rust-analyzer.hoverActions.implementations (default: `true`):: 187[[rust-analyzer.hoverActions.implementations]]rust-analyzer.hoverActions.implementations (default: `true`)::
68 Whether to show `Implementations` action. Only applies when `#rust-analyzer.hoverActions.enable#` is set. 188+
189--
190Whether to show `Implementations` action. Only applies when
191`#rust-analyzer.hoverActions.enable#` is set.
192--
69[[rust-analyzer.hoverActions.run]]rust-analyzer.hoverActions.run (default: `true`):: 193[[rust-analyzer.hoverActions.run]]rust-analyzer.hoverActions.run (default: `true`)::
70 Whether to show `Run` action. Only applies when `#rust-analyzer.hoverActions.enable#` is set. 194+
195--
196Whether to show `Run` action. Only applies when
197`#rust-analyzer.hoverActions.enable#` is set.
198--
71[[rust-analyzer.hoverActions.linksInHover]]rust-analyzer.hoverActions.linksInHover (default: `true`):: 199[[rust-analyzer.hoverActions.linksInHover]]rust-analyzer.hoverActions.linksInHover (default: `true`)::
72 Use markdown syntax for links in hover. 200+
201--
202Use markdown syntax for links in hover.
203--
73[[rust-analyzer.inlayHints.chainingHints]]rust-analyzer.inlayHints.chainingHints (default: `true`):: 204[[rust-analyzer.inlayHints.chainingHints]]rust-analyzer.inlayHints.chainingHints (default: `true`)::
74 Whether to show inlay type hints for method chains. 205+
206--
207Whether to show inlay type hints for method chains.
208--
75[[rust-analyzer.inlayHints.maxLength]]rust-analyzer.inlayHints.maxLength (default: `null`):: 209[[rust-analyzer.inlayHints.maxLength]]rust-analyzer.inlayHints.maxLength (default: `null`)::
76 Maximum length for inlay hints. Default is unlimited. 210+
211--
212Maximum length for inlay hints. Default is unlimited.
213--
77[[rust-analyzer.inlayHints.parameterHints]]rust-analyzer.inlayHints.parameterHints (default: `true`):: 214[[rust-analyzer.inlayHints.parameterHints]]rust-analyzer.inlayHints.parameterHints (default: `true`)::
78 Whether to show function parameter name inlay hints at the call site. 215+
216--
217Whether to show function parameter name inlay hints at the call
218site.
219--
79[[rust-analyzer.inlayHints.typeHints]]rust-analyzer.inlayHints.typeHints (default: `true`):: 220[[rust-analyzer.inlayHints.typeHints]]rust-analyzer.inlayHints.typeHints (default: `true`)::
80 Whether to show inlay type hints for variables. 221+
222--
223Whether to show inlay type hints for variables.
224--
81[[rust-analyzer.lens.debug]]rust-analyzer.lens.debug (default: `true`):: 225[[rust-analyzer.lens.debug]]rust-analyzer.lens.debug (default: `true`)::
82 Whether to show `Debug` lens. Only applies when `#rust-analyzer.lens.enable#` is set. 226+
227--
228Whether to show `Debug` lens. Only applies when
229`#rust-analyzer.lens.enable#` is set.
230--
83[[rust-analyzer.lens.enable]]rust-analyzer.lens.enable (default: `true`):: 231[[rust-analyzer.lens.enable]]rust-analyzer.lens.enable (default: `true`)::
84 Whether to show CodeLens in Rust files. 232+
233--
234Whether to show CodeLens in Rust files.
235--
85[[rust-analyzer.lens.implementations]]rust-analyzer.lens.implementations (default: `true`):: 236[[rust-analyzer.lens.implementations]]rust-analyzer.lens.implementations (default: `true`)::
86 Whether to show `Implementations` lens. Only applies when `#rust-analyzer.lens.enable#` is set. 237+
238--
239Whether to show `Implementations` lens. Only applies when
240`#rust-analyzer.lens.enable#` is set.
241--
87[[rust-analyzer.lens.run]]rust-analyzer.lens.run (default: `true`):: 242[[rust-analyzer.lens.run]]rust-analyzer.lens.run (default: `true`)::
88 Whether to show `Run` lens. Only applies when `#rust-analyzer.lens.enable#` is set. 243+
244--
245Whether to show `Run` lens. Only applies when
246`#rust-analyzer.lens.enable#` is set.
247--
89[[rust-analyzer.lens.methodReferences]]rust-analyzer.lens.methodReferences (default: `false`):: 248[[rust-analyzer.lens.methodReferences]]rust-analyzer.lens.methodReferences (default: `false`)::
90 Whether to show `Method References` lens. Only applies when `#rust-analyzer.lens.enable#` is set. 249+
250--
251Whether to show `Method References` lens. Only applies when
252`#rust-analyzer.lens.enable#` is set.
253--
91[[rust-analyzer.lens.references]]rust-analyzer.lens.references (default: `false`):: 254[[rust-analyzer.lens.references]]rust-analyzer.lens.references (default: `false`)::
92 Whether to show `References` lens. Only applies when `#rust-analyzer.lens.enable#` is set. 255+
256--
257Whether to show `References` lens. Only applies when
258`#rust-analyzer.lens.enable#` is set.
259--
93[[rust-analyzer.linkedProjects]]rust-analyzer.linkedProjects (default: `[]`):: 260[[rust-analyzer.linkedProjects]]rust-analyzer.linkedProjects (default: `[]`)::
94 Disable project auto-discovery in favor of explicitly specified set of projects.\n\nElements must be paths pointing to `Cargo.toml`, `rust-project.json`, or JSON objects in `rust-project.json` format. 261+
262--
263Disable project auto-discovery in favor of explicitly specified set
264of projects.
265
266Elements must be paths pointing to `Cargo.toml`,
267`rust-project.json`, or JSON objects in `rust-project.json` format.
268--
95[[rust-analyzer.lruCapacity]]rust-analyzer.lruCapacity (default: `null`):: 269[[rust-analyzer.lruCapacity]]rust-analyzer.lruCapacity (default: `null`)::
96 Number of syntax trees rust-analyzer keeps in memory. Defaults to 128. 270+
271--
272Number of syntax trees rust-analyzer keeps in memory. Defaults to 128.
273--
97[[rust-analyzer.notifications.cargoTomlNotFound]]rust-analyzer.notifications.cargoTomlNotFound (default: `true`):: 274[[rust-analyzer.notifications.cargoTomlNotFound]]rust-analyzer.notifications.cargoTomlNotFound (default: `true`)::
98 Whether to show `can't find Cargo.toml` error message. 275+
276--
277Whether to show `can't find Cargo.toml` error message.
278--
99[[rust-analyzer.procMacro.enable]]rust-analyzer.procMacro.enable (default: `false`):: 279[[rust-analyzer.procMacro.enable]]rust-analyzer.procMacro.enable (default: `false`)::
100 Enable Proc macro support, `#rust-analyzer.cargo.loadOutDirsFromCheck#` must be enabled. 280+
281--
282Enable support for procedural macros, implies `#rust-analyzer.cargo.runBuildScripts#`.
283--
101[[rust-analyzer.procMacro.server]]rust-analyzer.procMacro.server (default: `null`):: 284[[rust-analyzer.procMacro.server]]rust-analyzer.procMacro.server (default: `null`)::
102 Internal config, path to proc-macro server executable (typically, this is rust-analyzer itself, but we override this in tests). 285+
286--
287Internal config, path to proc-macro server executable (typically,
288this is rust-analyzer itself, but we override this in tests).
289--
103[[rust-analyzer.runnables.overrideCargo]]rust-analyzer.runnables.overrideCargo (default: `null`):: 290[[rust-analyzer.runnables.overrideCargo]]rust-analyzer.runnables.overrideCargo (default: `null`)::
104 Command to be executed instead of 'cargo' for runnables. 291+
292--
293Command to be executed instead of 'cargo' for runnables.
294--
105[[rust-analyzer.runnables.cargoExtraArgs]]rust-analyzer.runnables.cargoExtraArgs (default: `[]`):: 295[[rust-analyzer.runnables.cargoExtraArgs]]rust-analyzer.runnables.cargoExtraArgs (default: `[]`)::
106 Additional arguments to be passed to cargo for runnables such as tests or binaries.\nFor example, it may be `--release`. 296+
297--
298Additional arguments to be passed to cargo for runnables such as
299tests or binaries. For example, it may be `--release`.
300--
107[[rust-analyzer.rustcSource]]rust-analyzer.rustcSource (default: `null`):: 301[[rust-analyzer.rustcSource]]rust-analyzer.rustcSource (default: `null`)::
108 Path to the rust compiler sources, for usage in rustc_private projects, or "discover" to try to automatically find it. 302+
303--
304Path to the Cargo.toml of the rust compiler workspace, for usage in rustc_private
305projects, or "discover" to try to automatically find it.
306
307Any project which uses rust-analyzer with the rustcPrivate
308crates must set `[package.metadata.rust-analyzer] rustc_private=true` to use it.
309
310This option is not reloaded automatically; you must restart rust-analyzer for it to take effect.
311--
109[[rust-analyzer.rustfmt.extraArgs]]rust-analyzer.rustfmt.extraArgs (default: `[]`):: 312[[rust-analyzer.rustfmt.extraArgs]]rust-analyzer.rustfmt.extraArgs (default: `[]`)::
110 Additional arguments to `rustfmt`. 313+
314--
315Additional arguments to `rustfmt`.
316--
111[[rust-analyzer.rustfmt.overrideCommand]]rust-analyzer.rustfmt.overrideCommand (default: `null`):: 317[[rust-analyzer.rustfmt.overrideCommand]]rust-analyzer.rustfmt.overrideCommand (default: `null`)::
112 Advanced option, fully override the command rust-analyzer uses for formatting. 318+
319--
320Advanced option, fully override the command rust-analyzer uses for
321formatting.
322--
diff --git a/docs/user/manual.adoc b/docs/user/manual.adoc
index 9f28237ff..f4c37353c 100644
--- a/docs/user/manual.adoc
+++ b/docs/user/manual.adoc
@@ -19,7 +19,7 @@ The LSP allows various code editors, like VS Code, Emacs or Vim, to implement se
19To improve this document, send a pull request: + 19To improve this document, send a pull request: +
20https://github.com/rust-analyzer/rust-analyzer/blob/master/docs/user/manual.adoc[https://github.com/rust-analyzer/.../manual.adoc] 20https://github.com/rust-analyzer/rust-analyzer/blob/master/docs/user/manual.adoc[https://github.com/rust-analyzer/.../manual.adoc]
21 21
22The manual is written in https://asciidoc.org[AsciiDoc] and includes some extra files which are generated from the source code. Run `cargo test` and `cargo xtask codegen` to create these and then `asciidoctor manual.adoc` to create an HTML copy. 22The manual is written in https://asciidoc.org[AsciiDoc] and includes some extra files which are generated from the source code. Run `cargo test` and `cargo test -p xtask` to create these and then `asciidoctor manual.adoc` to create an HTML copy.
23 23
24==== 24====
25 25
@@ -226,6 +226,8 @@ The are several LSP client implementations for vim or neovim:
226 * inlay hints for variables and method chaining, _Neovim Only_ 226 * inlay hints for variables and method chaining, _Neovim Only_
227 * semantic highlighting is not implemented yet 227 * semantic highlighting is not implemented yet
228 228
229Note: for code actions, use `coc-codeaction-cursor` and `coc-codeaction-selected`; `coc-codeaction` and `coc-codeaction-line` are unlikely to be useful.
230
229==== LanguageClient-neovim 231==== LanguageClient-neovim
230 232
2311. Install LanguageClient-neovim by following the instructions 2331. Install LanguageClient-neovim by following the instructions