Skip to content

Commit 923cb99

Browse files
Provide an config option to not set cfg(test)
1 parent 46fe025 commit 923cb99

File tree

16 files changed

+73
-15
lines changed

16 files changed

+73
-15
lines changed

src/tools/rust-analyzer/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 {
@@ -531,6 +533,7 @@ mod tests {
531533
load_out_dirs_from_check: false,
532534
with_proc_macro_server: ProcMacroServerChoice::None,
533535
prefill_caches: false,
536+
set_test: true,
534537
};
535538
let (db, _vfs, _proc_macro) =
536539
load_workspace_at(path, &cargo_config, &load_cargo_config, &|_| {}).unwrap();

src/tools/rust-analyzer/crates/project-model/src/tests.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ fn to_crate_graph(project_workspace: ProjectWorkspace) -> (CrateGraph, ProcMacro
136136
}
137137
},
138138
&Default::default(),
139+
true,
139140
)
140141
}
141142

@@ -257,5 +258,6 @@ fn smoke_test_real_sysroot_cargo() {
257258
}
258259
},
259260
&Default::default(),
261+
true,
260262
);
261263
}

src/tools/rust-analyzer/crates/project-model/src/workspace.rs

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -728,6 +728,7 @@ impl ProjectWorkspace {
728728
&self,
729729
load: FileLoader<'_>,
730730
extra_env: &FxHashMap<String, String>,
731+
set_test: bool,
731732
) -> (CrateGraph, ProcMacroPaths) {
732733
let _p = tracing::info_span!("ProjectWorkspace::to_crate_graph").entered();
733734

@@ -741,6 +742,7 @@ impl ProjectWorkspace {
741742
sysroot,
742743
extra_env,
743744
cfg_overrides,
745+
set_test,
744746
),
745747
sysroot,
746748
),
@@ -759,6 +761,7 @@ impl ProjectWorkspace {
759761
rustc_cfg.clone(),
760762
cfg_overrides,
761763
build_scripts,
764+
set_test,
762765
),
763766
sysroot,
764767
),
@@ -772,6 +775,7 @@ impl ProjectWorkspace {
772775
rustc_cfg.clone(),
773776
cfg_overrides,
774777
build_scripts,
778+
set_test,
775779
)
776780
} else {
777781
detached_file_to_crate_graph(
@@ -780,6 +784,7 @@ impl ProjectWorkspace {
780784
file,
781785
sysroot,
782786
cfg_overrides,
787+
set_test,
783788
)
784789
},
785790
sysroot,
@@ -870,11 +875,12 @@ fn project_json_to_crate_graph(
870875
sysroot: &Sysroot,
871876
extra_env: &FxHashMap<String, String>,
872877
override_cfg: &CfgOverrides,
878+
set_test: bool,
873879
) -> (CrateGraph, ProcMacroPaths) {
874880
let mut res = (CrateGraph::default(), ProcMacroPaths::default());
875881
let (crate_graph, proc_macros) = &mut res;
876882
let (public_deps, libproc_macro) =
877-
sysroot_to_crate_graph(crate_graph, sysroot, rustc_cfg.clone(), load);
883+
sysroot_to_crate_graph(crate_graph, sysroot, rustc_cfg.clone(), load, set_test);
878884

879885
let r_a_cfg_flag = CfgAtom::Flag(sym::rust_analyzer.clone());
880886
let mut cfg_cache: FxHashMap<&str, Vec<CfgAtom>> = FxHashMap::default();
@@ -987,13 +993,14 @@ fn cargo_to_crate_graph(
987993
rustc_cfg: Vec<CfgAtom>,
988994
override_cfg: &CfgOverrides,
989995
build_scripts: &WorkspaceBuildScripts,
996+
set_test: bool,
990997
) -> (CrateGraph, ProcMacroPaths) {
991998
let _p = tracing::info_span!("cargo_to_crate_graph").entered();
992999
let mut res = (CrateGraph::default(), ProcMacroPaths::default());
9931000
let crate_graph = &mut res.0;
9941001
let proc_macros = &mut res.1;
9951002
let (public_deps, libproc_macro) =
996-
sysroot_to_crate_graph(crate_graph, sysroot, rustc_cfg.clone(), load);
1003+
sysroot_to_crate_graph(crate_graph, sysroot, rustc_cfg.clone(), load, set_test);
9971004

9981005
let cfg_options = CfgOptions::from_iter(rustc_cfg);
9991006

@@ -1011,8 +1018,10 @@ fn cargo_to_crate_graph(
10111018
let mut cfg_options = cfg_options.clone();
10121019

10131020
if cargo[pkg].is_local {
1014-
// Add test cfg for local crates
1015-
cfg_options.insert_atom(sym::test.clone());
1021+
if set_test {
1022+
// Add test cfg for local crates
1023+
cfg_options.insert_atom(sym::test.clone());
1024+
}
10161025
cfg_options.insert_atom(sym::rust_analyzer.clone());
10171026
}
10181027

@@ -1173,14 +1182,17 @@ fn detached_file_to_crate_graph(
11731182
detached_file: &ManifestPath,
11741183
sysroot: &Sysroot,
11751184
override_cfg: &CfgOverrides,
1185+
set_test: bool,
11761186
) -> (CrateGraph, ProcMacroPaths) {
11771187
let _p = tracing::info_span!("detached_file_to_crate_graph").entered();
11781188
let mut crate_graph = CrateGraph::default();
11791189
let (public_deps, _libproc_macro) =
1180-
sysroot_to_crate_graph(&mut crate_graph, sysroot, rustc_cfg.clone(), load);
1190+
sysroot_to_crate_graph(&mut crate_graph, sysroot, rustc_cfg.clone(), load, set_test);
11811191

11821192
let mut cfg_options = CfgOptions::from_iter(rustc_cfg);
1183-
cfg_options.insert_atom(sym::test.clone());
1193+
if set_test {
1194+
cfg_options.insert_atom(sym::test.clone());
1195+
}
11841196
cfg_options.insert_atom(sym::rust_analyzer.clone());
11851197
override_cfg.apply(&mut cfg_options, "");
11861198
let cfg_options = Arc::new(cfg_options);
@@ -1404,6 +1416,7 @@ fn sysroot_to_crate_graph(
14041416
sysroot: &Sysroot,
14051417
rustc_cfg: Vec<CfgAtom>,
14061418
load: FileLoader<'_>,
1419+
set_test: bool,
14071420
) -> (SysrootPublicDeps, Option<CrateId>) {
14081421
let _p = tracing::info_span!("sysroot_to_crate_graph").entered();
14091422
match sysroot.mode() {
@@ -1426,6 +1439,7 @@ fn sysroot_to_crate_graph(
14261439
..Default::default()
14271440
},
14281441
&WorkspaceBuildScripts::default(),
1442+
set_test,
14291443
);
14301444

14311445
let mut pub_deps = vec![];

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ impl flags::AnalysisStats {
8484
ProcMacroServerChoice::Sysroot
8585
},
8686
prefill_caches: false,
87+
set_test: true,
8788
};
8889

8990
let build_scripts_time = if self.disable_build_scripts {

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

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

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,7 @@ impl flags::Lsif {
284284
load_out_dirs_from_check: true,
285285
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
286286
prefill_caches: false,
287+
set_test: true,
287288
};
288289
let path = AbsPathBuf::assert_utf8(env::current_dir()?.join(self.path));
289290
let root = ProjectManifest::discover_single(&path)?;

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ impl flags::RunTests {
2222
load_out_dirs_from_check: true,
2323
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
2424
prefill_caches: false,
25+
set_test: true,
2526
};
2627
let (ref db, _vfs, _proc_macro) =
2728
load_workspace_at(&self.path, &cargo_config, &load_cargo_config, &|_| {})?;

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ impl Tester {
9696
load_out_dirs_from_check: false,
9797
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
9898
prefill_caches: false,
99+
set_test: true,
99100
};
100101
let (db, _vfs, _proc_macro) =
101102
load_workspace(workspace, &cargo_config.extra_env, &load_cargo_config)?;

src/tools/rust-analyzer/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(),

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ impl flags::Ssr {
1919
load_out_dirs_from_check: true,
2020
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
2121
prefill_caches: false,
22+
set_test: true,
2223
};
2324
let (ref db, vfs, _proc_macro) = load_workspace_at(
2425
&std::env::current_dir()?,
@@ -50,11 +51,12 @@ impl flags::Search {
5051
pub fn run(self) -> anyhow::Result<()> {
5152
use ide_db::base_db::SourceRootDatabase;
5253
use ide_db::symbol_index::SymbolsDatabase;
53-
let cargo_config = CargoConfig::default();
54+
let cargo_config = CargoConfig { all_targets: true, ..CargoConfig::default() };
5455
let load_cargo_config = LoadCargoConfig {
5556
load_out_dirs_from_check: true,
5657
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
5758
prefill_caches: false,
59+
set_test: true,
5860
};
5961
let (ref db, _vfs, _proc_macro) = load_workspace_at(
6062
&std::env::current_dir()?,

src/tools/rust-analyzer/crates/rust-analyzer/src/config.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,9 @@ config_data! {
574574
/// set to a path relative to the workspace to use that path.
575575
cargo_targetDir | rust_analyzerTargetDir: Option<TargetDirectory> = None,
576576

577+
/// Set `cfg(test)` for local crates. Defaults to true.
578+
cfg_setTest: bool = true,
579+
577580
/// Run the check command for diagnostics on save.
578581
checkOnSave | checkOnSave_enable: bool = true,
579582

@@ -695,7 +698,6 @@ config_data! {
695698
workspace_symbol_search_limit: usize = 128,
696699
/// Workspace symbol search scope.
697700
workspace_symbol_search_scope: WorkspaceSymbolSearchScopeDef = WorkspaceSymbolSearchScopeDef::Workspace,
698-
699701
}
700702
}
701703

src/tools/rust-analyzer/crates/rust-analyzer/src/integrated_benchmarks.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,14 @@ fn integrated_highlighting_benchmark() {
3636

3737
let cargo_config = CargoConfig {
3838
sysroot: Some(project_model::RustLibSource::Discover),
39+
all_targets: true,
3940
..CargoConfig::default()
4041
};
4142
let load_cargo_config = LoadCargoConfig {
4243
load_out_dirs_from_check: true,
4344
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
4445
prefill_caches: false,
46+
set_test: true,
4547
};
4648

4749
let (db, vfs, _proc_macro) = {
@@ -102,12 +104,14 @@ fn integrated_completion_benchmark() {
102104

103105
let cargo_config = CargoConfig {
104106
sysroot: Some(project_model::RustLibSource::Discover),
107+
all_targets: true,
105108
..CargoConfig::default()
106109
};
107110
let load_cargo_config = LoadCargoConfig {
108111
load_out_dirs_from_check: true,
109112
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
110113
prefill_caches: true,
114+
set_test: true,
111115
};
112116

113117
let (db, vfs, _proc_macro) = {
@@ -279,12 +283,14 @@ fn integrated_diagnostics_benchmark() {
279283

280284
let cargo_config = CargoConfig {
281285
sysroot: Some(project_model::RustLibSource::Discover),
286+
all_targets: true,
282287
..CargoConfig::default()
283288
};
284289
let load_cargo_config = LoadCargoConfig {
285290
load_out_dirs_from_check: true,
286291
with_proc_macro_server: ProcMacroServerChoice::Sysroot,
287292
prefill_caches: true,
293+
set_test: true,
288294
};
289295

290296
let (db, vfs, _proc_macro) = {

src/tools/rust-analyzer/crates/rust-analyzer/src/reload.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,12 @@ impl GlobalState {
703703
vfs.file_id(&vfs_path)
704704
};
705705

706-
ws_to_crate_graph(&self.workspaces, self.config.extra_env(None), load)
706+
ws_to_crate_graph(
707+
&self.workspaces,
708+
self.config.extra_env(None),
709+
load,
710+
self.config.cfg_set_test(None),
711+
)
707712
};
708713
let mut change = ChangeWithProcMacros::new();
709714
if self.config.expand_proc_macros() {
@@ -856,12 +861,13 @@ pub fn ws_to_crate_graph(
856861
workspaces: &[ProjectWorkspace],
857862
extra_env: &FxHashMap<String, String>,
858863
mut load: impl FnMut(&AbsPath) -> Option<vfs::FileId>,
864+
set_test: bool,
859865
) -> (CrateGraph, Vec<ProcMacroPaths>, FxHashMap<CrateId, Arc<CrateWorkspaceData>>) {
860866
let mut crate_graph = CrateGraph::default();
861867
let mut proc_macro_paths = Vec::default();
862868
let mut ws_data = FxHashMap::default();
863869
for ws in workspaces {
864-
let (other, mut crate_proc_macros) = ws.to_crate_graph(&mut load, extra_env);
870+
let (other, mut crate_proc_macros) = ws.to_crate_graph(&mut load, extra_env, set_test);
865871
let ProjectWorkspace { toolchain, target_layout, .. } = ws;
866872

867873
let mapping = crate_graph.extend(other, &mut crate_proc_macros);

src/tools/rust-analyzer/docs/user/generated_config.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,11 @@ building from locking the `Cargo.lock` at the expense of duplicating build artif
158158
Set to `true` to use a subdirectory of the existing target directory or
159159
set to a path relative to the workspace to use that path.
160160
--
161+
[[rust-analyzer.cfg.setTest]]rust-analyzer.cfg.setTest (default: `true`)::
162+
+
163+
--
164+
Set `cfg(test)` for local crates. Defaults to true.
165+
--
161166
[[rust-analyzer.checkOnSave]]rust-analyzer.checkOnSave (default: `true`)::
162167
+
163168
--

src/tools/rust-analyzer/editors/code/package.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -853,6 +853,16 @@
853853
}
854854
}
855855
},
856+
{
857+
"title": "cfg",
858+
"properties": {
859+
"rust-analyzer.cfg.setTest": {
860+
"markdownDescription": "Set `cfg(test)` for local crates. Defaults to true.",
861+
"default": true,
862+
"type": "boolean"
863+
}
864+
}
865+
},
856866
{
857867
"title": "general",
858868
"properties": {

src/tools/rust-analyzer/editors/code/src/config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export class Config {
2424
"serverPath",
2525
"server",
2626
"files",
27+
"cfg",
2728
].map((opt) => `${this.rootSection}.${opt}`);
2829

2930
private readonly requiresWindowReloadOpts = ["testExplorer"].map(

0 commit comments

Comments
 (0)