Unnamed repository; edit this file 'description' to name the repository.
Only apply `cfg(test)` for local crates
Don't analyze dependencies with `test`; this should fix various cases where crates use `cfg(not(test))` and so we didn't find things. "Local" here currently means anything that's not from the registry, so anything inside the workspace, but also path dependencies. So this isn't perfect, and users might still need to use `rust-analyzer.cargo.unsetTest` for these in some cases.
Florian Diebold 2022-06-21
parent 427061d · commit 98a5811
-rw-r--r--crates/project-model/src/workspace.rs9
1 files changed, 7 insertions, 2 deletions
diff --git a/crates/project-model/src/workspace.rs b/crates/project-model/src/workspace.rs
index 8982a9904e..052d8fee25 100644
--- a/crates/project-model/src/workspace.rs
+++ b/crates/project-model/src/workspace.rs
@@ -541,8 +541,6 @@ fn cargo_to_crate_graph(
let mut pkg_to_lib_crate = FxHashMap::default();
- // Add test cfg for non-sysroot crates
- cfg_options.insert_atom("test".into());
cfg_options.insert_atom("debug_assertions".into());
let mut pkg_crates = FxHashMap::default();
@@ -558,6 +556,13 @@ fn cargo_to_crate_graph(
CfgOverrides::Selective(cfg_overrides) => cfg_overrides.get(&cargo[pkg].name),
};
+ // Add test cfg for local crates
+ if cargo[pkg].is_local {
+ replaced_cfg_options = cfg_options.clone();
+ replaced_cfg_options.insert_atom("test".into());
+ cfg_options = &replaced_cfg_options;
+ }
+
if let Some(overrides) = overrides {
// FIXME: this is sort of a hack to deal with #![cfg(not(test))] vanishing such as seen
// in ed25519_dalek (#7243), and libcore (#9203) (although you only hit that one while