@@ -7,7 +7,7 @@ use std::{collections::VecDeque, fmt, fs, process::Command, sync::Arc};
77use anyhow:: { bail, format_err, Context , Result } ;
88use base_db:: {
99 CrateDisplayName , CrateGraph , CrateId , CrateName , CrateOrigin , Dependency , Edition , Env ,
10- FileId , LangCrateOrigin , ProcMacroLoadResult , ProcMacros , TargetLayoutLoadResult ,
10+ FileId , LangCrateOrigin , ProcMacroPaths , TargetLayoutLoadResult ,
1111} ;
1212use cfg:: { CfgDiff , CfgOptions } ;
1313use paths:: { AbsPath , AbsPathBuf } ;
@@ -576,16 +576,14 @@ impl ProjectWorkspace {
576576
577577 pub fn to_crate_graph (
578578 & self ,
579- load_proc_macro : & mut dyn FnMut ( & str , & AbsPath ) -> ProcMacroLoadResult ,
580579 load : & mut dyn FnMut ( & AbsPath ) -> Option < FileId > ,
581580 extra_env : & FxHashMap < String , String > ,
582- ) -> ( CrateGraph , ProcMacros ) {
581+ ) -> ( CrateGraph , ProcMacroPaths ) {
583582 let _p = profile:: span ( "ProjectWorkspace::to_crate_graph" ) ;
584583
585584 let ( mut crate_graph, proc_macros) = match self {
586585 ProjectWorkspace :: Json { project, sysroot, rustc_cfg } => project_json_to_crate_graph (
587586 rustc_cfg. clone ( ) ,
588- load_proc_macro,
589587 load,
590588 project,
591589 sysroot. as_ref ( ) . ok ( ) ,
@@ -602,7 +600,6 @@ impl ProjectWorkspace {
602600 toolchain : _,
603601 target_layout,
604602 } => cargo_to_crate_graph (
605- load_proc_macro,
606603 load,
607604 rustc. as_ref ( ) . ok ( ) ,
608605 cargo,
@@ -679,15 +676,14 @@ impl ProjectWorkspace {
679676
680677fn project_json_to_crate_graph (
681678 rustc_cfg : Vec < CfgFlag > ,
682- load_proc_macro : & mut dyn FnMut ( & str , & AbsPath ) -> ProcMacroLoadResult ,
683679 load : & mut dyn FnMut ( & AbsPath ) -> Option < FileId > ,
684680 project : & ProjectJson ,
685681 sysroot : Option < & Sysroot > ,
686682 extra_env : & FxHashMap < String , String > ,
687683 target_layout : TargetLayoutLoadResult ,
688- ) -> ( CrateGraph , ProcMacros ) {
684+ ) -> ( CrateGraph , ProcMacroPaths ) {
689685 let mut crate_graph = CrateGraph :: default ( ) ;
690- let mut proc_macros = FxHashMap :: < _ , _ > :: default ( ) ;
686+ let mut proc_macros = FxHashMap :: default ( ) ;
691687 let sysroot_deps = sysroot. as_ref ( ) . map ( |sysroot| {
692688 sysroot_to_crate_graph (
693689 & mut crate_graph,
@@ -708,16 +704,15 @@ fn project_json_to_crate_graph(
708704 } )
709705 . map ( |( crate_id, krate, file_id) | {
710706 let env = krate. env . clone ( ) . into_iter ( ) . collect ( ) ;
711- if let Some ( it ) = krate. proc_macro_dylib_path . clone ( ) {
707+ if let Some ( path ) = krate. proc_macro_dylib_path . clone ( ) {
712708 proc_macros. insert (
713709 crate_id,
714- load_proc_macro (
715- krate. display_name . as_ref ( ) . map ( |it| it. canonical_name ( ) ) . unwrap_or ( "" ) ,
716- & it ,
717- ) ,
710+ Ok ( (
711+ krate. display_name . as_ref ( ) . map ( |it| it. canonical_name ( ) . to_owned ( ) ) ,
712+ path ,
713+ ) ) ,
718714 ) ;
719715 }
720-
721716 let target_cfgs = match krate. target . as_deref ( ) {
722717 Some ( target) => cfg_cache
723718 . entry ( target)
@@ -782,7 +777,6 @@ fn project_json_to_crate_graph(
782777}
783778
784779fn cargo_to_crate_graph (
785- load_proc_macro : & mut dyn FnMut ( & str , & AbsPath ) -> ProcMacroLoadResult ,
786780 load : & mut dyn FnMut ( & AbsPath ) -> Option < FileId > ,
787781 rustc : Option < & ( CargoWorkspace , WorkspaceBuildScripts ) > ,
788782 cargo : & CargoWorkspace ,
@@ -791,7 +785,7 @@ fn cargo_to_crate_graph(
791785 override_cfg : & CfgOverrides ,
792786 build_scripts : & WorkspaceBuildScripts ,
793787 target_layout : TargetLayoutLoadResult ,
794- ) -> ( CrateGraph , ProcMacros ) {
788+ ) -> ( CrateGraph , ProcMacroPaths ) {
795789 let _p = profile:: span ( "cargo_to_crate_graph" ) ;
796790 let mut crate_graph = CrateGraph :: default ( ) ;
797791 let mut proc_macros = FxHashMap :: default ( ) ;
@@ -862,7 +856,6 @@ fn cargo_to_crate_graph(
862856 & cargo[ pkg] ,
863857 build_scripts. get_output ( pkg) ,
864858 cfg_options. clone ( ) ,
865- & mut |path| load_proc_macro ( & cargo[ tgt] . name , path) ,
866859 file_id,
867860 & cargo[ tgt] . name ,
868861 cargo[ tgt] . is_proc_macro ,
@@ -938,7 +931,6 @@ fn cargo_to_crate_graph(
938931 & mut proc_macros,
939932 & mut pkg_to_lib_crate,
940933 load,
941- load_proc_macro,
942934 rustc_workspace,
943935 cargo,
944936 & public_deps,
@@ -966,7 +958,7 @@ fn detached_files_to_crate_graph(
966958 detached_files : & [ AbsPathBuf ] ,
967959 sysroot : Option < & Sysroot > ,
968960 target_layout : TargetLayoutLoadResult ,
969- ) -> ( CrateGraph , ProcMacros ) {
961+ ) -> ( CrateGraph , ProcMacroPaths ) {
970962 let _p = profile:: span ( "detached_files_to_crate_graph" ) ;
971963 let mut crate_graph = CrateGraph :: default ( ) ;
972964 let ( public_deps, _libproc_macro) = match sysroot {
@@ -1018,10 +1010,9 @@ fn detached_files_to_crate_graph(
10181010
10191011fn handle_rustc_crates (
10201012 crate_graph : & mut CrateGraph ,
1021- proc_macros : & mut ProcMacros ,
1013+ proc_macros : & mut ProcMacroPaths ,
10221014 pkg_to_lib_crate : & mut FxHashMap < Package , CrateId > ,
10231015 load : & mut dyn FnMut ( & AbsPath ) -> Option < FileId > ,
1024- load_proc_macro : & mut dyn FnMut ( & str , & AbsPath ) -> ProcMacroLoadResult ,
10251016 rustc_workspace : & CargoWorkspace ,
10261017 cargo : & CargoWorkspace ,
10271018 public_deps : & SysrootPublicDeps ,
@@ -1084,7 +1075,6 @@ fn handle_rustc_crates(
10841075 & rustc_workspace[ pkg] ,
10851076 build_scripts. get_output ( pkg) ,
10861077 cfg_options. clone ( ) ,
1087- & mut |path| load_proc_macro ( & rustc_workspace[ tgt] . name , path) ,
10881078 file_id,
10891079 & rustc_workspace[ tgt] . name ,
10901080 rustc_workspace[ tgt] . is_proc_macro ,
@@ -1146,11 +1136,10 @@ fn handle_rustc_crates(
11461136
11471137fn add_target_crate_root (
11481138 crate_graph : & mut CrateGraph ,
1149- proc_macros : & mut ProcMacros ,
1139+ proc_macros : & mut ProcMacroPaths ,
11501140 pkg : & PackageData ,
11511141 build_data : Option < & BuildScriptOutput > ,
11521142 cfg_options : CfgOptions ,
1153- load_proc_macro : & mut dyn FnMut ( & AbsPath ) -> ProcMacroLoadResult ,
11541143 file_id : FileId ,
11551144 cargo_name : & str ,
11561145 is_proc_macro : bool ,
@@ -1197,11 +1186,11 @@ fn add_target_crate_root(
11971186 target_layout,
11981187 ) ;
11991188 let proc_macro = match build_data. as_ref ( ) . map ( |it| & it. proc_macro_dylib_path ) {
1200- Some ( it) => it. as_deref ( ) . map ( load_proc_macro ) ,
1189+ Some ( it) => it. clone ( ) . map ( Ok ) ,
12011190 None => Some ( Err ( "crate has not (yet) been built" . into ( ) ) ) ,
12021191 } ;
12031192 if let Some ( proc_macro) = proc_macro {
1204- proc_macros. insert ( crate_id, proc_macro) ;
1193+ proc_macros. insert ( crate_id, proc_macro. map ( |path| ( Some ( cargo_name . to_owned ( ) ) , path ) ) ) ;
12051194 }
12061195
12071196 crate_id
0 commit comments