fix: Fix proc-macro paths using incorrect CrateId's for rust-project.json workspaces

This commit is contained in:
Lukas Wirth 2023-03-27 17:17:09 +02:00
parent c04a13cb19
commit b03a218b57

View File

@ -704,15 +704,7 @@ fn project_json_to_crate_graph(
}) })
.map(|(crate_id, krate, file_id)| { .map(|(crate_id, krate, file_id)| {
let env = krate.env.clone().into_iter().collect(); let env = krate.env.clone().into_iter().collect();
if let Some(path) = krate.proc_macro_dylib_path.clone() {
proc_macros.insert(
crate_id,
Some((
krate.display_name.as_ref().map(|it| it.canonical_name().to_owned()),
path,
)),
);
}
let target_cfgs = match krate.target.as_deref() { let target_cfgs = match krate.target.as_deref() {
Some(target) => cfg_cache Some(target) => cfg_cache
.entry(target) .entry(target)
@ -722,31 +714,37 @@ fn project_json_to_crate_graph(
let mut cfg_options = CfgOptions::default(); let mut cfg_options = CfgOptions::default();
cfg_options.extend(target_cfgs.iter().chain(krate.cfg.iter()).cloned()); cfg_options.extend(target_cfgs.iter().chain(krate.cfg.iter()).cloned());
( let crate_graph_crate_id = crate_graph.add_crate_root(
crate_id, file_id,
crate_graph.add_crate_root( krate.edition,
file_id, krate.display_name.clone(),
krate.edition, krate.version.clone(),
krate.display_name.clone(), cfg_options.clone(),
krate.version.clone(), cfg_options,
cfg_options.clone(), env,
cfg_options, krate.is_proc_macro,
env, if krate.display_name.is_some() {
krate.is_proc_macro, CrateOrigin::CratesIo {
if krate.display_name.is_some() { repo: krate.repository.clone(),
CrateOrigin::CratesIo { name: krate.display_name.clone().map(|n| n.canonical_name().to_string()),
repo: krate.repository.clone(), }
name: krate } else {
.display_name CrateOrigin::CratesIo { repo: None, name: None }
.clone() },
.map(|n| n.canonical_name().to_string()), target_layout.clone(),
} );
} else { if krate.is_proc_macro {
CrateOrigin::CratesIo { repo: None, name: None } if let Some(path) = krate.proc_macro_dylib_path.clone() {
}, proc_macros.insert(
target_layout.clone(), crate_graph_crate_id,
), Some((
) krate.display_name.as_ref().map(|it| it.canonical_name().to_owned()),
path,
)),
);
}
}
(crate_id, crate_graph_crate_id)
}) })
.collect(); .collect();