2020-02-21 13:53:30 -06:00
This document is an index of features that the rust-analyzer language server
2019-03-20 05:05:03 -05:00
provides. Shortcuts are for the default VS Code layout. If there's no shortcut,
you can use < kbd > Ctrl+Shift+P< / kbd > to search for the corresponding action.
2019-03-20 04:17:12 -05:00
2019-04-21 04:52:54 -05:00
### Commands <kbd>ctrl+shift+p</kbd>
2019-03-20 04:17:12 -05:00
2020-05-24 19:47:33 -05:00
#### Toggle inlay hints
Toggle inlay hints view for the current workspace.
It is recommended to assign a shortcut for this command to quickly turn off
inlay hints when they prevent you from reading/writing the code.
2019-03-20 05:19:46 -05:00
### Magic Completions
In addition to usual reference completion, rust-analyzer provides some ✨magic✨
completions as well:
Keywords like `if` , `else` `while` , `loop` are completed with braces, and cursor
is placed at the appropriate position. Even though `if` is easy to type, you
still want to complete it, to get ` { }` for free! `return` is inserted with a
space or `;` depending on the return type of the function.
2020-02-21 13:53:30 -06:00
When completing a function call, `()` are automatically inserted. If a function
takes arguments, the cursor is positioned inside the parenthesis.
2019-03-20 05:19:46 -05:00
2020-04-29 15:00:52 -05:00
There are postfix completions, which can be triggered by typing something like
`foo().if` . The word after `.` determines postfix completion. Possible variants are:
2019-03-20 05:19:46 -05:00
2020-05-12 02:46:28 -05:00
- `expr.if` -> `if expr {}` or `if let ... {}` for `Option` or `Result`
2019-03-20 05:19:46 -05:00
- `expr.match` -> `match expr {}`
2020-05-12 02:46:28 -05:00
- `expr.while` -> `while expr {}` or `while let ... {}` for `Option` or `Result`
2019-03-20 05:19:46 -05:00
- `expr.ref` -> `&expr`
- `expr.refm` -> `&mut expr`
- `expr.not` -> `!expr`
- `expr.dbg` -> `dbg!(expr)`
There also snippet completions:
#### Inside Expressions
- `pd` -> `println!("{:?}")`
- `ppd` -> `println!("{:#?}")`
#### Inside Modules
- `tfn` -> `#[test] fn f(){}`
2020-05-12 02:46:28 -05:00
- `tmod` ->
```rust
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_fn() {}
}
```
2019-03-20 05:19:46 -05:00
2020-02-21 13:53:30 -06:00
### Code Highlighting
2019-05-27 04:26:15 -05:00
Experimental feature to let rust-analyzer highlight Rust code instead of using the
default highlighter.
2020-02-21 13:53:30 -06:00
#### Rainbow Highlighting
2019-05-27 04:26:15 -05:00
Experimental feature that, given code highlighting using rust-analyzer is
active, will pick unique colors for identifiers.
2020-02-22 01:23:03 -06:00
### Code hints
2020-02-22 04:51:08 -06:00
Rust-analyzer has two types of hints to show the information about the code:
2020-02-22 01:23:03 -06:00
* hover hints, appearing on hover on any element.
2020-02-22 04:51:08 -06:00
These contain extended information on the hovered language item.
2020-02-22 01:23:03 -06:00
* inlay hints, shown near the element hinted directly in the editor.
Two types of inlay hints are displayed currently:
* type hints, displaying the minimal information on the type of the expression (if the information is available)
2020-03-23 19:10:03 -05:00
* method chaining hints, type information for multi-line method chains
2020-02-22 01:23:03 -06:00
* parameter name hints, displaying the names of the parameters in the corresponding methods
#### VS Code
In VS Code, the following settings can be used to configure the inlay hints:
2020-03-12 12:04:11 -05:00
* `rust-analyzer.inlayHints.typeHints` - enable hints for inferred types.
2020-03-23 19:10:03 -05:00
* `rust-analyzer.inlayHints.chainingHints` - enable hints for inferred types on method chains.
2020-03-12 12:04:11 -05:00
* `rust-analyzer.inlayHints.parameterHints` - enable hints for function parameters.
* `rust-analyzer.inlayHints.maxLength` — shortens the hints if their length exceeds the value specified. If no value is specified (`null`), no shortening is applied.
2020-02-22 01:23:03 -06:00
2020-02-22 04:51:08 -06:00
**Note:** VS Code does not have native support for inlay hints [yet ](https://github.com/microsoft/vscode/issues/16221 ) and the hints are implemented using decorations.
2020-03-05 02:29:46 -06:00
This approach has limitations, the caret movement and bracket highlighting near the edges of the hint may be weird:
[1 ](https://github.com/rust-analyzer/rust-analyzer/issues/1623 ), [2 ](https://github.com/rust-analyzer/rust-analyzer/issues/3453 ).