@@ -7,7 +7,7 @@ use std::{collections::VecDeque, fmt, fs, process::Command, sync::Arc};
7
7
use anyhow:: { bail, format_err, Context , Result } ;
8
8
use base_db:: {
9
9
CrateDisplayName , CrateGraph , CrateId , CrateName , CrateOrigin , Dependency , Edition , Env ,
10
- FileId , LangCrateOrigin , ProcMacroLoadResult , ProcMacros , TargetLayoutLoadResult ,
10
+ FileId , LangCrateOrigin , ProcMacroPaths , TargetLayoutLoadResult ,
11
11
} ;
12
12
use cfg:: { CfgDiff , CfgOptions } ;
13
13
use paths:: { AbsPath , AbsPathBuf } ;
@@ -576,16 +576,14 @@ impl ProjectWorkspace {
576
576
577
577
pub fn to_crate_graph (
578
578
& self ,
579
- load_proc_macro : & mut dyn FnMut ( & str , & AbsPath ) -> ProcMacroLoadResult ,
580
579
load : & mut dyn FnMut ( & AbsPath ) -> Option < FileId > ,
581
580
extra_env : & FxHashMap < String , String > ,
582
- ) -> ( CrateGraph , ProcMacros ) {
581
+ ) -> ( CrateGraph , ProcMacroPaths ) {
583
582
let _p = profile:: span ( "ProjectWorkspace::to_crate_graph" ) ;
584
583
585
584
let ( mut crate_graph, proc_macros) = match self {
586
585
ProjectWorkspace :: Json { project, sysroot, rustc_cfg } => project_json_to_crate_graph (
587
586
rustc_cfg. clone ( ) ,
588
- load_proc_macro,
589
587
load,
590
588
project,
591
589
sysroot. as_ref ( ) . ok ( ) ,
@@ -602,7 +600,6 @@ impl ProjectWorkspace {
602
600
toolchain : _,
603
601
target_layout,
604
602
} => cargo_to_crate_graph (
605
- load_proc_macro,
606
603
load,
607
604
rustc. as_ref ( ) . ok ( ) ,
608
605
cargo,
@@ -679,15 +676,14 @@ impl ProjectWorkspace {
679
676
680
677
fn project_json_to_crate_graph (
681
678
rustc_cfg : Vec < CfgFlag > ,
682
- load_proc_macro : & mut dyn FnMut ( & str , & AbsPath ) -> ProcMacroLoadResult ,
683
679
load : & mut dyn FnMut ( & AbsPath ) -> Option < FileId > ,
684
680
project : & ProjectJson ,
685
681
sysroot : Option < & Sysroot > ,
686
682
extra_env : & FxHashMap < String , String > ,
687
683
target_layout : TargetLayoutLoadResult ,
688
- ) -> ( CrateGraph , ProcMacros ) {
684
+ ) -> ( CrateGraph , ProcMacroPaths ) {
689
685
let mut crate_graph = CrateGraph :: default ( ) ;
690
- let mut proc_macros = FxHashMap :: < _ , _ > :: default ( ) ;
686
+ let mut proc_macros = FxHashMap :: default ( ) ;
691
687
let sysroot_deps = sysroot. as_ref ( ) . map ( |sysroot| {
692
688
sysroot_to_crate_graph (
693
689
& mut crate_graph,
@@ -708,16 +704,15 @@ fn project_json_to_crate_graph(
708
704
} )
709
705
. map ( |( crate_id, krate, file_id) | {
710
706
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 ( ) {
712
708
proc_macros. insert (
713
709
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
+ ) ) ,
718
714
) ;
719
715
}
720
-
721
716
let target_cfgs = match krate. target . as_deref ( ) {
722
717
Some ( target) => cfg_cache
723
718
. entry ( target)
@@ -782,7 +777,6 @@ fn project_json_to_crate_graph(
782
777
}
783
778
784
779
fn cargo_to_crate_graph (
785
- load_proc_macro : & mut dyn FnMut ( & str , & AbsPath ) -> ProcMacroLoadResult ,
786
780
load : & mut dyn FnMut ( & AbsPath ) -> Option < FileId > ,
787
781
rustc : Option < & ( CargoWorkspace , WorkspaceBuildScripts ) > ,
788
782
cargo : & CargoWorkspace ,
@@ -791,7 +785,7 @@ fn cargo_to_crate_graph(
791
785
override_cfg : & CfgOverrides ,
792
786
build_scripts : & WorkspaceBuildScripts ,
793
787
target_layout : TargetLayoutLoadResult ,
794
- ) -> ( CrateGraph , ProcMacros ) {
788
+ ) -> ( CrateGraph , ProcMacroPaths ) {
795
789
let _p = profile:: span ( "cargo_to_crate_graph" ) ;
796
790
let mut crate_graph = CrateGraph :: default ( ) ;
797
791
let mut proc_macros = FxHashMap :: default ( ) ;
@@ -862,7 +856,6 @@ fn cargo_to_crate_graph(
862
856
& cargo[ pkg] ,
863
857
build_scripts. get_output ( pkg) ,
864
858
cfg_options. clone ( ) ,
865
- & mut |path| load_proc_macro ( & cargo[ tgt] . name , path) ,
866
859
file_id,
867
860
& cargo[ tgt] . name ,
868
861
cargo[ tgt] . is_proc_macro ,
@@ -938,7 +931,6 @@ fn cargo_to_crate_graph(
938
931
& mut proc_macros,
939
932
& mut pkg_to_lib_crate,
940
933
load,
941
- load_proc_macro,
942
934
rustc_workspace,
943
935
cargo,
944
936
& public_deps,
@@ -966,7 +958,7 @@ fn detached_files_to_crate_graph(
966
958
detached_files : & [ AbsPathBuf ] ,
967
959
sysroot : Option < & Sysroot > ,
968
960
target_layout : TargetLayoutLoadResult ,
969
- ) -> ( CrateGraph , ProcMacros ) {
961
+ ) -> ( CrateGraph , ProcMacroPaths ) {
970
962
let _p = profile:: span ( "detached_files_to_crate_graph" ) ;
971
963
let mut crate_graph = CrateGraph :: default ( ) ;
972
964
let ( public_deps, _libproc_macro) = match sysroot {
@@ -1018,10 +1010,9 @@ fn detached_files_to_crate_graph(
1018
1010
1019
1011
fn handle_rustc_crates (
1020
1012
crate_graph : & mut CrateGraph ,
1021
- proc_macros : & mut ProcMacros ,
1013
+ proc_macros : & mut ProcMacroPaths ,
1022
1014
pkg_to_lib_crate : & mut FxHashMap < Package , CrateId > ,
1023
1015
load : & mut dyn FnMut ( & AbsPath ) -> Option < FileId > ,
1024
- load_proc_macro : & mut dyn FnMut ( & str , & AbsPath ) -> ProcMacroLoadResult ,
1025
1016
rustc_workspace : & CargoWorkspace ,
1026
1017
cargo : & CargoWorkspace ,
1027
1018
public_deps : & SysrootPublicDeps ,
@@ -1084,7 +1075,6 @@ fn handle_rustc_crates(
1084
1075
& rustc_workspace[ pkg] ,
1085
1076
build_scripts. get_output ( pkg) ,
1086
1077
cfg_options. clone ( ) ,
1087
- & mut |path| load_proc_macro ( & rustc_workspace[ tgt] . name , path) ,
1088
1078
file_id,
1089
1079
& rustc_workspace[ tgt] . name ,
1090
1080
rustc_workspace[ tgt] . is_proc_macro ,
@@ -1146,11 +1136,10 @@ fn handle_rustc_crates(
1146
1136
1147
1137
fn add_target_crate_root (
1148
1138
crate_graph : & mut CrateGraph ,
1149
- proc_macros : & mut ProcMacros ,
1139
+ proc_macros : & mut ProcMacroPaths ,
1150
1140
pkg : & PackageData ,
1151
1141
build_data : Option < & BuildScriptOutput > ,
1152
1142
cfg_options : CfgOptions ,
1153
- load_proc_macro : & mut dyn FnMut ( & AbsPath ) -> ProcMacroLoadResult ,
1154
1143
file_id : FileId ,
1155
1144
cargo_name : & str ,
1156
1145
is_proc_macro : bool ,
@@ -1197,11 +1186,11 @@ fn add_target_crate_root(
1197
1186
target_layout,
1198
1187
) ;
1199
1188
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 ) ,
1201
1190
None => Some ( Err ( "crate has not (yet) been built" . into ( ) ) ) ,
1202
1191
} ;
1203
1192
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 ) ) ) ;
1205
1194
}
1206
1195
1207
1196
crate_id
0 commit comments