mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 11:31:15 +00:00
Apply cfg.setTest to json projects
This commit is contained in:
parent
c661e5e14e
commit
a297d438bc
@ -42,7 +42,6 @@ fn load_workspace_from_metadata(file: &str) -> ProjectWorkspace {
|
|||||||
build_scripts: WorkspaceBuildScripts::default(),
|
build_scripts: WorkspaceBuildScripts::default(),
|
||||||
rustc: Err(None),
|
rustc: Err(None),
|
||||||
error: None,
|
error: None,
|
||||||
set_test: true,
|
|
||||||
},
|
},
|
||||||
cfg_overrides: Default::default(),
|
cfg_overrides: Default::default(),
|
||||||
sysroot: Sysroot::empty(),
|
sysroot: Sysroot::empty(),
|
||||||
@ -50,6 +49,7 @@ fn load_workspace_from_metadata(file: &str) -> ProjectWorkspace {
|
|||||||
toolchain: None,
|
toolchain: None,
|
||||||
target_layout: Err("target_data_layout not loaded".into()),
|
target_layout: Err("target_data_layout not loaded".into()),
|
||||||
extra_includes: Vec::new(),
|
extra_includes: Vec::new(),
|
||||||
|
set_test: true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,6 +65,7 @@ fn load_rust_project(file: &str) -> (CrateGraph, ProcMacroPaths) {
|
|||||||
target_layout: Err(Arc::from("test has no data layout")),
|
target_layout: Err(Arc::from("test has no data layout")),
|
||||||
cfg_overrides: Default::default(),
|
cfg_overrides: Default::default(),
|
||||||
extra_includes: Vec::new(),
|
extra_includes: Vec::new(),
|
||||||
|
set_test: true,
|
||||||
};
|
};
|
||||||
to_crate_graph(project_workspace, &mut Default::default())
|
to_crate_graph(project_workspace, &mut Default::default())
|
||||||
}
|
}
|
||||||
@ -285,7 +286,6 @@ fn smoke_test_real_sysroot_cargo() {
|
|||||||
build_scripts: WorkspaceBuildScripts::default(),
|
build_scripts: WorkspaceBuildScripts::default(),
|
||||||
rustc: Err(None),
|
rustc: Err(None),
|
||||||
error: None,
|
error: None,
|
||||||
set_test: true,
|
|
||||||
},
|
},
|
||||||
sysroot,
|
sysroot,
|
||||||
rustc_cfg: Vec::new(),
|
rustc_cfg: Vec::new(),
|
||||||
@ -293,6 +293,7 @@ fn smoke_test_real_sysroot_cargo() {
|
|||||||
toolchain: None,
|
toolchain: None,
|
||||||
target_layout: Err("target_data_layout not loaded".into()),
|
target_layout: Err("target_data_layout not loaded".into()),
|
||||||
extra_includes: Vec::new(),
|
extra_includes: Vec::new(),
|
||||||
|
set_test: true,
|
||||||
};
|
};
|
||||||
project_workspace.to_crate_graph(
|
project_workspace.to_crate_graph(
|
||||||
&mut {
|
&mut {
|
||||||
|
@ -64,6 +64,8 @@ pub struct ProjectWorkspace {
|
|||||||
pub cfg_overrides: CfgOverrides,
|
pub cfg_overrides: CfgOverrides,
|
||||||
/// Additional includes to add for the VFS.
|
/// Additional includes to add for the VFS.
|
||||||
pub extra_includes: Vec<AbsPathBuf>,
|
pub extra_includes: Vec<AbsPathBuf>,
|
||||||
|
/// Set `cfg(test)` for local crates
|
||||||
|
pub set_test: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
@ -79,7 +81,6 @@ pub enum ProjectWorkspaceKind {
|
|||||||
/// The rustc workspace loaded for this workspace. An `Err(None)` means loading has been
|
/// The rustc workspace loaded for this workspace. An `Err(None)` means loading has been
|
||||||
/// disabled or was otherwise not requested.
|
/// disabled or was otherwise not requested.
|
||||||
rustc: Result<Box<(CargoWorkspace, WorkspaceBuildScripts)>, Option<String>>,
|
rustc: Result<Box<(CargoWorkspace, WorkspaceBuildScripts)>, Option<String>>,
|
||||||
set_test: bool,
|
|
||||||
},
|
},
|
||||||
/// Project workspace was specified using a `rust-project.json` file.
|
/// Project workspace was specified using a `rust-project.json` file.
|
||||||
Json(ProjectJson),
|
Json(ProjectJson),
|
||||||
@ -98,7 +99,6 @@ pub enum ProjectWorkspaceKind {
|
|||||||
file: ManifestPath,
|
file: ManifestPath,
|
||||||
/// Is this file a cargo script file?
|
/// Is this file a cargo script file?
|
||||||
cargo: Option<(CargoWorkspace, WorkspaceBuildScripts, Option<Arc<anyhow::Error>>)>,
|
cargo: Option<(CargoWorkspace, WorkspaceBuildScripts, Option<Arc<anyhow::Error>>)>,
|
||||||
set_test: bool,
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,9 +113,10 @@ impl fmt::Debug for ProjectWorkspace {
|
|||||||
target_layout,
|
target_layout,
|
||||||
cfg_overrides,
|
cfg_overrides,
|
||||||
extra_includes,
|
extra_includes,
|
||||||
|
set_test,
|
||||||
} = self;
|
} = self;
|
||||||
match kind {
|
match kind {
|
||||||
ProjectWorkspaceKind::Cargo { cargo, error: _, build_scripts, rustc, set_test } => f
|
ProjectWorkspaceKind::Cargo { cargo, error: _, build_scripts, rustc } => f
|
||||||
.debug_struct("Cargo")
|
.debug_struct("Cargo")
|
||||||
.field("root", &cargo.workspace_root().file_name())
|
.field("root", &cargo.workspace_root().file_name())
|
||||||
.field("n_packages", &cargo.packages().len())
|
.field("n_packages", &cargo.packages().len())
|
||||||
@ -141,11 +142,12 @@ impl fmt::Debug for ProjectWorkspace {
|
|||||||
.field("toolchain", &toolchain)
|
.field("toolchain", &toolchain)
|
||||||
.field("data_layout", &target_layout)
|
.field("data_layout", &target_layout)
|
||||||
.field("n_cfg_overrides", &cfg_overrides.len())
|
.field("n_cfg_overrides", &cfg_overrides.len())
|
||||||
.field("n_extra_includes", &extra_includes.len());
|
.field("n_extra_includes", &extra_includes.len())
|
||||||
|
.field("set_test", set_test);
|
||||||
|
|
||||||
debug_struct.finish()
|
debug_struct.finish()
|
||||||
}
|
}
|
||||||
ProjectWorkspaceKind::DetachedFile { file, cargo: cargo_script, set_test } => f
|
ProjectWorkspaceKind::DetachedFile { file, cargo: cargo_script } => f
|
||||||
.debug_struct("DetachedFiles")
|
.debug_struct("DetachedFiles")
|
||||||
.field("file", &file)
|
.field("file", &file)
|
||||||
.field("cargo_script", &cargo_script.is_some())
|
.field("cargo_script", &cargo_script.is_some())
|
||||||
@ -386,7 +388,6 @@ impl ProjectWorkspace {
|
|||||||
build_scripts: WorkspaceBuildScripts::default(),
|
build_scripts: WorkspaceBuildScripts::default(),
|
||||||
rustc,
|
rustc,
|
||||||
error: error.map(Arc::new),
|
error: error.map(Arc::new),
|
||||||
set_test: *set_test,
|
|
||||||
},
|
},
|
||||||
sysroot,
|
sysroot,
|
||||||
rustc_cfg,
|
rustc_cfg,
|
||||||
@ -394,6 +395,7 @@ impl ProjectWorkspace {
|
|||||||
toolchain,
|
toolchain,
|
||||||
target_layout: data_layout.map(Arc::from).map_err(|it| Arc::from(it.to_string())),
|
target_layout: data_layout.map(Arc::from).map_err(|it| Arc::from(it.to_string())),
|
||||||
extra_includes: extra_includes.clone(),
|
extra_includes: extra_includes.clone(),
|
||||||
|
set_test: *set_test,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -449,6 +451,7 @@ impl ProjectWorkspace {
|
|||||||
target_layout: target_layout.map(Arc::from).map_err(|it| Arc::from(it.to_string())),
|
target_layout: target_layout.map(Arc::from).map_err(|it| Arc::from(it.to_string())),
|
||||||
cfg_overrides: config.cfg_overrides.clone(),
|
cfg_overrides: config.cfg_overrides.clone(),
|
||||||
extra_includes: config.extra_includes.clone(),
|
extra_includes: config.extra_includes.clone(),
|
||||||
|
set_test: config.set_test,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -504,7 +507,6 @@ impl ProjectWorkspace {
|
|||||||
kind: ProjectWorkspaceKind::DetachedFile {
|
kind: ProjectWorkspaceKind::DetachedFile {
|
||||||
file: detached_file.to_owned(),
|
file: detached_file.to_owned(),
|
||||||
cargo: cargo_script,
|
cargo: cargo_script,
|
||||||
set_test: config.set_test,
|
|
||||||
},
|
},
|
||||||
sysroot,
|
sysroot,
|
||||||
rustc_cfg,
|
rustc_cfg,
|
||||||
@ -512,6 +514,7 @@ impl ProjectWorkspace {
|
|||||||
target_layout: data_layout.map(Arc::from).map_err(|it| Arc::from(it.to_string())),
|
target_layout: data_layout.map(Arc::from).map_err(|it| Arc::from(it.to_string())),
|
||||||
cfg_overrides: config.cfg_overrides.clone(),
|
cfg_overrides: config.cfg_overrides.clone(),
|
||||||
extra_includes: config.extra_includes.clone(),
|
extra_includes: config.extra_includes.clone(),
|
||||||
|
set_test: config.set_test,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -696,7 +699,7 @@ impl ProjectWorkspace {
|
|||||||
.into_iter()
|
.into_iter()
|
||||||
.chain(mk_sysroot())
|
.chain(mk_sysroot())
|
||||||
.collect::<Vec<_>>(),
|
.collect::<Vec<_>>(),
|
||||||
ProjectWorkspaceKind::Cargo { cargo, rustc, build_scripts, error: _, set_test: _ } => {
|
ProjectWorkspaceKind::Cargo { cargo, rustc, build_scripts, error: _ } => {
|
||||||
cargo
|
cargo
|
||||||
.packages()
|
.packages()
|
||||||
.map(|pkg| {
|
.map(|pkg| {
|
||||||
@ -831,8 +834,9 @@ impl ProjectWorkspace {
|
|||||||
sysroot,
|
sysroot,
|
||||||
extra_env,
|
extra_env,
|
||||||
cfg_overrides,
|
cfg_overrides,
|
||||||
|
self.set_test,
|
||||||
),
|
),
|
||||||
ProjectWorkspaceKind::Cargo { cargo, rustc, build_scripts, error: _, set_test } => {
|
ProjectWorkspaceKind::Cargo { cargo, rustc, build_scripts, error: _ } => {
|
||||||
cargo_to_crate_graph(
|
cargo_to_crate_graph(
|
||||||
load,
|
load,
|
||||||
rustc.as_ref().map(|a| a.as_ref()).ok(),
|
rustc.as_ref().map(|a| a.as_ref()).ok(),
|
||||||
@ -841,10 +845,10 @@ impl ProjectWorkspace {
|
|||||||
rustc_cfg.clone(),
|
rustc_cfg.clone(),
|
||||||
cfg_overrides,
|
cfg_overrides,
|
||||||
build_scripts,
|
build_scripts,
|
||||||
*set_test,
|
self.set_test,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
ProjectWorkspaceKind::DetachedFile { file, cargo: cargo_script, set_test, .. } => {
|
ProjectWorkspaceKind::DetachedFile { file, cargo: cargo_script, .. } => {
|
||||||
if let Some((cargo, build_scripts, _)) = cargo_script {
|
if let Some((cargo, build_scripts, _)) = cargo_script {
|
||||||
cargo_to_crate_graph(
|
cargo_to_crate_graph(
|
||||||
&mut |path| load(path),
|
&mut |path| load(path),
|
||||||
@ -854,7 +858,7 @@ impl ProjectWorkspace {
|
|||||||
rustc_cfg.clone(),
|
rustc_cfg.clone(),
|
||||||
cfg_overrides,
|
cfg_overrides,
|
||||||
build_scripts,
|
build_scripts,
|
||||||
*set_test,
|
self.set_test,
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
detached_file_to_crate_graph(
|
detached_file_to_crate_graph(
|
||||||
@ -863,7 +867,7 @@ impl ProjectWorkspace {
|
|||||||
file,
|
file,
|
||||||
sysroot,
|
sysroot,
|
||||||
cfg_overrides,
|
cfg_overrides,
|
||||||
*set_test,
|
self.set_test,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -885,34 +889,22 @@ impl ProjectWorkspace {
|
|||||||
} = other;
|
} = other;
|
||||||
(match (kind, o_kind) {
|
(match (kind, o_kind) {
|
||||||
(
|
(
|
||||||
ProjectWorkspaceKind::Cargo {
|
ProjectWorkspaceKind::Cargo { cargo, rustc, build_scripts: _, error: _ },
|
||||||
cargo,
|
|
||||||
rustc,
|
|
||||||
build_scripts: _,
|
|
||||||
error: _,
|
|
||||||
set_test: _,
|
|
||||||
},
|
|
||||||
ProjectWorkspaceKind::Cargo {
|
ProjectWorkspaceKind::Cargo {
|
||||||
cargo: o_cargo,
|
cargo: o_cargo,
|
||||||
rustc: o_rustc,
|
rustc: o_rustc,
|
||||||
build_scripts: _,
|
build_scripts: _,
|
||||||
error: _,
|
error: _,
|
||||||
set_test: _,
|
|
||||||
},
|
},
|
||||||
) => cargo == o_cargo && rustc == o_rustc,
|
) => cargo == o_cargo && rustc == o_rustc,
|
||||||
(ProjectWorkspaceKind::Json(project), ProjectWorkspaceKind::Json(o_project)) => {
|
(ProjectWorkspaceKind::Json(project), ProjectWorkspaceKind::Json(o_project)) => {
|
||||||
project == o_project
|
project == o_project
|
||||||
}
|
}
|
||||||
(
|
(
|
||||||
ProjectWorkspaceKind::DetachedFile {
|
ProjectWorkspaceKind::DetachedFile { file, cargo: Some((cargo_script, _, _)) },
|
||||||
file,
|
|
||||||
cargo: Some((cargo_script, _, _)),
|
|
||||||
set_test: _,
|
|
||||||
},
|
|
||||||
ProjectWorkspaceKind::DetachedFile {
|
ProjectWorkspaceKind::DetachedFile {
|
||||||
file: o_file,
|
file: o_file,
|
||||||
cargo: Some((o_cargo_script, _, _)),
|
cargo: Some((o_cargo_script, _, _)),
|
||||||
set_test: _,
|
|
||||||
},
|
},
|
||||||
) => file == o_file && cargo_script == o_cargo_script,
|
) => file == o_file && cargo_script == o_cargo_script,
|
||||||
_ => return false,
|
_ => return false,
|
||||||
@ -940,13 +932,13 @@ fn project_json_to_crate_graph(
|
|||||||
sysroot: &Sysroot,
|
sysroot: &Sysroot,
|
||||||
extra_env: &FxHashMap<String, String>,
|
extra_env: &FxHashMap<String, String>,
|
||||||
override_cfg: &CfgOverrides,
|
override_cfg: &CfgOverrides,
|
||||||
|
set_test: bool,
|
||||||
) -> (CrateGraph, ProcMacroPaths) {
|
) -> (CrateGraph, ProcMacroPaths) {
|
||||||
let mut res = (CrateGraph::default(), ProcMacroPaths::default());
|
let mut res = (CrateGraph::default(), ProcMacroPaths::default());
|
||||||
let (crate_graph, proc_macros) = &mut res;
|
let (crate_graph, proc_macros) = &mut res;
|
||||||
let (public_deps, libproc_macro) =
|
let (public_deps, libproc_macro) =
|
||||||
sysroot_to_crate_graph(crate_graph, sysroot, rustc_cfg.clone(), load);
|
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();
|
let mut cfg_cache: FxHashMap<&str, Vec<CfgAtom>> = FxHashMap::default();
|
||||||
|
|
||||||
let idx_to_crate_id: FxHashMap<CrateArrayIdx, CrateId> = project
|
let idx_to_crate_id: FxHashMap<CrateArrayIdx, CrateId> = project
|
||||||
@ -965,6 +957,7 @@ fn project_json_to_crate_graph(
|
|||||||
proc_macro_dylib_path,
|
proc_macro_dylib_path,
|
||||||
is_proc_macro,
|
is_proc_macro,
|
||||||
repository,
|
repository,
|
||||||
|
is_workspace_member,
|
||||||
..
|
..
|
||||||
},
|
},
|
||||||
file_id,
|
file_id,
|
||||||
@ -982,19 +975,28 @@ fn project_json_to_crate_graph(
|
|||||||
None => &rustc_cfg,
|
None => &rustc_cfg,
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut cfg_options = target_cfgs
|
let cfg_options = {
|
||||||
.iter()
|
let mut cfg_options: CfgOptions =
|
||||||
.chain(cfg.iter())
|
target_cfgs.iter().chain(cfg.iter()).cloned().collect();
|
||||||
.chain(iter::once(&r_a_cfg_flag))
|
|
||||||
.cloned()
|
if *is_workspace_member {
|
||||||
.collect();
|
if set_test {
|
||||||
override_cfg.apply(
|
// Add test cfg for local crates
|
||||||
&mut cfg_options,
|
cfg_options.insert_atom(sym::test.clone());
|
||||||
display_name
|
}
|
||||||
.as_ref()
|
cfg_options.insert_atom(sym::rust_analyzer.clone());
|
||||||
.map(|it| it.canonical_name().as_str())
|
}
|
||||||
.unwrap_or_default(),
|
|
||||||
);
|
override_cfg.apply(
|
||||||
|
&mut cfg_options,
|
||||||
|
display_name
|
||||||
|
.as_ref()
|
||||||
|
.map(|it| it.canonical_name().as_str())
|
||||||
|
.unwrap_or_default(),
|
||||||
|
);
|
||||||
|
cfg_options
|
||||||
|
};
|
||||||
|
|
||||||
let crate_graph_crate_id = crate_graph.add_crate_root(
|
let crate_graph_crate_id = crate_graph.add_crate_root(
|
||||||
file_id,
|
file_id,
|
||||||
*edition,
|
*edition,
|
||||||
|
@ -420,6 +420,7 @@
|
|||||||
"group1_other_cfg=other_config",
|
"group1_other_cfg=other_config",
|
||||||
"group2_cfg=yet_another_config",
|
"group2_cfg=yet_another_config",
|
||||||
"rust_analyzer",
|
"rust_analyzer",
|
||||||
|
"test",
|
||||||
"true",
|
"true",
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@ -496,6 +497,7 @@
|
|||||||
"group2_cfg=fourth_config",
|
"group2_cfg=fourth_config",
|
||||||
"group2_cfg=yet_another_config",
|
"group2_cfg=yet_another_config",
|
||||||
"rust_analyzer",
|
"rust_analyzer",
|
||||||
|
"test",
|
||||||
"true",
|
"true",
|
||||||
"unrelated_cfg",
|
"unrelated_cfg",
|
||||||
],
|
],
|
||||||
|
@ -417,6 +417,7 @@
|
|||||||
cfg_options: CfgOptions(
|
cfg_options: CfgOptions(
|
||||||
[
|
[
|
||||||
"rust_analyzer",
|
"rust_analyzer",
|
||||||
|
"test",
|
||||||
"true",
|
"true",
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@ -90,7 +90,6 @@ impl Tester {
|
|||||||
kind: ProjectWorkspaceKind::DetachedFile {
|
kind: ProjectWorkspaceKind::DetachedFile {
|
||||||
file: ManifestPath::try_from(tmp_file).unwrap(),
|
file: ManifestPath::try_from(tmp_file).unwrap(),
|
||||||
cargo: None,
|
cargo: None,
|
||||||
set_test: true,
|
|
||||||
},
|
},
|
||||||
sysroot,
|
sysroot,
|
||||||
rustc_cfg: vec![],
|
rustc_cfg: vec![],
|
||||||
@ -98,6 +97,7 @@ impl Tester {
|
|||||||
target_layout: data_layout.map(Arc::from).map_err(|it| Arc::from(it.to_string())),
|
target_layout: data_layout.map(Arc::from).map_err(|it| Arc::from(it.to_string())),
|
||||||
cfg_overrides: Default::default(),
|
cfg_overrides: Default::default(),
|
||||||
extra_includes: vec![],
|
extra_includes: vec![],
|
||||||
|
set_test: true,
|
||||||
};
|
};
|
||||||
let load_cargo_config = LoadCargoConfig {
|
let load_cargo_config = LoadCargoConfig {
|
||||||
load_out_dirs_from_check: false,
|
load_out_dirs_from_check: false,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user