=== Extend Selection **Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/extend_selection.rs[extend_selection.rs] Extends the current selection to the encompassing syntactic construct (expression, statement, item, module, etc). It works with multiple cursors. |=== | Editor | Shortcut | VS Code | kbd:[Ctrl+Shift+→] |=== === File Structure **Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/display/structure.rs[structure.rs] Provides a tree of the symbols defined in the file. Can be used to * fuzzy search symbol in a file (super useful) * draw breadcrumbs to describe the context around the cursor * draw outline of the file |=== | Editor | Shortcut | VS Code | kbd:[Ctrl+Shift+O] |=== === Go to Definition **Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/goto_definition.rs[goto_definition.rs] Navigates to the definition of an identifier. |=== | Editor | Shortcut | VS Code | kbd:[F12] |=== === Go to Implementation **Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/goto_implementation.rs[goto_implementation.rs] Navigates to the impl block of structs, enums or traits. Also implemented as a code lens. |=== | Editor | Shortcut | VS Code | kbd:[Ctrl+F12] |=== === Go to Type Definition **Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/goto_type_definition.rs[goto_type_definition.rs] Navigates to the type of an identifier. |=== | Editor | Action Name | VS Code | **Go to Type Definition* |=== === Join Lines **Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/join_lines.rs[join_lines.rs] Join selected lines into one, smartly fixing up whitespace, trailing commas, and braces. |=== | Editor | Action Name | VS Code | **Rust Analyzer: Join lines** |=== === Matching Brace **Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/matching_brace.rs[matching_brace.rs] If the cursor is on any brace (`<>(){}[]`) which is a part of a brace-pair, moves cursor to the matching brace. It uses the actual parser to determine braces, so it won't confuse generics with comparisons. |=== | Editor | Action Name | VS Code | **Rust Analyzer: Find matching brace** |=== === On Typing Assists **Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/typing.rs[typing.rs] Some features trigger on typing certain characters: - typing `let =` tries to smartly add `;` if `=` is followed by an existing expression - Enter inside comments automatically inserts `///` - typing `.` in a chain method call auto-indents === Parent Module **Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/parent_module.rs[parent_module.rs] Navigates to the parent module of the current module. |=== | Editor | Action Name | VS Code | **Rust Analyzer: Locate parent module** |=== === Run **Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/runnables.rs[runnables.rs] Shows a popup suggesting to run a test/benchmark/binary **at the current cursor location**. Super useful for repeatedly running just a single test. Do bind this to a shortcut! |=== | Editor | Action Name | VS Code | **Rust Analyzer: Run** |=== === Show Syntax Tree **Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/syntax_tree.rs[syntax_tree.rs] Shows the parse tree of the current file. It exists mostly for debugging rust-analyzer itself. |=== | Editor | Action Name | VS Code | **Rust Analyzer: Show Syntax Tree** |=== === Workspace Symbol **Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide_db/src/symbol_index.rs[symbol_index.rs] Uses fuzzy-search to find types, modules and functions by name across your project and dependencies. This is **the** most useful feature, which improves code navigation tremendously. It mostly works on top of the built-in LSP functionality, however `#` and `*` symbols can be used to narrow down the search. Specifically, - `Foo` searches for `Foo` type in the current workspace - `foo#` searches for `foo` function in the current workspace - `Foo*` searches for `Foo` type among dependencies, including `stdlib` - `foo#*` searches for `foo` function among dependencies That is, `#` switches from "types" to all symbols, `*` switches from the current workspace to dependencies. |=== | Editor | Shortcut | VS Code | kbd:[Ctrl+T] |===