mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 22:31:43 +00:00
Gate #[test]
expansion under cfg(test)
.
This will mean users opting to not activate `cfg(test)` will lose IDE experience on them, which is quite unfortunate, but this is unavoidable if we want to avoid false positives on e.g. diagnostics. The real fix is to provide IDE experience even for cfg'ed out code, but this is out of scope for this PR.
This commit is contained in:
parent
4ea09dd9f6
commit
4a06675e9c
17 changed files with 78 additions and 45 deletions
|
@ -100,6 +100,7 @@ pub struct CargoConfig {
|
|||
pub invocation_strategy: InvocationStrategy,
|
||||
/// Optional path to use instead of `target` when building
|
||||
pub target_dir: Option<Utf8PathBuf>,
|
||||
pub set_test: bool,
|
||||
}
|
||||
|
||||
pub type Package = Idx<PackageData>;
|
||||
|
|
|
@ -35,6 +35,7 @@ fn load_cargo_with_overrides(
|
|||
rustc: Err(None),
|
||||
cargo_config_extra_env: Default::default(),
|
||||
error: None,
|
||||
set_test: true,
|
||||
},
|
||||
cfg_overrides,
|
||||
sysroot: Sysroot::empty(),
|
||||
|
@ -136,7 +137,6 @@ fn to_crate_graph(project_workspace: ProjectWorkspace) -> (CrateGraph, ProcMacro
|
|||
}
|
||||
},
|
||||
&Default::default(),
|
||||
true,
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -243,6 +243,7 @@ fn smoke_test_real_sysroot_cargo() {
|
|||
rustc: Err(None),
|
||||
cargo_config_extra_env: Default::default(),
|
||||
error: None,
|
||||
set_test: true,
|
||||
},
|
||||
sysroot,
|
||||
rustc_cfg: Vec::new(),
|
||||
|
@ -258,6 +259,5 @@ fn smoke_test_real_sysroot_cargo() {
|
|||
}
|
||||
},
|
||||
&Default::default(),
|
||||
true,
|
||||
);
|
||||
}
|
||||
|
|
|
@ -78,6 +78,7 @@ pub enum ProjectWorkspaceKind {
|
|||
rustc: Result<Box<(CargoWorkspace, WorkspaceBuildScripts)>, Option<String>>,
|
||||
/// Environment variables set in the `.cargo/config` file.
|
||||
cargo_config_extra_env: FxHashMap<String, String>,
|
||||
set_test: bool,
|
||||
},
|
||||
/// Project workspace was specified using a `rust-project.json` file.
|
||||
Json(ProjectJson),
|
||||
|
@ -98,6 +99,7 @@ pub enum ProjectWorkspaceKind {
|
|||
cargo: Option<(CargoWorkspace, WorkspaceBuildScripts, Option<Arc<anyhow::Error>>)>,
|
||||
/// Environment variables set in the `.cargo/config` file.
|
||||
cargo_config_extra_env: FxHashMap<String, String>,
|
||||
set_test: bool,
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -112,6 +114,7 @@ impl fmt::Debug for ProjectWorkspace {
|
|||
build_scripts,
|
||||
rustc,
|
||||
cargo_config_extra_env,
|
||||
set_test,
|
||||
} => f
|
||||
.debug_struct("Cargo")
|
||||
.field("root", &cargo.workspace_root().file_name())
|
||||
|
@ -126,6 +129,7 @@ impl fmt::Debug for ProjectWorkspace {
|
|||
.field("toolchain", &toolchain)
|
||||
.field("data_layout", &target_layout)
|
||||
.field("cargo_config_extra_env", &cargo_config_extra_env)
|
||||
.field("set_test", set_test)
|
||||
.field("build_scripts", &build_scripts.error().unwrap_or("ok"))
|
||||
.finish(),
|
||||
ProjectWorkspaceKind::Json(project) => {
|
||||
|
@ -137,12 +141,14 @@ impl fmt::Debug for ProjectWorkspace {
|
|||
.field("toolchain", &toolchain)
|
||||
.field("data_layout", &target_layout)
|
||||
.field("n_cfg_overrides", &cfg_overrides.len());
|
||||
|
||||
debug_struct.finish()
|
||||
}
|
||||
ProjectWorkspaceKind::DetachedFile {
|
||||
file,
|
||||
cargo: cargo_script,
|
||||
cargo_config_extra_env,
|
||||
set_test,
|
||||
} => f
|
||||
.debug_struct("DetachedFiles")
|
||||
.field("file", &file)
|
||||
|
@ -154,6 +160,7 @@ impl fmt::Debug for ProjectWorkspace {
|
|||
.field("data_layout", &target_layout)
|
||||
.field("n_cfg_overrides", &cfg_overrides.len())
|
||||
.field("cargo_config_extra_env", &cargo_config_extra_env)
|
||||
.field("set_test", set_test)
|
||||
.finish(),
|
||||
}
|
||||
}
|
||||
|
@ -329,6 +336,7 @@ impl ProjectWorkspace {
|
|||
rustc,
|
||||
cargo_config_extra_env,
|
||||
error: error.map(Arc::new),
|
||||
set_test: config.set_test,
|
||||
},
|
||||
sysroot,
|
||||
rustc_cfg,
|
||||
|
@ -423,6 +431,7 @@ impl ProjectWorkspace {
|
|||
file: detached_file.to_owned(),
|
||||
cargo: cargo_script,
|
||||
cargo_config_extra_env,
|
||||
set_test: config.set_test,
|
||||
},
|
||||
sysroot,
|
||||
rustc_cfg,
|
||||
|
@ -609,6 +618,7 @@ impl ProjectWorkspace {
|
|||
build_scripts,
|
||||
cargo_config_extra_env: _,
|
||||
error: _,
|
||||
set_test: _,
|
||||
} => {
|
||||
cargo
|
||||
.packages()
|
||||
|
@ -728,7 +738,6 @@ impl ProjectWorkspace {
|
|||
&self,
|
||||
load: FileLoader<'_>,
|
||||
extra_env: &FxHashMap<String, String>,
|
||||
set_test: bool,
|
||||
) -> (CrateGraph, ProcMacroPaths) {
|
||||
let _p = tracing::info_span!("ProjectWorkspace::to_crate_graph").entered();
|
||||
|
||||
|
@ -742,7 +751,6 @@ impl ProjectWorkspace {
|
|||
sysroot,
|
||||
extra_env,
|
||||
cfg_overrides,
|
||||
set_test,
|
||||
),
|
||||
sysroot,
|
||||
),
|
||||
|
@ -752,6 +760,7 @@ impl ProjectWorkspace {
|
|||
build_scripts,
|
||||
cargo_config_extra_env: _,
|
||||
error: _,
|
||||
set_test,
|
||||
} => (
|
||||
cargo_to_crate_graph(
|
||||
load,
|
||||
|
@ -761,11 +770,11 @@ impl ProjectWorkspace {
|
|||
rustc_cfg.clone(),
|
||||
cfg_overrides,
|
||||
build_scripts,
|
||||
set_test,
|
||||
*set_test,
|
||||
),
|
||||
sysroot,
|
||||
),
|
||||
ProjectWorkspaceKind::DetachedFile { file, cargo: cargo_script, .. } => (
|
||||
ProjectWorkspaceKind::DetachedFile { file, cargo: cargo_script, set_test, .. } => (
|
||||
if let Some((cargo, build_scripts, _)) = cargo_script {
|
||||
cargo_to_crate_graph(
|
||||
&mut |path| load(path),
|
||||
|
@ -775,7 +784,7 @@ impl ProjectWorkspace {
|
|||
rustc_cfg.clone(),
|
||||
cfg_overrides,
|
||||
build_scripts,
|
||||
set_test,
|
||||
*set_test,
|
||||
)
|
||||
} else {
|
||||
detached_file_to_crate_graph(
|
||||
|
@ -784,7 +793,7 @@ impl ProjectWorkspace {
|
|||
file,
|
||||
sysroot,
|
||||
cfg_overrides,
|
||||
set_test,
|
||||
*set_test,
|
||||
)
|
||||
},
|
||||
sysroot,
|
||||
|
@ -818,6 +827,7 @@ impl ProjectWorkspace {
|
|||
cargo_config_extra_env,
|
||||
build_scripts: _,
|
||||
error: _,
|
||||
set_test: _,
|
||||
},
|
||||
ProjectWorkspaceKind::Cargo {
|
||||
cargo: o_cargo,
|
||||
|
@ -825,6 +835,7 @@ impl ProjectWorkspace {
|
|||
cargo_config_extra_env: o_cargo_config_extra_env,
|
||||
build_scripts: _,
|
||||
error: _,
|
||||
set_test: _,
|
||||
},
|
||||
) => {
|
||||
cargo == o_cargo
|
||||
|
@ -839,11 +850,13 @@ impl ProjectWorkspace {
|
|||
file,
|
||||
cargo: Some((cargo_script, _, _)),
|
||||
cargo_config_extra_env,
|
||||
set_test: _,
|
||||
},
|
||||
ProjectWorkspaceKind::DetachedFile {
|
||||
file: o_file,
|
||||
cargo: Some((o_cargo_script, _, _)),
|
||||
cargo_config_extra_env: o_cargo_config_extra_env,
|
||||
set_test: _,
|
||||
},
|
||||
) => {
|
||||
file == o_file
|
||||
|
@ -875,12 +888,11 @@ fn project_json_to_crate_graph(
|
|||
sysroot: &Sysroot,
|
||||
extra_env: &FxHashMap<String, String>,
|
||||
override_cfg: &CfgOverrides,
|
||||
set_test: bool,
|
||||
) -> (CrateGraph, ProcMacroPaths) {
|
||||
let mut res = (CrateGraph::default(), ProcMacroPaths::default());
|
||||
let (crate_graph, proc_macros) = &mut res;
|
||||
let (public_deps, libproc_macro) =
|
||||
sysroot_to_crate_graph(crate_graph, sysroot, rustc_cfg.clone(), load, set_test);
|
||||
sysroot_to_crate_graph(crate_graph, sysroot, rustc_cfg.clone(), load);
|
||||
|
||||
let r_a_cfg_flag = CfgAtom::Flag(sym::rust_analyzer.clone());
|
||||
let mut cfg_cache: FxHashMap<&str, Vec<CfgAtom>> = FxHashMap::default();
|
||||
|
@ -1000,7 +1012,7 @@ fn cargo_to_crate_graph(
|
|||
let crate_graph = &mut res.0;
|
||||
let proc_macros = &mut res.1;
|
||||
let (public_deps, libproc_macro) =
|
||||
sysroot_to_crate_graph(crate_graph, sysroot, rustc_cfg.clone(), load, set_test);
|
||||
sysroot_to_crate_graph(crate_graph, sysroot, rustc_cfg.clone(), load);
|
||||
|
||||
let cfg_options = CfgOptions::from_iter(rustc_cfg);
|
||||
|
||||
|
@ -1187,7 +1199,7 @@ fn detached_file_to_crate_graph(
|
|||
let _p = tracing::info_span!("detached_file_to_crate_graph").entered();
|
||||
let mut crate_graph = CrateGraph::default();
|
||||
let (public_deps, _libproc_macro) =
|
||||
sysroot_to_crate_graph(&mut crate_graph, sysroot, rustc_cfg.clone(), load, set_test);
|
||||
sysroot_to_crate_graph(&mut crate_graph, sysroot, rustc_cfg.clone(), load);
|
||||
|
||||
let mut cfg_options = CfgOptions::from_iter(rustc_cfg);
|
||||
if set_test {
|
||||
|
@ -1416,7 +1428,6 @@ fn sysroot_to_crate_graph(
|
|||
sysroot: &Sysroot,
|
||||
rustc_cfg: Vec<CfgAtom>,
|
||||
load: FileLoader<'_>,
|
||||
set_test: bool,
|
||||
) -> (SysrootPublicDeps, Option<CrateId>) {
|
||||
let _p = tracing::info_span!("sysroot_to_crate_graph").entered();
|
||||
match sysroot.mode() {
|
||||
|
@ -1439,7 +1450,7 @@ fn sysroot_to_crate_graph(
|
|||
..Default::default()
|
||||
},
|
||||
&WorkspaceBuildScripts::default(),
|
||||
set_test,
|
||||
false,
|
||||
);
|
||||
|
||||
let mut pub_deps = vec![];
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue