mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-11 20:58:54 +00:00
Remove load_cargo_with_fake_sysroot
This commit is contained in:
parent
947dfdce0c
commit
e12fe30351
1 changed files with 31 additions and 55 deletions
|
@ -18,18 +18,25 @@ use crate::{
|
|||
};
|
||||
|
||||
fn load_cargo(file: &str) -> (CrateGraph, ProcMacroPaths) {
|
||||
load_cargo_with_overrides(file, CfgOverrides::default())
|
||||
let project_workspace = load_workspace_from_metadata(file);
|
||||
to_crate_graph(project_workspace, &mut Default::default())
|
||||
}
|
||||
|
||||
fn load_cargo_with_overrides(
|
||||
file: &str,
|
||||
cfg_overrides: CfgOverrides,
|
||||
) -> (CrateGraph, ProcMacroPaths) {
|
||||
let project_workspace =
|
||||
ProjectWorkspace { cfg_overrides, ..load_workspace_from_metadata(file) };
|
||||
to_crate_graph(project_workspace, &mut Default::default())
|
||||
}
|
||||
|
||||
fn load_workspace_from_metadata(file: &str) -> ProjectWorkspace {
|
||||
let meta: Metadata = get_test_json_file(file);
|
||||
let manifest_path =
|
||||
ManifestPath::try_from(AbsPathBuf::try_from(meta.workspace_root.clone()).unwrap()).unwrap();
|
||||
let cargo_workspace = CargoWorkspace::new(meta, manifest_path, Default::default());
|
||||
let project_workspace = ProjectWorkspace {
|
||||
ProjectWorkspace {
|
||||
kind: ProjectWorkspaceKind::Cargo {
|
||||
cargo: cargo_workspace,
|
||||
build_scripts: WorkspaceBuildScripts::default(),
|
||||
|
@ -37,46 +44,12 @@ fn load_cargo_with_overrides(
|
|||
error: None,
|
||||
set_test: true,
|
||||
},
|
||||
cfg_overrides,
|
||||
cfg_overrides: Default::default(),
|
||||
sysroot: Sysroot::empty(),
|
||||
rustc_cfg: Vec::new(),
|
||||
toolchain: None,
|
||||
target_layout: Err("target_data_layout not loaded".into()),
|
||||
};
|
||||
to_crate_graph(project_workspace)
|
||||
}
|
||||
|
||||
fn load_cargo_with_fake_sysroot(
|
||||
file_map: &mut FxHashMap<AbsPathBuf, FileId>,
|
||||
file: &str,
|
||||
) -> (CrateGraph, ProcMacroPaths) {
|
||||
let meta: Metadata = get_test_json_file(file);
|
||||
let manifest_path =
|
||||
ManifestPath::try_from(AbsPathBuf::try_from(meta.workspace_root.clone()).unwrap()).unwrap();
|
||||
let cargo_workspace = CargoWorkspace::new(meta, manifest_path, Default::default());
|
||||
let project_workspace = ProjectWorkspace {
|
||||
kind: ProjectWorkspaceKind::Cargo {
|
||||
cargo: cargo_workspace,
|
||||
build_scripts: WorkspaceBuildScripts::default(),
|
||||
rustc: Err(None),
|
||||
error: None,
|
||||
set_test: true,
|
||||
},
|
||||
sysroot: get_fake_sysroot(),
|
||||
rustc_cfg: Vec::new(),
|
||||
cfg_overrides: Default::default(),
|
||||
toolchain: None,
|
||||
target_layout: Err("target_data_layout not loaded".into()),
|
||||
};
|
||||
project_workspace.to_crate_graph(
|
||||
&mut {
|
||||
|path| {
|
||||
let len = file_map.len();
|
||||
Some(*file_map.entry(path.to_path_buf()).or_insert(FileId::from_raw(len as u32)))
|
||||
}
|
||||
},
|
||||
&Default::default(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fn load_rust_project(file: &str) -> (CrateGraph, ProcMacroPaths) {
|
||||
|
@ -91,7 +64,7 @@ fn load_rust_project(file: &str) -> (CrateGraph, ProcMacroPaths) {
|
|||
target_layout: Err(Arc::from("test has no data layout")),
|
||||
cfg_overrides: Default::default(),
|
||||
};
|
||||
to_crate_graph(project_workspace)
|
||||
to_crate_graph(project_workspace, &mut Default::default())
|
||||
}
|
||||
|
||||
fn get_test_json_file<T: DeserializeOwned>(file: &str) -> T {
|
||||
|
@ -160,13 +133,15 @@ fn rooted_project_json(data: ProjectJsonData) -> ProjectJson {
|
|||
ProjectJson::new(None, base, data)
|
||||
}
|
||||
|
||||
fn to_crate_graph(project_workspace: ProjectWorkspace) -> (CrateGraph, ProcMacroPaths) {
|
||||
fn to_crate_graph(
|
||||
project_workspace: ProjectWorkspace,
|
||||
file_map: &mut FxHashMap<AbsPathBuf, FileId>,
|
||||
) -> (CrateGraph, ProcMacroPaths) {
|
||||
project_workspace.to_crate_graph(
|
||||
&mut {
|
||||
let mut counter = 0;
|
||||
move |_path| {
|
||||
counter += 1;
|
||||
Some(FileId::from_raw(counter))
|
||||
|path| {
|
||||
let len = file_map.len();
|
||||
Some(*file_map.entry(path.to_path_buf()).or_insert(FileId::from_raw(len as u32)))
|
||||
}
|
||||
},
|
||||
&Default::default(),
|
||||
|
@ -256,8 +231,7 @@ fn rust_project_is_proc_macro_has_proc_macro_dep() {
|
|||
|
||||
#[test]
|
||||
fn crate_graph_dedup_identical() {
|
||||
let (mut crate_graph, proc_macros) =
|
||||
load_cargo_with_fake_sysroot(&mut Default::default(), "regex-metadata.json");
|
||||
let (mut crate_graph, proc_macros) = load_cargo("regex-metadata.json");
|
||||
crate_graph.sort_deps();
|
||||
|
||||
let (d_crate_graph, mut d_proc_macros) = (crate_graph.clone(), proc_macros.clone());
|
||||
|
@ -269,17 +243,19 @@ fn crate_graph_dedup_identical() {
|
|||
|
||||
#[test]
|
||||
fn crate_graph_dedup() {
|
||||
let path_map = &mut Default::default();
|
||||
let (mut crate_graph, _proc_macros) =
|
||||
load_cargo_with_fake_sysroot(path_map, "ripgrep-metadata.json");
|
||||
assert_eq!(crate_graph.iter().count(), 81);
|
||||
crate_graph.sort_deps();
|
||||
let (regex_crate_graph, mut regex_proc_macros) =
|
||||
load_cargo_with_fake_sysroot(path_map, "regex-metadata.json");
|
||||
assert_eq!(regex_crate_graph.iter().count(), 60);
|
||||
let mut file_map = Default::default();
|
||||
|
||||
let ripgrep_workspace = load_workspace_from_metadata("ripgrep-metadata.json");
|
||||
let (mut crate_graph, _proc_macros) = to_crate_graph(ripgrep_workspace, &mut file_map);
|
||||
assert_eq!(crate_graph.iter().count(), 71);
|
||||
|
||||
let regex_workspace = load_workspace_from_metadata("regex-metadata.json");
|
||||
let (regex_crate_graph, mut regex_proc_macros) = to_crate_graph(regex_workspace, &mut file_map);
|
||||
assert_eq!(regex_crate_graph.iter().count(), 50);
|
||||
|
||||
crate_graph.sort_deps();
|
||||
crate_graph.extend(regex_crate_graph, &mut regex_proc_macros);
|
||||
assert_eq!(crate_graph.iter().count(), 118);
|
||||
assert_eq!(crate_graph.iter().count(), 108);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
|
Loading…
Reference in a new issue