rust/crates/rust-analyzer/src
bors[bot] d57c9f7980
Merge #7891
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>
2021-03-08 16:51:20 +00:00
..
bin ⬆️ xflags 2021-03-07 11:12:59 +03:00
cli Revert "Support disabling rustc build scripts" 2021-03-08 16:37:52 +00:00
diagnostics Bump cargo_metadata 2021-03-02 14:27:29 +02:00
caps.rs Start LSP 3.17 support 2021-02-14 14:51:29 -05:00
cargo_target_spec.rs More maintainable config 2021-01-06 15:39:28 +03:00
cli.rs Split pub fn cargo_load into pub fn load_workspace_at and pub fn load_workspace 2021-02-16 16:37:52 +01:00
config.rs Merge #7891 2021-03-08 16:51:20 +00:00
diagnostics.rs Avoid transmitting unchanged diagnostics 2021-02-17 12:45:17 +01:00
diff.rs Split textDocument/formatting TextEdit with diff 2020-12-31 15:33:20 +01:00
dispatch.rs Respond with JSON-RPC error if we failed to deserialize request 2020-10-30 19:57:52 +01:00
document.rs Latest LSP 3.16 protocol 2020-11-16 15:10:13 -05:00
from_proto.rs Fix bitrotted module name 2021-02-16 19:17:32 +03:00
global_state.rs Fix bitrotted module name 2021-02-16 19:17:32 +03:00
handlers.rs Fix bitrotted module name 2021-02-16 19:17:32 +03:00
lib.rs Fix bitrotted module name 2021-02-16 19:17:32 +03:00
line_index.rs Fix bitrotted module name 2021-02-16 19:17:32 +03:00
lsp_ext.rs Enable offset-encoding capability 2021-02-16 19:17:32 +03:00
lsp_utils.rs Fix bitrotted module name 2021-02-16 19:17:32 +03:00
main_loop.rs Migrate to user-centric config name for cargo check stuff 2021-03-04 15:38:53 +03:00
markdown.rs Fixed typos in tests 2021-01-09 15:41:29 +01:00
op_queue.rs Async Loading outdir and proc-macro 2021-01-29 01:04:14 +08:00
reload.rs Revert "Support disabling rustc build scripts" 2021-03-08 16:37:52 +00:00
request_metrics.rs Flatten module hierarchy 2020-06-24 18:57:30 +02:00
semantic_tokens.rs Add a semantic token type for char literals 2021-02-05 23:46:39 +00:00
thread_pool.rs Improve prime_caches and display its progress 2020-10-12 13:35:01 +02:00
to_proto.rs Make group imports configurable 2021-03-07 10:15:17 +02:00