File tree Expand file tree Collapse file tree 2 files changed +28
-6
lines changed
crates/hir_def/src/nameres Expand file tree Collapse file tree 2 files changed +28
-6
lines changed Original file line number Diff line number Diff line change @@ -1467,12 +1467,13 @@ impl ModCollector<'_, '_> {
1467
1467
} ,
1468
1468
) {
1469
1469
Ok ( Ok ( macro_call_id) ) => {
1470
- self . def_collector . unexpanded_macros . push ( MacroDirective {
1471
- module_id : self . module_id ,
1472
- ast_id,
1473
- legacy : Some ( macro_call_id) ,
1474
- depth : self . macro_depth + 1 ,
1475
- } ) ;
1470
+ // Legacy macros need to be expanded immediately, so that any macros they produce
1471
+ // are in scope.
1472
+ self . def_collector . collect_macro_expansion (
1473
+ self . module_id ,
1474
+ macro_call_id,
1475
+ self . macro_depth + 1 ,
1476
+ ) ;
1476
1477
1477
1478
return ;
1478
1479
}
Original file line number Diff line number Diff line change @@ -712,6 +712,27 @@ b! { static = #[] ();}
712
712
) ;
713
713
}
714
714
715
+ #[ test]
716
+ fn macros_defining_macros ( ) {
717
+ check (
718
+ r#"
719
+ macro_rules! item {
720
+ ($item:item) => { $item }
721
+ }
722
+
723
+ item! {
724
+ macro_rules! indirect_macro { () => { struct S {} } }
725
+ }
726
+
727
+ indirect_macro!();
728
+ "# ,
729
+ expect ! [ [ r#"
730
+ crate
731
+ S: t
732
+ "# ] ] ,
733
+ ) ;
734
+ }
735
+
715
736
#[ test]
716
737
fn resolves_proc_macros ( ) {
717
738
check (
You can’t perform that action at this time.
0 commit comments