Unnamed repository; edit this file 'description' to name the repository.
Correctly handled cfg'ed tail expr, take 2
| -rw-r--r-- | crates/hir-def/src/expr_store/lower.rs | 5 | ||||
| -rw-r--r-- | crates/hir-def/src/expr_store/tests/body.rs | 45 |
2 files changed, 47 insertions, 3 deletions
diff --git a/crates/hir-def/src/expr_store/lower.rs b/crates/hir-def/src/expr_store/lower.rs index 5c81ec7ece..0a1c23c2cc 100644 --- a/crates/hir-def/src/expr_store/lower.rs +++ b/crates/hir-def/src/expr_store/lower.rs @@ -2431,7 +2431,7 @@ impl<'db> ExprCollector<'db> { expansion.statements().for_each(|stmt| this.collect_stmt(statements, stmt)); expansion.expr().and_then(|expr| match expr { ast::Expr::MacroExpr(mac) => this.collect_macro_as_stmt(statements, mac), - expr => Some(this.collect_expr(expr)), + expr => this.maybe_collect_expr(expr), }) } None => None, @@ -2468,8 +2468,7 @@ impl<'db> ExprCollector<'db> { if let Some(expr) = self.collect_macro_as_stmt(statements, mac) { statements.push(Statement::Expr { expr, has_semi }) } - } else { - let expr = self.collect_expr_opt(expr); + } else if let Some(expr) = expr.and_then(|expr| self.maybe_collect_expr(expr)) { statements.push(Statement::Expr { expr, has_semi }); } } diff --git a/crates/hir-def/src/expr_store/tests/body.rs b/crates/hir-def/src/expr_store/tests/body.rs index 21bb6698af..c7b9edf393 100644 --- a/crates/hir-def/src/expr_store/tests/body.rs +++ b/crates/hir-def/src/expr_store/tests/body.rs @@ -715,6 +715,51 @@ fn foo() -> i64 { } }"#]], ); + pretty_print( + r#" +fn foo() -> i64 { + #[cfg(true)] + { + 5 + } + #[cfg(false)] + { + 4 + } + #[cfg(false)] + { + 3 + } +} + "#, + expect![[r#" + fn foo() { + { + 5 + } + }"#]], + ); + pretty_print( + r#" +macro_rules! m { + () => { + { 5 } + #[cfg(false)] + { 4 } + }; +} + +fn foo() -> i64 { + m!() +} + "#, + expect![[r#" + fn foo() { + { + 5 + } + }"#]], + ); } #[test] |