d57c9f7980
7891: Improve handling of rustc_private r=matklad a=DJMcNab This PR changes how `rust-analyzer` handles `rustc_private`. In particular, packages now must opt-in to using `rustc_private` in `Cargo.toml`, by adding: ```toml [package.metadata.rust-analyzer] rustc_private=true ``` This means that depending on crates which also use `rustc_private` will be significantly improved, since their dependencies on the `rustc_private` crates will be resolved properly. A similar approach could be used in #6714 to allow annotating that your package uses the `test` crate, although I have not yet handled that in this PR. Additionally, we now only index the crates which are transitive dependencies of `rustc_driver` in the `rustcSource` directory. This should not cause any change in behaviour when using `rustcSource: "discover"`, as the source used then will only be a partial clone. However, if `rustcSource` pointing at a local checkout of rustc, this should significantly improve the memory usage and lower indexing time. This is because we avoids indexing all crates in `src/tools/`, which includes `rust-analyzer` itself. Furthermore, we also prefer named dependencies over dependencies from `rustcSource`. This ensures that feature resolution for crates which are depended on by both `rustc` and your crate uses the correct set for analysing your crate. See also [introductory zulip stream](https://rust-lang.zulipchat.com/#narrow/stream/185405-t-compiler.2Fwg-rls-2.2E0/topic/Fixed.20crate.20graphs.20and.20optional.20builtin.20crates/near/229086673) I have tested this in [priroda](https://github.com/oli-obk/priroda/), and it provides a significant improvement to the development experience (once I give `miri` the required data in `Cargo.toml`) Todo: - [ ] Documentation This is ready to review, and I will add documentation if this would be accepted (or if I get time to do so anyway) Co-authored-by: Daniel McNab <36049421+DJMcNab@users.noreply.github.com> |
||
---|---|---|
.. | ||
src | ||
tests | ||
.eslintignore | ||
.eslintrc.js | ||
.gitignore | ||
.vscodeignore | ||
icon.png | ||
language-configuration.json | ||
package-lock.json | ||
package.json | ||
ra_syntax_tree.tmGrammar.json | ||
README.md | ||
rollup.config.js | ||
tsconfig.json |
rust-analyzer
Provides support for rust-analyzer: novel LSP server for the Rust programming language.
Note the extension may cause conflicts with the official Rust extension. It is recommended to disable the Rust extension when using the rust-analyzer extension.
Note the project is in alpha status: it is already useful in practice, but can't be considered stable.
Sponsor
Work on rust-analyzer is sponsored by
If you want to sponsor:
Features
- code completion, imports insertion
- go to definition, implementation, type definition
- find all references, workspace symbol search, rename
- types and documentation on hover
- inlay hints
- semantic syntax highlighting
- a lot of assist(code actions)
- apply suggestions from errors
- ... and many more, checkout the manual to see them all
Quick start
- Install rustup
- Install the rust-analyzer extension
Configuration
This extension provides configurations through VSCode's configuration settings. All the configurations are under rust-analyzer.*
.
See https://rust-analyzer.github.io/manual.html#vs-code-2 for more information on VSCode specific configurations.
Communication
For usage and troubleshooting requests, please use "IDEs and Editors" category of the Rust forum:
https://users.rust-lang.org/c/ide/14
Documentation
See https://rust-analyzer.github.io/ for more information.