Auto merge of #14286 - Veykril:block-def-tail-mac, r=Veykril

fix: Fix block defmap not looking into tail expressions for macro calls

Fixes https://github.com/rust-lang/rust-analyzer/issues/14263
This commit is contained in:
bors 2023-03-08 13:37:47 +00:00
commit 3d904e024b
2 changed files with 29 additions and 0 deletions

View File

@ -395,3 +395,25 @@ fn foo() {
"#]],
)
}
#[test]
fn trailing_expr_macro_expands_stmts() {
check_at(
r#"
macro_rules! foo {
() => { const FOO: u32 = 0;const BAR: u32 = 0; };
}
fn f() {$0
foo!{}
};
"#,
expect![[r#"
block scope
BAR: v
FOO: v
crate
f: v
"#]],
)
}

View File

@ -90,6 +90,13 @@ impl<'a> Ctx<'a> {
_ => None,
})
.collect();
if let Some(ast::Expr::MacroExpr(expr)) = block.tail_expr() {
if let Some(call) = expr.macro_call() {
if let Some(mod_item) = self.lower_mod_item(&call.into()) {
self.tree.top_level.push(mod_item);
}
}
}
self.tree
}