Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/project_model/src/workspace.rs')
| -rw-r--r-- | crates/project_model/src/workspace.rs | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/crates/project_model/src/workspace.rs b/crates/project_model/src/workspace.rs index 60f99f368b..869b064e1d 100644 --- a/crates/project_model/src/workspace.rs +++ b/crates/project_model/src/workspace.rs @@ -387,10 +387,14 @@ impl ProjectWorkspace { pub fn to_crate_graph( &self, - load_proc_macro: &mut dyn FnMut(&AbsPath) -> Vec<ProcMacro>, + dummy_replace: &FxHashMap<Box<str>, Box<[Box<str>]>>, + load_proc_macro: &mut dyn FnMut(&AbsPath, &[Box<str>]) -> Vec<ProcMacro>, load: &mut dyn FnMut(&AbsPath) -> Option<FileId>, ) -> CrateGraph { let _p = profile::span("ProjectWorkspace::to_crate_graph"); + let load_proc_macro = &mut |crate_name: &_, path: &_| { + load_proc_macro(path, dummy_replace.get(crate_name).map(|it| &**it).unwrap_or_default()) + }; let mut crate_graph = match self { ProjectWorkspace::Json { project, sysroot, rustc_cfg } => project_json_to_crate_graph( @@ -432,7 +436,7 @@ impl ProjectWorkspace { fn project_json_to_crate_graph( rustc_cfg: Vec<CfgFlag>, - load_proc_macro: &mut dyn FnMut(&AbsPath) -> Vec<ProcMacro>, + load_proc_macro: &mut dyn FnMut(&str, &AbsPath) -> Vec<ProcMacro>, load: &mut dyn FnMut(&AbsPath) -> Option<FileId>, project: &ProjectJson, sysroot: &Option<Sysroot>, @@ -452,7 +456,12 @@ fn project_json_to_crate_graph( }) .map(|(crate_id, krate, file_id)| { let env = krate.env.clone().into_iter().collect(); - let proc_macro = krate.proc_macro_dylib_path.clone().map(|it| load_proc_macro(&it)); + let proc_macro = krate.proc_macro_dylib_path.clone().map(|it| { + load_proc_macro( + krate.display_name.as_ref().map(|it| it.canonical_name()).unwrap_or(""), + &it, + ) + }); let target_cfgs = match krate.target.as_deref() { Some(target) => { @@ -513,7 +522,7 @@ fn project_json_to_crate_graph( fn cargo_to_crate_graph( rustc_cfg: Vec<CfgFlag>, override_cfg: &CfgOverrides, - load_proc_macro: &mut dyn FnMut(&AbsPath) -> Vec<ProcMacro>, + load_proc_macro: &mut dyn FnMut(&str, &AbsPath) -> Vec<ProcMacro>, load: &mut dyn FnMut(&AbsPath) -> Option<FileId>, cargo: &CargoWorkspace, build_scripts: &WorkspaceBuildScripts, @@ -571,7 +580,7 @@ fn cargo_to_crate_graph( &cargo[pkg], build_scripts.outputs.get(pkg), cfg_options, - load_proc_macro, + &mut |path| load_proc_macro(&cargo[tgt].name, path), file_id, &cargo[tgt].name, ); @@ -702,7 +711,7 @@ fn handle_rustc_crates( load: &mut dyn FnMut(&AbsPath) -> Option<FileId>, crate_graph: &mut CrateGraph, cfg_options: &CfgOptions, - load_proc_macro: &mut dyn FnMut(&AbsPath) -> Vec<ProcMacro>, + load_proc_macro: &mut dyn FnMut(&str, &AbsPath) -> Vec<ProcMacro>, pkg_to_lib_crate: &mut FxHashMap<la_arena::Idx<crate::PackageData>, CrateId>, public_deps: &SysrootPublicDeps, cargo: &CargoWorkspace, @@ -738,7 +747,7 @@ fn handle_rustc_crates( &rustc_workspace[pkg], None, cfg_options, - load_proc_macro, + &mut |path| load_proc_macro(&rustc_workspace[tgt].name, path), file_id, &rustc_workspace[tgt].name, ); |