Skip to content

Commit 1636f61

Browse files
Merge #10005
10005: Extend `CargoConfig.unset_test_crates` r=matklad a=regexident This is to allow for efficiently disabling `#[cfg(test)]` on all crates (by passing `unset_test_crates: UnsetTestCrates::All`) without having to first load the crate graph, when using rust-analyzer as a library. (FYI: The change doesn't seem to be covered by any existing tests.) Co-authored-by: Vincent Esche <[email protected]>
2 parents d250aa7 + 74880a1 commit 1636f61

File tree

5 files changed

+972
-15
lines changed

5 files changed

+972
-15
lines changed

crates/project_model/src/cargo_workspace.rs

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,20 @@ pub enum RustcSource {
5757
Discover,
5858
}
5959

60+
/// Crates to disable `#[cfg(test)]` on.
61+
#[derive(Clone, Debug, PartialEq, Eq)]
62+
pub enum UnsetTestCrates {
63+
None,
64+
Only(Vec<String>),
65+
All,
66+
}
67+
68+
impl Default for UnsetTestCrates {
69+
fn default() -> Self {
70+
Self::None
71+
}
72+
}
73+
6074
#[derive(Default, Clone, Debug, PartialEq, Eq)]
6175
pub struct CargoConfig {
6276
/// Do not activate the `default` feature.
@@ -80,20 +94,29 @@ pub struct CargoConfig {
8094
pub rustc_source: Option<RustcSource>,
8195

8296
/// crates to disable `#[cfg(test)]` on
83-
pub unset_test_crates: Vec<String>,
97+
pub unset_test_crates: UnsetTestCrates,
8498

8599
pub wrap_rustc_in_build_scripts: bool,
86100
}
87101

88102
impl CargoConfig {
89103
pub fn cfg_overrides(&self) -> CfgOverrides {
90-
self.unset_test_crates
91-
.iter()
92-
.cloned()
93-
.zip(iter::repeat_with(|| {
94-
cfg::CfgDiff::new(Vec::new(), vec![cfg::CfgAtom::Flag("test".into())]).unwrap()
95-
}))
96-
.collect()
104+
match &self.unset_test_crates {
105+
UnsetTestCrates::None => CfgOverrides::Selective(iter::empty().collect()),
106+
UnsetTestCrates::Only(unset_test_crates) => CfgOverrides::Selective(
107+
unset_test_crates
108+
.iter()
109+
.map(|name| name.clone())
110+
.zip(iter::repeat_with(|| {
111+
cfg::CfgDiff::new(Vec::new(), vec![cfg::CfgAtom::Flag("test".into())])
112+
.unwrap()
113+
}))
114+
.collect(),
115+
),
116+
UnsetTestCrates::All => CfgOverrides::Wildcard(
117+
cfg::CfgDiff::new(Vec::new(), vec![cfg::CfgAtom::Flag("test".into())]).unwrap(),
118+
),
119+
}
97120
}
98121
}
99122

crates/project_model/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ pub use crate::{
4242
build_scripts::WorkspaceBuildScripts,
4343
cargo_workspace::{
4444
CargoConfig, CargoWorkspace, Package, PackageData, PackageDependency, RustcSource, Target,
45-
TargetData, TargetKind,
45+
TargetData, TargetKind, UnsetTestCrates,
4646
},
4747
manifest_path::ManifestPath,
4848
project_json::{ProjectJson, ProjectJsonData},

0 commit comments

Comments
 (0)