mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-04 12:44:40 +00:00
Merge #9445
9445: fix: Fix nested macro in block defining items r=jonas-schievink a=jonas-schievink Fixes https://github.com/rust-analyzer/rust-analyzer/issues/8930 bors r+ Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
This commit is contained in:
commit
920b2c8630
@ -312,3 +312,35 @@ mod m {
|
||||
"#]],
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn nested_macro_item_decl() {
|
||||
cov_mark::check!(macro_call_in_macro_stmts_is_added_to_item_tree);
|
||||
check_at(
|
||||
r#"
|
||||
macro_rules! inner_declare {
|
||||
($ident:ident) => {
|
||||
static $ident: u32 = 0;
|
||||
};
|
||||
}
|
||||
macro_rules! declare {
|
||||
($ident:ident) => {
|
||||
inner_declare!($ident);
|
||||
};
|
||||
}
|
||||
|
||||
fn foo() {
|
||||
declare!(bar);
|
||||
bar;
|
||||
$0
|
||||
}
|
||||
"#,
|
||||
expect![[r#"
|
||||
block scope
|
||||
bar: v
|
||||
|
||||
crate
|
||||
foo: v
|
||||
"#]],
|
||||
)
|
||||
}
|
||||
|
@ -51,6 +51,15 @@ impl<'a> Ctx<'a> {
|
||||
.statements()
|
||||
.filter_map(|stmt| match stmt {
|
||||
ast::Stmt::Item(item) => Some(item),
|
||||
// Macro calls can be both items and expressions. The syntax library always treats
|
||||
// them as expressions here, so we undo that.
|
||||
ast::Stmt::ExprStmt(es) => match es.expr()? {
|
||||
ast::Expr::MacroCall(call) => {
|
||||
cov_mark::hit!(macro_call_in_macro_stmts_is_added_to_item_tree);
|
||||
Some(call.into())
|
||||
}
|
||||
_ => None,
|
||||
},
|
||||
_ => None,
|
||||
})
|
||||
.flat_map(|item| self.lower_mod_item(&item, false))
|
||||
|
Loading…
Reference in New Issue
Block a user