mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-25 20:43:21 +00:00
Don't store generated docs in the repo
This commit is contained in:
parent
636f597a86
commit
5315934d88
8 changed files with 16 additions and 1328 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -8,3 +8,5 @@ crates/*/target
|
||||||
*.iml
|
*.iml
|
||||||
.vscode/settings.json
|
.vscode/settings.json
|
||||||
*.html
|
*.html
|
||||||
|
generated_assists.adoc
|
||||||
|
generated_features.adoc
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,298 +0,0 @@
|
||||||
=== Expand Macro Recursively
|
|
||||||
**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/expand_macro.rs#L15[expand_macro.rs]
|
|
||||||
|
|
||||||
Shows the full macro expansion of the macro at current cursor.
|
|
||||||
|
|
||||||
|===
|
|
||||||
| Editor | Action Name
|
|
||||||
|
|
||||||
| VS Code | **Rust Analyzer: Expand macro recursively**
|
|
||||||
|===
|
|
||||||
|
|
||||||
|
|
||||||
=== Extend Selection
|
|
||||||
**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/extend_selection.rs#L15[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#L17[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#L18[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#L7[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#L6[goto_type_definition.rs]
|
|
||||||
|
|
||||||
Navigates to the type of an identifier.
|
|
||||||
|
|
||||||
|===
|
|
||||||
| Editor | Action Name
|
|
||||||
|
|
||||||
| VS Code | **Go to Type Definition*
|
|
||||||
|===
|
|
||||||
|
|
||||||
|
|
||||||
=== Hover
|
|
||||||
**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/hover.rs#L58[hover.rs]
|
|
||||||
|
|
||||||
Shows additional information, like type of an expression or documentation for definition when "focusing" code.
|
|
||||||
Focusing is usually hovering with a mouse, but can also be triggered with a shortcut.
|
|
||||||
|
|
||||||
|
|
||||||
=== Inlay Hints
|
|
||||||
**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/inlay_hints.rs#L40[inlay_hints.rs]
|
|
||||||
|
|
||||||
rust-analyzer shows additional information inline with the source code.
|
|
||||||
Editors usually render this using read-only virtual text snippets interspersed with code.
|
|
||||||
|
|
||||||
rust-analyzer shows hits for
|
|
||||||
|
|
||||||
* types of local variables
|
|
||||||
* names of function arguments
|
|
||||||
* types of chained expressions
|
|
||||||
|
|
||||||
**Note:** VS Code does not have native support for inlay hints https://github.com/microsoft/vscode/issues/16221[yet] and the hints are implemented using decorations.
|
|
||||||
This approach has limitations, the caret movement and bracket highlighting near the edges of the hint may be weird:
|
|
||||||
https://github.com/rust-analyzer/rust-analyzer/issues/1623[1], https://github.com/rust-analyzer/rust-analyzer/issues/3453[2].
|
|
||||||
|
|
||||||
|===
|
|
||||||
| Editor | Action Name
|
|
||||||
|
|
||||||
| VS Code | **Rust Analyzer: Toggle inlay hints*
|
|
||||||
|===
|
|
||||||
|
|
||||||
|
|
||||||
=== Join Lines
|
|
||||||
**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/join_lines.rs#L12[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**
|
|
||||||
|===
|
|
||||||
|
|
||||||
|
|
||||||
=== Magic Completions
|
|
||||||
**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/completion.rs#L38[completion.rs]
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
When completing a function call, `()` are automatically inserted. If a function
|
|
||||||
takes arguments, the cursor is positioned inside the parenthesis.
|
|
||||||
|
|
||||||
There are postfix completions, which can be triggered by typing something like
|
|
||||||
`foo().if`. The word after `.` determines postfix completion. Possible variants are:
|
|
||||||
|
|
||||||
- `expr.if` -> `if expr {}` or `if let ... {}` for `Option` or `Result`
|
|
||||||
- `expr.match` -> `match expr {}`
|
|
||||||
- `expr.while` -> `while expr {}` or `while let ... {}` for `Option` or `Result`
|
|
||||||
- `expr.ref` -> `&expr`
|
|
||||||
- `expr.refm` -> `&mut expr`
|
|
||||||
- `expr.not` -> `!expr`
|
|
||||||
- `expr.dbg` -> `dbg!(expr)`
|
|
||||||
|
|
||||||
There also snippet completions:
|
|
||||||
|
|
||||||
.Expressions
|
|
||||||
- `pd` -> `println!("{:?}")`
|
|
||||||
- `ppd` -> `println!("{:#?}")`
|
|
||||||
|
|
||||||
.Items
|
|
||||||
- `tfn` -> `#[test] fn f(){}`
|
|
||||||
- `tmod` ->
|
|
||||||
```rust
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_fn() {}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
=== Matching Brace
|
|
||||||
**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/matching_brace.rs#L3[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#L35[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#L12[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#L45[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**
|
|
||||||
|===
|
|
||||||
|
|
||||||
|
|
||||||
=== Semantic Syntax Highlighting
|
|
||||||
**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/syntax_highlighting.rs#L33[syntax_highlighting.rs]
|
|
||||||
|
|
||||||
rust-analyzer highlights the code semantically.
|
|
||||||
For example, `bar` in `foo::Bar` might be colored differently depending on whether `Bar` is an enum or a trait.
|
|
||||||
rust-analyzer does not specify colors directly, instead it assigns tag (like `struct`) and a set of modifiers (like `declaration`) to each token.
|
|
||||||
It's up to the client to map those to specific colors.
|
|
||||||
|
|
||||||
The general rule is that a reference to an entity gets colored the same way as the entity itself.
|
|
||||||
We also give special modifier for `mut` and `&mut` local variables.
|
|
||||||
|
|
||||||
|
|
||||||
=== Show Syntax Tree
|
|
||||||
**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/syntax_tree.rs#L9[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**
|
|
||||||
|===
|
|
||||||
|
|
||||||
|
|
||||||
=== Status
|
|
||||||
**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/status.rs#L27[status.rs]
|
|
||||||
|
|
||||||
Shows internal statistic about memory usage of rust-analyzer.
|
|
||||||
|
|
||||||
|===
|
|
||||||
| Editor | Action Name
|
|
||||||
|
|
||||||
| VS Code | **Rust Analyzer: Status**
|
|
||||||
|===
|
|
||||||
|
|
||||||
|
|
||||||
=== Structural Seach and Replace
|
|
||||||
**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide/src/ssr.rs#L26[ssr.rs]
|
|
||||||
|
|
||||||
Search and replace with named wildcards that will match any expression.
|
|
||||||
The syntax for a structural search replace command is `<search_pattern> ==>> <replace_pattern>`.
|
|
||||||
A `$<name>:expr` placeholder in the search pattern will match any expression and `$<name>` will reference it in the replacement.
|
|
||||||
Available via the command `rust-analyzer.ssr`.
|
|
||||||
|
|
||||||
```rust
|
|
||||||
// Using structural search replace command [foo($a:expr, $b:expr) ==>> ($a).foo($b)]
|
|
||||||
|
|
||||||
// BEFORE
|
|
||||||
String::from(foo(y + 5, z))
|
|
||||||
|
|
||||||
// AFTER
|
|
||||||
String::from((y + 5).foo(z))
|
|
||||||
```
|
|
||||||
|
|
||||||
|===
|
|
||||||
| Editor | Action Name
|
|
||||||
|
|
||||||
| VS Code | **Rust Analyzer: Structural Search Replace**
|
|
||||||
|===
|
|
||||||
|
|
||||||
|
|
||||||
=== Workspace Symbol
|
|
||||||
**Source:** https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ra_ide_db/src/symbol_index.rs#L113[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]
|
|
||||||
|===
|
|
|
@ -18,8 +18,10 @@ use std::{
|
||||||
use crate::{not_bash::fs2, project_root, Result};
|
use crate::{not_bash::fs2, project_root, Result};
|
||||||
|
|
||||||
pub use self::{
|
pub use self::{
|
||||||
gen_assists_docs::generate_assists_docs, gen_feature_docs::generate_feature_docs,
|
gen_assists_docs::{generate_assists_docs, generate_assists_tests},
|
||||||
gen_parser_tests::generate_parser_tests, gen_syntax::generate_syntax,
|
gen_feature_docs::generate_feature_docs,
|
||||||
|
gen_parser_tests::generate_parser_tests,
|
||||||
|
gen_syntax::generate_syntax,
|
||||||
};
|
};
|
||||||
|
|
||||||
const GRAMMAR_DIR: &str = "crates/ra_parser/src/grammar";
|
const GRAMMAR_DIR: &str = "crates/ra_parser/src/grammar";
|
||||||
|
|
|
@ -7,16 +7,17 @@ use crate::{
|
||||||
project_root, rust_files, Result,
|
project_root, rust_files, Result,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pub fn generate_assists_tests(mode: Mode) -> Result<()> {
|
||||||
|
let assists = Assist::collect()?;
|
||||||
|
generate_tests(&assists, mode)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn generate_assists_docs(mode: Mode) -> Result<()> {
|
pub fn generate_assists_docs(mode: Mode) -> Result<()> {
|
||||||
let assists = Assist::collect()?;
|
let assists = Assist::collect()?;
|
||||||
generate_tests(&assists, mode)?;
|
|
||||||
|
|
||||||
let contents = assists.into_iter().map(|it| it.to_string()).collect::<Vec<_>>().join("\n\n");
|
let contents = assists.into_iter().map(|it| it.to_string()).collect::<Vec<_>>().join("\n\n");
|
||||||
let contents = contents.trim().to_string() + "\n";
|
let contents = contents.trim().to_string() + "\n";
|
||||||
let dst = project_root().join("docs/user/generated_assists.adoc");
|
let dst = project_root().join("docs/user/generated_assists.adoc");
|
||||||
codegen::update(&dst, &contents, mode)?;
|
codegen::update(&dst, &contents, mode)
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|
|
@ -160,6 +160,8 @@ pub fn run_release(dry_run: bool) -> Result<()> {
|
||||||
run!("git reset --hard tags/nightly")?;
|
run!("git reset --hard tags/nightly")?;
|
||||||
run!("git push")?;
|
run!("git push")?;
|
||||||
}
|
}
|
||||||
|
codegen::generate_assists_docs(Mode::Overwrite)?;
|
||||||
|
codegen::generate_feature_docs(Mode::Overwrite)?;
|
||||||
|
|
||||||
let website_root = project_root().join("../rust-analyzer.github.io");
|
let website_root = project_root().join("../rust-analyzer.github.io");
|
||||||
let changelog_dir = website_root.join("./thisweek/_posts");
|
let changelog_dir = website_root.join("./thisweek/_posts");
|
||||||
|
|
|
@ -74,6 +74,7 @@ FLAGS:
|
||||||
args.finish()?;
|
args.finish()?;
|
||||||
codegen::generate_syntax(Mode::Overwrite)?;
|
codegen::generate_syntax(Mode::Overwrite)?;
|
||||||
codegen::generate_parser_tests(Mode::Overwrite)?;
|
codegen::generate_parser_tests(Mode::Overwrite)?;
|
||||||
|
codegen::generate_assists_tests(Mode::Overwrite)?;
|
||||||
codegen::generate_assists_docs(Mode::Overwrite)?;
|
codegen::generate_assists_docs(Mode::Overwrite)?;
|
||||||
codegen::generate_feature_docs(Mode::Overwrite)?;
|
codegen::generate_feature_docs(Mode::Overwrite)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -25,18 +25,11 @@ fn generated_tests_are_fresh() {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn generated_assists_are_fresh() {
|
fn generated_assists_are_fresh() {
|
||||||
if let Err(error) = codegen::generate_assists_docs(Mode::Verify) {
|
if let Err(error) = codegen::generate_assists_tests(Mode::Verify) {
|
||||||
panic!("{}. Please update assists by running `cargo xtask codegen`", error);
|
panic!("{}. Please update assists by running `cargo xtask codegen`", error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn generated_features_are_fresh() {
|
|
||||||
if let Err(error) = codegen::generate_feature_docs(Mode::Verify) {
|
|
||||||
panic!("{}. Please update features by running `cargo xtask codegen`", error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn check_code_formatting() {
|
fn check_code_formatting() {
|
||||||
if let Err(error) = run_rustfmt(Mode::Verify) {
|
if let Err(error) = run_rustfmt(Mode::Verify) {
|
||||||
|
|
Loading…
Reference in a new issue