aboutsummaryrefslogtreecommitdiff
path: root/docs/user
diff options
context:
space:
mode:
Diffstat (limited to 'docs/user')
-rw-r--r--docs/user/assists.md96
-rw-r--r--docs/user/features.md14
-rw-r--r--docs/user/readme.adoc41
3 files changed, 115 insertions, 36 deletions
diff --git a/docs/user/assists.md b/docs/user/assists.md
index 6c6943622..4ad7ea59d 100644
--- a/docs/user/assists.md
+++ b/docs/user/assists.md
@@ -17,7 +17,7 @@ struct S;
17struct S; 17struct S;
18 18
19impl Debug for S { 19impl Debug for S {
20 20 $0
21} 21}
22``` 22```
23 23
@@ -33,7 +33,7 @@ struct Point {
33} 33}
34 34
35// AFTER 35// AFTER
36#[derive()] 36#[derive($0)]
37struct Point { 37struct Point {
38 x: u32, 38 x: u32,
39 y: u32, 39 y: u32,
@@ -77,7 +77,7 @@ fn foo() {
77} 77}
78 78
79fn bar(arg: &str, baz: Baz) { 79fn bar(arg: &str, baz: Baz) {
80 todo!() 80 ${0:todo!()}
81} 81}
82 82
83``` 83```
@@ -105,16 +105,16 @@ Adds a new inherent impl for a type.
105```rust 105```rust
106// BEFORE 106// BEFORE
107struct Ctx<T: Clone> { 107struct Ctx<T: Clone> {
108 data: T,┃ 108 data: T,┃
109} 109}
110 110
111// AFTER 111// AFTER
112struct Ctx<T: Clone> { 112struct Ctx<T: Clone> {
113 data: T, 113 data: T,
114} 114}
115 115
116impl<T: Clone> Ctx<T> { 116impl<T: Clone> Ctx<T> {
117 117 $0
118} 118}
119``` 119```
120 120
@@ -146,7 +146,7 @@ trait Trait {
146impl Trait for () { 146impl Trait for () {
147 Type X = (); 147 Type X = ();
148 fn foo(&self) {} 148 fn foo(&self) {}
149 fn bar(&self) {} 149 $0fn bar(&self) {}
150 150
151} 151}
152``` 152```
@@ -175,7 +175,9 @@ trait Trait<T> {
175} 175}
176 176
177impl Trait<u32> for () { 177impl Trait<u32> for () {
178 fn foo(&self) -> u32 { todo!() } 178 fn foo(&self) -> u32 {
179 ${0:todo!()}
180 }
179 181
180} 182}
181``` 183```
@@ -196,11 +198,29 @@ struct Ctx<T: Clone> {
196} 198}
197 199
198impl<T: Clone> Ctx<T> { 200impl<T: Clone> Ctx<T> {
199 fn new(data: T) -> Self { Self { data } } 201 fn $0new(data: T) -> Self { Self { data } }
200} 202}
201 203
202``` 204```
203 205
206## `add_turbo_fish`
207
208Adds `::<_>` to a call of a generic method or function.
209
210```rust
211// BEFORE
212fn make<T>() -> T { todo!() }
213fn main() {
214 let x = make┃();
215}
216
217// AFTER
218fn make<T>() -> T { todo!() }
219fn main() {
220 let x = make::<${0:_}>();
221}
222```
223
204## `apply_demorgan` 224## `apply_demorgan`
205 225
206Apply [De Morgan's law](https://en.wikipedia.org/wiki/De_Morgan%27s_laws). 226Apply [De Morgan's law](https://en.wikipedia.org/wiki/De_Morgan%27s_laws).
@@ -239,6 +259,18 @@ fn main() {
239} 259}
240``` 260```
241 261
262## `change_return_type_to_result`
263
264Change the function's return type to Result.
265
266```rust
267// BEFORE
268fn foo() -> i32┃ { 42i32 }
269
270// AFTER
271fn foo() -> Result<i32, ${0:_}> { Ok(42i32) }
272```
273
242## `change_visibility` 274## `change_visibility`
243 275
244Adds or changes existing visibility specifier. 276Adds or changes existing visibility specifier.
@@ -293,12 +325,34 @@ enum Action { Move { distance: u32 }, Stop }
293 325
294fn handle(action: Action) { 326fn handle(action: Action) {
295 match action { 327 match action {
296 Action::Move { distance } => {} 328 $0Action::Move { distance } => {}
297 Action::Stop => {} 329 Action::Stop => {}
298 } 330 }
299} 331}
300``` 332```
301 333
334## `fix_visibility`
335
336Makes inaccessible item public.
337
338```rust
339// BEFORE
340mod m {
341 fn frobnicate() {}
342}
343fn main() {
344 m::frobnicate┃() {}
345}
346
347// AFTER
348mod m {
349 $0pub(crate) fn frobnicate() {}
350}
351fn main() {
352 m::frobnicate() {}
353}
354```
355
302## `flip_binexpr` 356## `flip_binexpr`
303 357
304Flips operands of a binary expression. 358Flips operands of a binary expression.
@@ -372,7 +426,7 @@ fn main() {
372 426
373// AFTER 427// AFTER
374fn main() { 428fn main() {
375 let var_name = (1 + 2); 429 let $0var_name = (1 + 2);
376 var_name * 4; 430 var_name * 4;
377} 431}
378``` 432```
@@ -679,7 +733,7 @@ fn main() {
679 let x: Result<i32, i32> = Result::Ok(92); 733 let x: Result<i32, i32> = Result::Ok(92);
680 let y = match x { 734 let y = match x {
681 Ok(a) => a, 735 Ok(a) => a,
682 _ => unreachable!(), 736 $0_ => unreachable!(),
683 }; 737 };
684} 738}
685``` 739```
@@ -695,3 +749,21 @@ use std::┃collections::HashMap;
695// AFTER 749// AFTER
696use std::{collections::HashMap}; 750use std::{collections::HashMap};
697``` 751```
752
753## `unwrap_block`
754
755This assist removes if...else, for, while and loop control statements to just keep the body.
756
757```rust
758// BEFORE
759fn foo() {
760 if true {┃
761 println!("foo");
762 }
763}
764
765// AFTER
766fn foo() {
767 println!("foo");
768}
769```
diff --git a/docs/user/features.md b/docs/user/features.md
index b9a365fc1..340bce835 100644
--- a/docs/user/features.md
+++ b/docs/user/features.md
@@ -143,9 +143,9 @@ takes arguments, the cursor is positioned inside the parenthesis.
143There are postfix completions, which can be triggered by typing something like 143There are postfix completions, which can be triggered by typing something like
144`foo().if`. The word after `.` determines postfix completion. Possible variants are: 144`foo().if`. The word after `.` determines postfix completion. Possible variants are:
145 145
146- `expr.if` -> `if expr {}` 146- `expr.if` -> `if expr {}` or `if let ... {}` for `Option` or `Result`
147- `expr.match` -> `match expr {}` 147- `expr.match` -> `match expr {}`
148- `expr.while` -> `while expr {}` 148- `expr.while` -> `while expr {}` or `while let ... {}` for `Option` or `Result`
149- `expr.ref` -> `&expr` 149- `expr.ref` -> `&expr`
150- `expr.refm` -> `&mut expr` 150- `expr.refm` -> `&mut expr`
151- `expr.not` -> `!expr` 151- `expr.not` -> `!expr`
@@ -161,6 +161,16 @@ There also snippet completions:
161#### Inside Modules 161#### Inside Modules
162 162
163- `tfn` -> `#[test] fn f(){}` 163- `tfn` -> `#[test] fn f(){}`
164- `tmod` ->
165```rust
166#[cfg(test)]
167mod tests {
168 use super::*;
169
170 #[test]
171 fn test_fn() {}
172}
173```
164 174
165### Code Highlighting 175### Code Highlighting
166 176
diff --git a/docs/user/readme.adoc b/docs/user/readme.adoc
index b1af72ce6..40ed54809 100644
--- a/docs/user/readme.adoc
+++ b/docs/user/readme.adoc
@@ -57,9 +57,13 @@ To disable this notification put the following to `settings.json`
57---- 57----
58==== 58====
59 59
60The server binary is stored in `~/.config/Code/User/globalStorage/matklad.rust-analyzer` (Linux) or in `~/.Library/Application Support/Code/User/globalStorage/matklad.rust-analyzer` (macOS) or in `%APPDATA%\Code\User\globalStorage` (Windows). 60The server binary is stored in:
61 61
62Note that we only support the latest version of VS Code. 62* Linux: `~/.config/Code/User/globalStorage/matklad.rust-analyzer`
63* macOS: `~/Library/Application Support/Code/User/globalStorage/matklad.rust-analyzer`
64* Windows: `%APPDATA%\Code\User\globalStorage\matklad.rust-analyzer`
65
66Note that we only support two most recent versions of VS Code.
63 67
64==== Updates 68==== Updates
65 69
@@ -104,7 +108,7 @@ Here are some useful self-diagnostic commands:
104 108
105* **Rust Analyzer: Show RA Version** shows the version of `rust-analyzer` binary 109* **Rust Analyzer: Show RA Version** shows the version of `rust-analyzer` binary
106* **Rust Analyzer: Status** prints some statistics about the server, like the few latest LSP requests 110* **Rust Analyzer: Status** prints some statistics about the server, like the few latest LSP requests
107* To enable server-side logging, run with `env RUST_LOG=info` and see `Output > Rust Analyzer Language Server` in VS Code's panel. 111* To enable server-side logging, run with `env RA_LOG=info` and see `Output > Rust Analyzer Language Server` in VS Code's panel.
108* To log all LSP requests, add `"rust-analyzer.trace.server": "verbose"` to the settings and look for `Server Trace` in the panel. 112* To log all LSP requests, add `"rust-analyzer.trace.server": "verbose"` to the settings and look for `Server Trace` in the panel.
109* To enable client-side logging, add `"rust-analyzer.trace.extension": true` to the settings and open the `Console` tab of VS Code developer tools. 113* To enable client-side logging, add `"rust-analyzer.trace.extension": true` to the settings and open the `Console` tab of VS Code developer tools.
110 114
@@ -135,17 +139,16 @@ If your editor can't find the binary even though the binary is on your `$PATH`,
135 139
136==== Arch Linux 140==== Arch Linux
137 141
138The `rust-analyzer` binary can be installed from AUR (Arch User Repository): 142The `rust-analyzer` binary can be installed from the repos or AUR (Arch User Repository):
139 143
140- https://aur.archlinux.org/packages/rust-analyzer-bin[`rust-analyzer-bin`] (binary from GitHub releases) 144- https://www.archlinux.org/packages/community/x86_64/rust-analyzer/[`rust-analyzer`] (built from latest tagged source)
141- https://aur.archlinux.org/packages/rust-analyzer[`rust-analyzer`] (built from latest tagged source) 145- https://aur.archlinux.org/packages/rust-analyzer-git[`rust-analyzer-git`] (latest Git version)
142- https://aur.archlinux.org/packages/rust-analyzer-git[`rust-analyzer-git`] (latest git version)
143 146
144Install it with AUR helper of your choice, for example: 147Install it with pacman, for example:
145 148
146[source,bash] 149[source,bash]
147---- 150----
148$ yay -S rust-analyzer-bin 151$ pacman -S rust-analyzer
149---- 152----
150 153
151=== Emacs 154=== Emacs
@@ -159,11 +162,11 @@ Emacs support is maintained as part of the https://github.com/emacs-lsp/lsp-mode
1593. Run `lsp` in a Rust buffer. 1623. Run `lsp` in a Rust buffer.
1604. (Optionally) bind commands like `lsp-rust-analyzer-join-lines`, `lsp-extend-selection` and `lsp-rust-analyzer-expand-macro` to keys. 1634. (Optionally) bind commands like `lsp-rust-analyzer-join-lines`, `lsp-extend-selection` and `lsp-rust-analyzer-expand-macro` to keys.
161 164
162=== Vim 165=== Vim/NeoVim
163 166
164Prerequisites: You have installed the <<rust-analyzer-language-server-binary,`rust-analyzer` binary>>. 167Prerequisites: You have installed the <<rust-analyzer-language-server-binary,`rust-analyzer` binary>>. Not needed if the extension can install/update it on its own, coc-rust-analyzer is one example.
165 168
166The are several LSP client implementations for vim: 169The are several LSP client implementations for vim or neovim:
167 170
168==== coc-rust-analyzer 171==== coc-rust-analyzer
169 172
@@ -183,7 +186,7 @@ The are several LSP client implementations for vim:
183 186
1841. Install LanguageClient-neovim by following the instructions 1871. Install LanguageClient-neovim by following the instructions
185 https://github.com/autozimu/LanguageClient-neovim[here] 188 https://github.com/autozimu/LanguageClient-neovim[here]
186 * The github project wiki has extra tips on configuration 189 * The GitHub project wiki has extra tips on configuration
187 190
1882. Configure by adding this to your vim/neovim config file (replacing the existing Rust-specific line if it exists): 1912. Configure by adding this to your vim/neovim config file (replacing the existing Rust-specific line if it exists):
189+ 192+
@@ -216,17 +219,11 @@ let g:ycm_language_server =
216 219
217==== ALE 220==== ALE
218 221
219To add the LSP server to https://github.com/dense-analysis/ale[ale]: 222To use the LSP server in https://github.com/dense-analysis/ale[ale]:
220 223
221[source,vim] 224[source,vim]
222---- 225----
223call ale#linter#Define('rust', { 226let g:ale_linters = {'rust': ['analyzer']}
224\ 'name': 'rust-analyzer',
225\ 'lsp': 'stdio',
226\ 'executable': 'rust-analyzer',
227\ 'command': '%e',
228\ 'project_root': '.',
229\})
230---- 227----
231 228
232==== nvim-lsp 229==== nvim-lsp
@@ -252,7 +249,7 @@ If it worked, you should see "rust-analyzer, Line X, Column Y" on the left side
252 249
253If you get an error saying `No such file or directory: 'rust-analyzer'`, see the <<rust-analyzer-language-server-binary,`rust-analyzer` binary>> section on installing the language server binary. 250If you get an error saying `No such file or directory: 'rust-analyzer'`, see the <<rust-analyzer-language-server-binary,`rust-analyzer` binary>> section on installing the language server binary.
254 251
255=== Gnome Builder 252=== GNOME Builder
256 253
257Prerequisites: You have installed the <<rust-analyzer-language-server-binary,`rust-analyzer` binary>>. 254Prerequisites: You have installed the <<rust-analyzer-language-server-binary,`rust-analyzer` binary>>.
258 255