@@ -30,7 +30,10 @@ use rustc_span::{BytePos, Span, SyntaxContext};
3030use  thin_vec:: { thin_vec,  ThinVec } ; 
3131
3232use  crate :: errors:: { AddedMacroUse ,  ChangeImportBinding ,  ChangeImportBindingSuggestion } ; 
33- use  crate :: errors:: { ConsiderAddingADerive ,  ExplicitUnsafeTraits ,  MaybeMissingMacroRulesName } ; 
33+ use  crate :: errors:: { 
34+     ConsiderAddingADerive ,  ExplicitUnsafeTraits ,  MacroDefinedLater ,  MacroSuggMovePosition , 
35+     MaybeMissingMacroRulesName , 
36+ } ; 
3437use  crate :: imports:: { Import ,  ImportKind } ; 
3538use  crate :: late:: { PatternSource ,  Rib } ; 
3639use  crate :: path_names_to_string; 
@@ -1439,6 +1442,24 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
14391442            return ; 
14401443        } 
14411444
1445+         let  unused_macro = self . unused_macros . iter ( ) . find_map ( |( def_id,  ( _,  unused_ident) ) | { 
1446+             if  unused_ident. name  == ident. name  { 
1447+                 Some ( ( def_id. clone ( ) ,  unused_ident. clone ( ) ) ) 
1448+             }  else  { 
1449+                 None 
1450+             } 
1451+         } ) ; 
1452+ 
1453+         if  let  Some ( ( def_id,  unused_ident) )  = unused_macro { 
1454+             let  scope = self . local_macro_def_scopes [ & def_id] ; 
1455+             let  parent_nearest = parent_scope. module . nearest_parent_mod ( ) ; 
1456+             if  Some ( parent_nearest)  == scope. opt_def_id ( )  { 
1457+                 err. subdiagnostic ( MacroDefinedLater  {  span :  unused_ident. span  } ) ; 
1458+                 err. subdiagnostic ( MacroSuggMovePosition  {  span :  ident. span ,  ident } ) ; 
1459+                 return ; 
1460+             } 
1461+         } 
1462+ 
14421463        if  self . macro_names . contains ( & ident. normalize_to_macros_2_0 ( ) )  { 
14431464            err. subdiagnostic ( AddedMacroUse ) ; 
14441465            return ; 
0 commit comments