@@ -74,26 +74,25 @@ pub(super) fn collect_defs(db: &dyn DefDatabase, mut def_map: DefMap, tree_id: T
7474 }
7575
7676 let cfg_options = & krate. cfg_options ;
77- let ( proc_macros, proc_macro_err ) = match & krate. proc_macro {
77+ let proc_macros = match & krate. proc_macro {
7878 Ok ( proc_macros) => {
79- (
80- proc_macros
81- . iter ( )
82- . enumerate ( )
83- . map ( | ( idx , it ) | {
84- // FIXME: a hacky way to create a Name from string.
85- let name =
86- tt :: Ident { text : it . name . clone ( ) , id : tt :: TokenId :: unspecified ( ) } ;
87- (
88- name . as_name ( ) ,
89- ProcMacroExpander :: new ( def_map . krate , base_db :: ProcMacroId ( idx as u32 ) ) ,
90- )
91- } )
92- . collect ( ) ,
93- None ,
94- )
79+ proc_macros
80+ . iter ( )
81+ . enumerate ( )
82+ . map ( | ( idx , it ) | {
83+ // FIXME: a hacky way to create a Name from string.
84+ let name = tt :: Ident { text : it . name . clone ( ) , id : tt :: TokenId :: unspecified ( ) } ;
85+ (
86+ name. as_name ( ) ,
87+ ProcMacroExpander :: new ( def_map . krate , base_db :: ProcMacroId ( idx as u32 ) ) ,
88+ )
89+ } )
90+ . collect ( )
91+ }
92+ Err ( e ) => {
93+ def_map . proc_macro_loading_error = Some ( e . clone ( ) . into_boxed_str ( ) ) ;
94+ Vec :: new ( )
9595 }
96- Err ( e) => ( Vec :: new ( ) , Some ( e. clone ( ) ) ) ,
9796 } ;
9897 let is_proc_macro = krate. is_proc_macro ;
9998
@@ -108,7 +107,6 @@ pub(super) fn collect_defs(db: &dyn DefDatabase, mut def_map: DefMap, tree_id: T
108107 mod_dirs : FxHashMap :: default ( ) ,
109108 cfg_options,
110109 proc_macros,
111- proc_macro_err,
112110 from_glob_import : Default :: default ( ) ,
113111 skip_attrs : Default :: default ( ) ,
114112 derive_helpers_in_scope : Default :: default ( ) ,
@@ -250,7 +248,6 @@ struct DefCollector<'a> {
250248 /// empty when proc. macro support is disabled (in which case we still do name resolution for
251249 /// them).
252250 proc_macros : Vec < ( Name , ProcMacroExpander ) > ,
253- proc_macro_err : Option < String > ,
254251 is_proc_macro : bool ,
255252 from_glob_import : PerNsGlobImports ,
256253 /// If we fail to resolve an attribute on a `ModItem`, we fall back to ignoring the attribute.
@@ -1147,7 +1144,7 @@ impl DefCollector<'_> {
11471144 invoc_attr_index : attr. id . ast_index ,
11481145 is_derive : false ,
11491146 } ,
1150- self . proc_macro_err . clone ( ) ,
1147+ None ,
11511148 ) ) ;
11521149 return true ;
11531150 }
@@ -1254,7 +1251,7 @@ impl DefCollector<'_> {
12541251 self . def_map . diagnostics . push ( DefDiagnostic :: unresolved_proc_macro (
12551252 directive. module_id ,
12561253 loc. kind ,
1257- self . proc_macro_err . clone ( ) ,
1254+ Some ( loc . def . krate ) ,
12581255 ) ) ;
12591256
12601257 return recollect_without ( self ) ;
@@ -1309,7 +1306,7 @@ impl DefCollector<'_> {
13091306 DefDiagnostic :: unresolved_proc_macro (
13101307 module_id,
13111308 loc. kind . clone ( ) ,
1312- self . proc_macro_err . clone ( ) ,
1309+ Some ( loc . def . krate ) ,
13131310 )
13141311 }
13151312 _ => DefDiagnostic :: macro_error ( module_id, loc. kind . clone ( ) , err. to_string ( ) ) ,
@@ -2124,7 +2121,6 @@ mod tests {
21242121 mod_dirs : FxHashMap :: default ( ) ,
21252122 cfg_options : & CfgOptions :: default ( ) ,
21262123 proc_macros : Default :: default ( ) ,
2127- proc_macro_err : None ,
21282124 from_glob_import : Default :: default ( ) ,
21292125 skip_attrs : Default :: default ( ) ,
21302126 derive_helpers_in_scope : Default :: default ( ) ,
0 commit comments