Skip to content

Commit 42d4a17

Browse files
Provide an config option to not set `cfg(test)
1 parent 08c7bbc commit 42d4a17

File tree

17 files changed

+135
-38
lines changed

17 files changed

+135
-38
lines changed

crates/load-cargo/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ pub struct LoadCargoConfig {
3030
pub load_out_dirs_from_check: bool,
3131
pub with_proc_macro_server: ProcMacroServerChoice,
3232
pub prefill_caches: bool,
33+
pub set_test: bool,
3334
}
3435

3536
#[derive(Debug, Clone, PartialEq, Eq)]
@@ -99,6 +100,7 @@ pub fn load_workspace(
99100
vfs.file_id(&path)
100101
},
101102
extra_env,
103+
load_config.set_test,
102104
);
103105
let proc_macros = {
104106
let proc_macro_server = match &proc_macro_server {
@@ -513,6 +515,7 @@ mod tests {
513515
load_out_dirs_from_check: false,
514516
with_proc_macro_server: ProcMacroServerChoice::None,
515517
prefill_caches: false,
518+
set_test: true,
516519
};
517520
let (db, _vfs, _proc_macro) =
518521
load_workspace_at(path, &cargo_config, &load_cargo_config, &|_| {}).unwrap();

crates/project-model/src/tests.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ fn load_cargo_with_fake_sysroot(
7575
}
7676
},
7777
&Default::default(),
78+
true,
7879
)
7980
}
8081

@@ -169,6 +170,7 @@ fn to_crate_graph(project_workspace: ProjectWorkspace) -> (CrateGraph, ProcMacro
169170
}
170171
},
171172
&Default::default(),
173+
true,
172174
)
173175
}
174176

@@ -318,5 +320,6 @@ fn smoke_test_real_sysroot_cargo() {
318320
}
319321
},
320322
&Default::default(),
323+
true,
321324
);
322325
}

crates/project-model/src/workspace.rs

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -716,6 +716,7 @@ impl ProjectWorkspace {
716716
&self,
717717
load: FileLoader<'_>,
718718
extra_env: &FxHashMap<String, String>,
719+
set_test: bool,
719720
) -> (CrateGraph, ProcMacroPaths) {
720721
let _p = tracing::info_span!("ProjectWorkspace::to_crate_graph").entered();
721722

@@ -729,6 +730,7 @@ impl ProjectWorkspace {
729730
sysroot,
730731
extra_env,
731732
cfg_overrides,
733+
set_test,
732734
),
733735
sysroot,
734736
),
@@ -747,6 +749,7 @@ impl ProjectWorkspace {
747749
rustc_cfg.clone(),
748750
cfg_overrides,
749751
build_scripts,
752+
set_test,
750753
),
751754
sysroot,
752755
),
@@ -760,6 +763,7 @@ impl ProjectWorkspace {
760763
rustc_cfg.clone(),
761764
cfg_overrides,
762765
build_scripts,
766+
set_test,
763767
)
764768
} else {
765769
detached_file_to_crate_graph(
@@ -768,6 +772,7 @@ impl ProjectWorkspace {
768772
file,
769773
sysroot,
770774
cfg_overrides,
775+
set_test,
771776
)
772777
},
773778
sysroot,
@@ -858,11 +863,12 @@ fn project_json_to_crate_graph(
858863
sysroot: &Sysroot,
859864
extra_env: &FxHashMap<String, String>,
860865
override_cfg: &CfgOverrides,
866+
set_test: bool,
861867
) -> (CrateGraph, ProcMacroPaths) {
862868
let mut res = (CrateGraph::default(), ProcMacroPaths::default());
863869
let (crate_graph, proc_macros) = &mut res;
864870
let (public_deps, libproc_macro) =
865-
sysroot_to_crate_graph(crate_graph, sysroot, rustc_cfg.clone(), load);
871+
sysroot_to_crate_graph(crate_graph, sysroot, rustc_cfg.clone(), load, set_test);
866872

867873
let r_a_cfg_flag = CfgAtom::Flag(sym::rust_analyzer.clone());
868874
let mut cfg_cache: FxHashMap<&str, Vec<CfgAtom>> = FxHashMap::default();
@@ -975,13 +981,14 @@ fn cargo_to_crate_graph(
975981
rustc_cfg: Vec<CfgAtom>,
976982
override_cfg: &CfgOverrides,
977983
build_scripts: &WorkspaceBuildScripts,
984+
set_test: bool,
978985
) -> (CrateGraph, ProcMacroPaths) {
979986
let _p = tracing::info_span!("cargo_to_crate_graph").entered();
980987
let mut res = (CrateGraph::default(), ProcMacroPaths::default());
981988
let crate_graph = &mut res.0;
982989
let proc_macros = &mut res.1;
983990
let (public_deps, libproc_macro) =
984-
sysroot_to_crate_graph(crate_graph, sysroot, rustc_cfg.clone(), load);
991+
sysroot_to_crate_graph(crate_graph, sysroot, rustc_cfg.clone(), load, set_test);
985992

986993
let cfg_options = CfgOptions::from_iter(rustc_cfg);
987994

@@ -999,8 +1006,10 @@ fn cargo_to_crate_graph(
9991006
let mut cfg_options = cfg_options.clone();
10001007

10011008
if cargo[pkg].is_local {
1002-
// Add test cfg for local crates
1003-
cfg_options.insert_atom(sym::test.clone());
1009+
if set_test {
1010+
// Add test cfg for local crates
1011+
cfg_options.insert_atom(sym::test.clone());
1012+
}
10041013
cfg_options.insert_atom(sym::rust_analyzer.clone());
10051014
}
10061015

@@ -1161,14 +1170,17 @@ fn detached_file_to_crate_graph(
11611170
detached_file: &ManifestPath,
11621171
sysroot: &Sysroot,
11631172
override_cfg: &CfgOverrides,
1173+
set_test: bool,
11641174
) -> (CrateGraph, ProcMacroPaths) {
11651175
let _p = tracing::info_span!("detached_file_to_crate_graph").entered();
11661176
let mut crate_graph = CrateGraph::default();
11671177
let (public_deps, _libproc_macro) =
1168-
sysroot_to_crate_graph(&mut crate_graph, sysroot, rustc_cfg.clone(), load);
1178+
sysroot_to_crate_graph(&mut crate_graph, sysroot, rustc_cfg.clone(), load, set_test);
11691179

11701180
let mut cfg_options = CfgOptions::from_iter(rustc_cfg);
1171-
cfg_options.insert_atom(sym::test.clone());
1181+
if set_test {
1182+
cfg_options.insert_atom(sym::test.clone());
1183+
}
11721184
cfg_options.insert_atom(sym::rust_analyzer.clone());
11731185
override_cfg.apply(&mut cfg_options, "");
11741186
let cfg_options = Arc::new(cfg_options);
@@ -1392,6 +1404,7 @@ fn sysroot_to_crate_graph(
13921404
sysroot: &Sysroot,
13931405
rustc_cfg: Vec<CfgAtom>,
13941406
load: FileLoader<'_>,
1407+
set_test: bool,
13951408
) -> (SysrootPublicDeps, Option<CrateId>) {
13961409
let _p = tracing::info_span!("sysroot_to_crate_graph").entered();
13971410
match sysroot.mode() {
@@ -1414,6 +1427,7 @@ fn sysroot_to_crate_graph(
14141427
..Default::default()
14151428
},
14161429
&WorkspaceBuildScripts::default(),
1430+
set_test,
14171431
);
14181432

14191433
let mut pub_deps = vec![];

crates/rust-analyzer/src/cli/analysis_stats.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ impl flags::AnalysisStats {
6464
true => None,
6565
false => Some(RustLibSource::Discover),
6666
},
67+
all_targets: true,
6768
..Default::default()
6869
};
6970
let no_progress = &|_| ();
@@ -79,6 +80,7 @@ impl flags::AnalysisStats {
7980
load_out_dirs_from_check: !self.disable_build_scripts,
8081
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
8182
prefill_caches: false,
83+
set_test: true,
8284
};
8385

8486
let build_scripts_time = if self.disable_build_scripts {

crates/rust-analyzer/src/cli/diagnostics.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ impl flags::Diagnostics {
3636
load_out_dirs_from_check: !self.disable_build_scripts,
3737
with_proc_macro_server,
3838
prefill_caches: false,
39+
// We don't pass `--all-targets` so we also set `cfg(test)` to false.
40+
set_test: false,
3941
};
4042
let (db, _vfs, _proc_macro) =
4143
load_workspace_at(&self.path, &cargo_config, &load_cargo_config, &|_| {})?;

crates/rust-analyzer/src/cli/lsif.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,13 +275,17 @@ impl flags::Lsif {
275275
pub fn run(self) -> anyhow::Result<()> {
276276
eprintln!("Generating LSIF started...");
277277
let now = Instant::now();
278-
let cargo_config =
279-
&CargoConfig { sysroot: Some(RustLibSource::Discover), ..Default::default() };
278+
let cargo_config = &CargoConfig {
279+
sysroot: Some(RustLibSource::Discover),
280+
all_targets: true,
281+
..Default::default()
282+
};
280283
let no_progress = &|_| ();
281284
let load_cargo_config = LoadCargoConfig {
282285
load_out_dirs_from_check: true,
283286
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
284287
prefill_caches: false,
288+
set_test: true,
285289
};
286290
let path = AbsPathBuf::assert_utf8(env::current_dir()?.join(self.path));
287291
let root = ProjectManifest::discover_single(&path)?;

crates/rust-analyzer/src/cli/run_tests.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,16 @@ use crate::cli::{flags, full_name_of_item, Result};
1313

1414
impl flags::RunTests {
1515
pub fn run(self) -> Result<()> {
16-
let cargo_config =
17-
CargoConfig { sysroot: Some(RustLibSource::Discover), ..Default::default() };
16+
let cargo_config = CargoConfig {
17+
sysroot: Some(RustLibSource::Discover),
18+
all_targets: true,
19+
..Default::default()
20+
};
1821
let load_cargo_config = LoadCargoConfig {
1922
load_out_dirs_from_check: true,
2023
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
2124
prefill_caches: false,
25+
set_test: true,
2226
};
2327
let (ref db, _vfs, _proc_macro) =
2428
load_workspace_at(&self.path, &cargo_config, &load_cargo_config, &|_| {})?;

crates/rust-analyzer/src/cli/rustc_tests.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,11 @@ impl Tester {
6767
path.push("ra-rustc-test.rs");
6868
let tmp_file = AbsPathBuf::try_from(Utf8PathBuf::from_path_buf(path).unwrap()).unwrap();
6969
std::fs::write(&tmp_file, "")?;
70-
let cargo_config =
71-
CargoConfig { sysroot: Some(RustLibSource::Discover), ..Default::default() };
70+
let cargo_config = CargoConfig {
71+
sysroot: Some(RustLibSource::Discover),
72+
all_targets: true,
73+
..Default::default()
74+
};
7275

7376
let sysroot = Sysroot::discover(tmp_file.parent().unwrap(), &cargo_config.extra_env);
7477
let data_layout = target_data_layout::get(
@@ -93,6 +96,7 @@ impl Tester {
9396
load_out_dirs_from_check: false,
9497
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
9598
prefill_caches: false,
99+
set_test: true,
96100
};
97101
let (db, _vfs, _proc_macro) =
98102
load_workspace(workspace, &cargo_config.extra_env, &load_cargo_config)?;

crates/rust-analyzer/src/cli/scip.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,6 @@ impl flags::Scip {
2424
let now = Instant::now();
2525

2626
let no_progress = &|s| (eprintln!("rust-analyzer: Loading {s}"));
27-
let load_cargo_config = LoadCargoConfig {
28-
load_out_dirs_from_check: true,
29-
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
30-
prefill_caches: true,
31-
};
3227
let root =
3328
vfs::AbsPathBuf::assert_utf8(std::env::current_dir()?.join(&self.path)).normalize();
3429

@@ -51,6 +46,12 @@ impl flags::Scip {
5146
// FIXME @alibektas : What happens to errors without logging?
5247
error!(?error_sink, "Config Error(s)");
5348
}
49+
let load_cargo_config = LoadCargoConfig {
50+
load_out_dirs_from_check: true,
51+
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
52+
prefill_caches: true,
53+
set_test: config.cfg_set_test(None),
54+
};
5455
let cargo_config = config.cargo(None);
5556
let (db, vfs, _) = load_workspace_at(
5657
root.as_path().as_ref(),

crates/rust-analyzer/src/cli/ssr.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,16 @@ use crate::cli::flags;
1010

1111
impl flags::Ssr {
1212
pub fn run(self) -> anyhow::Result<()> {
13-
let cargo_config =
14-
CargoConfig { sysroot: Some(RustLibSource::Discover), ..Default::default() };
13+
let cargo_config = CargoConfig {
14+
sysroot: Some(RustLibSource::Discover),
15+
all_targets: true,
16+
..Default::default()
17+
};
1518
let load_cargo_config = LoadCargoConfig {
1619
load_out_dirs_from_check: true,
1720
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
1821
prefill_caches: false,
22+
set_test: true,
1923
};
2024
let (ref db, vfs, _proc_macro) = load_workspace_at(
2125
&std::env::current_dir()?,
@@ -47,11 +51,12 @@ impl flags::Search {
4751
pub fn run(self) -> anyhow::Result<()> {
4852
use ide_db::base_db::SourceRootDatabase;
4953
use ide_db::symbol_index::SymbolsDatabase;
50-
let cargo_config = CargoConfig::default();
54+
let cargo_config = CargoConfig { all_targets: true, ..CargoConfig::default() };
5155
let load_cargo_config = LoadCargoConfig {
5256
load_out_dirs_from_check: true,
5357
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
5458
prefill_caches: false,
59+
set_test: true,
5560
};
5661
let (ref db, _vfs, _proc_macro) = load_workspace_at(
5762
&std::env::current_dir()?,

crates/rust-analyzer/src/config.rs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -530,7 +530,9 @@ config_data! {
530530
config_data! {
531531
workspace: struct WorkspaceDefaultConfigData <- WorkspaceConfigInput -> {
532532
/// Pass `--all-targets` to cargo invocation.
533-
cargo_allTargets: bool = true,
533+
///
534+
/// If you leave this unset but set `cfg.setTest` to `false`, this will also default to false.
535+
cargo_allTargets: Option<bool> = None,
534536
/// Automatically refresh project info via `cargo metadata` on
535537
/// `Cargo.toml` or `.cargo/config.toml` changes.
536538
cargo_autoreload: bool = true,
@@ -610,6 +612,9 @@ config_data! {
610612
/// set to a path relative to the workspace to use that path.
611613
cargo_targetDir | rust_analyzerTargetDir: Option<TargetDirectory> = None,
612614

615+
/// Set `cfg(test)` for local crates. Defaults to true.
616+
cfg_setTest: bool = true,
617+
613618
/// Run the check command for diagnostics on save.
614619
checkOnSave | checkOnSave_enable: bool = true,
615620

@@ -731,7 +736,6 @@ config_data! {
731736
workspace_symbol_search_limit: usize = 128,
732737
/// Workspace symbol search scope.
733738
workspace_symbol_search_scope: WorkspaceSymbolSearchScopeDef = WorkspaceSymbolSearchScopeDef::Workspace,
734-
735739
}
736740
}
737741

@@ -1856,7 +1860,7 @@ impl Config {
18561860
self.cargo_sysrootSrc(source_root).as_ref().map(|sysroot| self.root_path.join(sysroot));
18571861

18581862
CargoConfig {
1859-
all_targets: *self.cargo_allTargets(source_root),
1863+
all_targets: self.cargo_all_targets(source_root),
18601864
features: match &self.cargo_features(source_root) {
18611865
CargoFeaturesDef::All => CargoFeatures::All,
18621866
CargoFeaturesDef::Selected(features) => CargoFeatures::Selected {
@@ -1897,6 +1901,14 @@ impl Config {
18971901
}
18981902
}
18991903

1904+
fn cargo_all_targets(&self, source_root: Option<SourceRootId>) -> bool {
1905+
self.cargo_allTargets(source_root).unwrap_or_else(|| *self.cfg_setTest(source_root))
1906+
}
1907+
1908+
pub fn cfg_set_test(&self, source_root: Option<SourceRootId>) -> bool {
1909+
*self.cfg_setTest(source_root)
1910+
}
1911+
19001912
pub fn rustfmt(&self, source_root_id: Option<SourceRootId>) -> RustfmtConfig {
19011913
match &self.rustfmt_overrideCommand(source_root_id) {
19021914
Some(args) if !args.is_empty() => {
@@ -1964,7 +1976,7 @@ impl Config {
19641976
}),
19651977
all_targets: self
19661978
.check_allTargets(source_root)
1967-
.unwrap_or(*self.cargo_allTargets(source_root)),
1979+
.unwrap_or(self.cargo_all_targets(source_root)),
19681980
no_default_features: self
19691981
.check_noDefaultFeatures(source_root)
19701982
.unwrap_or(*self.cargo_noDefaultFeatures(source_root)),

0 commit comments

Comments
 (0)