diff options
Diffstat (limited to 'docs/user')
-rw-r--r-- | docs/user/assists.md | 96 | ||||
-rw-r--r-- | docs/user/features.md | 14 | ||||
-rw-r--r-- | docs/user/readme.adoc | 41 |
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; | |||
17 | struct S; | 17 | struct S; |
18 | 18 | ||
19 | impl Debug for S { | 19 | impl 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)] |
37 | struct Point { | 37 | struct Point { |
38 | x: u32, | 38 | x: u32, |
39 | y: u32, | 39 | y: u32, |
@@ -77,7 +77,7 @@ fn foo() { | |||
77 | } | 77 | } |
78 | 78 | ||
79 | fn bar(arg: &str, baz: Baz) { | 79 | fn 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 |
107 | struct Ctx<T: Clone> { | 107 | struct Ctx<T: Clone> { |
108 | data: T,┃ | 108 | data: T,┃ |
109 | } | 109 | } |
110 | 110 | ||
111 | // AFTER | 111 | // AFTER |
112 | struct Ctx<T: Clone> { | 112 | struct Ctx<T: Clone> { |
113 | data: T, | 113 | data: T, |
114 | } | 114 | } |
115 | 115 | ||
116 | impl<T: Clone> Ctx<T> { | 116 | impl<T: Clone> Ctx<T> { |
117 | 117 | $0 | |
118 | } | 118 | } |
119 | ``` | 119 | ``` |
120 | 120 | ||
@@ -146,7 +146,7 @@ trait Trait { | |||
146 | impl Trait for () { | 146 | impl 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 | ||
177 | impl Trait<u32> for () { | 177 | impl 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 | ||
198 | impl<T: Clone> Ctx<T> { | 200 | impl<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 | |||
208 | Adds `::<_>` to a call of a generic method or function. | ||
209 | |||
210 | ```rust | ||
211 | // BEFORE | ||
212 | fn make<T>() -> T { todo!() } | ||
213 | fn main() { | ||
214 | let x = make┃(); | ||
215 | } | ||
216 | |||
217 | // AFTER | ||
218 | fn make<T>() -> T { todo!() } | ||
219 | fn main() { | ||
220 | let x = make::<${0:_}>(); | ||
221 | } | ||
222 | ``` | ||
223 | |||
204 | ## `apply_demorgan` | 224 | ## `apply_demorgan` |
205 | 225 | ||
206 | Apply [De Morgan's law](https://en.wikipedia.org/wiki/De_Morgan%27s_laws). | 226 | Apply [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 | |||
264 | Change the function's return type to Result. | ||
265 | |||
266 | ```rust | ||
267 | // BEFORE | ||
268 | fn foo() -> i32┃ { 42i32 } | ||
269 | |||
270 | // AFTER | ||
271 | fn foo() -> Result<i32, ${0:_}> { Ok(42i32) } | ||
272 | ``` | ||
273 | |||
242 | ## `change_visibility` | 274 | ## `change_visibility` |
243 | 275 | ||
244 | Adds or changes existing visibility specifier. | 276 | Adds or changes existing visibility specifier. |
@@ -293,12 +325,34 @@ enum Action { Move { distance: u32 }, Stop } | |||
293 | 325 | ||
294 | fn handle(action: Action) { | 326 | fn 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 | |||
336 | Makes inaccessible item public. | ||
337 | |||
338 | ```rust | ||
339 | // BEFORE | ||
340 | mod m { | ||
341 | fn frobnicate() {} | ||
342 | } | ||
343 | fn main() { | ||
344 | m::frobnicate┃() {} | ||
345 | } | ||
346 | |||
347 | // AFTER | ||
348 | mod m { | ||
349 | $0pub(crate) fn frobnicate() {} | ||
350 | } | ||
351 | fn main() { | ||
352 | m::frobnicate() {} | ||
353 | } | ||
354 | ``` | ||
355 | |||
302 | ## `flip_binexpr` | 356 | ## `flip_binexpr` |
303 | 357 | ||
304 | Flips operands of a binary expression. | 358 | Flips operands of a binary expression. |
@@ -372,7 +426,7 @@ fn main() { | |||
372 | 426 | ||
373 | // AFTER | 427 | // AFTER |
374 | fn main() { | 428 | fn 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 |
696 | use std::{collections::HashMap}; | 750 | use std::{collections::HashMap}; |
697 | ``` | 751 | ``` |
752 | |||
753 | ## `unwrap_block` | ||
754 | |||
755 | This assist removes if...else, for, while and loop control statements to just keep the body. | ||
756 | |||
757 | ```rust | ||
758 | // BEFORE | ||
759 | fn foo() { | ||
760 | if true {┃ | ||
761 | println!("foo"); | ||
762 | } | ||
763 | } | ||
764 | |||
765 | // AFTER | ||
766 | fn 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. | |||
143 | There are postfix completions, which can be triggered by typing something like | 143 | There 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)] | ||
167 | mod 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 | ||
60 | The 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). | 60 | The server binary is stored in: |
61 | 61 | ||
62 | Note 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 | |||
66 | Note 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 | ||
138 | The `rust-analyzer` binary can be installed from AUR (Arch User Repository): | 142 | The `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 | ||
144 | Install it with AUR helper of your choice, for example: | 147 | Install 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 | |||
159 | 3. Run `lsp` in a Rust buffer. | 162 | 3. Run `lsp` in a Rust buffer. |
160 | 4. (Optionally) bind commands like `lsp-rust-analyzer-join-lines`, `lsp-extend-selection` and `lsp-rust-analyzer-expand-macro` to keys. | 163 | 4. (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 | ||
164 | Prerequisites: You have installed the <<rust-analyzer-language-server-binary,`rust-analyzer` binary>>. | 167 | Prerequisites: 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 | ||
166 | The are several LSP client implementations for vim: | 169 | The 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 | ||
184 | 1. Install LanguageClient-neovim by following the instructions | 187 | 1. 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 | ||
188 | 2. Configure by adding this to your vim/neovim config file (replacing the existing Rust-specific line if it exists): | 191 | 2. 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 | ||
219 | To add the LSP server to https://github.com/dense-analysis/ale[ale]: | 222 | To use the LSP server in https://github.com/dense-analysis/ale[ale]: |
220 | 223 | ||
221 | [source,vim] | 224 | [source,vim] |
222 | ---- | 225 | ---- |
223 | call ale#linter#Define('rust', { | 226 | let 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 | ||
253 | If 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. | 250 | If 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 | ||
257 | Prerequisites: You have installed the <<rust-analyzer-language-server-binary,`rust-analyzer` binary>>. | 254 | Prerequisites: You have installed the <<rust-analyzer-language-server-binary,`rust-analyzer` binary>>. |
258 | 255 | ||