Unnamed repository; edit this file 'description' to name the repository.
Correctly handled cfg'ed tail expr, take 2
Chayim Refael Friedman 5 weeks ago
parent 1f9e3ec · commit 1dd7382
-rw-r--r--crates/hir-def/src/expr_store/lower.rs5
-rw-r--r--crates/hir-def/src/expr_store/tests/body.rs45
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]