From d038892947ce3d587523c4a4b1c6bf7f0f2163dc Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Wed, 8 Mar 2023 14:37:27 +0100 Subject: [PATCH] fix: Fix block defmap not looking into tail expressions for macro calls --- crates/hir-def/src/body/tests/block.rs | 22 ++++++++++++++++++++++ crates/hir-def/src/item_tree/lower.rs | 7 +++++++ 2 files changed, 29 insertions(+) diff --git a/crates/hir-def/src/body/tests/block.rs b/crates/hir-def/src/body/tests/block.rs index 3bba08cfcce..77ac221e590 100644 --- a/crates/hir-def/src/body/tests/block.rs +++ b/crates/hir-def/src/body/tests/block.rs @@ -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 + "#]], + ) +} diff --git a/crates/hir-def/src/item_tree/lower.rs b/crates/hir-def/src/item_tree/lower.rs index 495a8878c33..77b186f8e3f 100644 --- a/crates/hir-def/src/item_tree/lower.rs +++ b/crates/hir-def/src/item_tree/lower.rs @@ -90,6 +90,13 @@ pub(super) fn lower_block(mut self, block: &ast::BlockExpr) -> ItemTree { _ => 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 }