about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2024-12-02 13:35:58 +0100
committerLukas Wirth <lukastw97@gmail.com>2024-12-02 13:35:58 +0100
commit03ae70dcacf96e50c52b0df20a99d655d33255d4 (patch)
tree55a14159812dabf4ffe8222c12d3f1a6dfdcee8f
parentb747197a8278c90f0ff198ccf8a17335f53f9022 (diff)
downloadrust-03ae70dcacf96e50c52b0df20a99d655d33255d4.tar.gz
rust-03ae70dcacf96e50c52b0df20a99d655d33255d4.zip
fix: Fix syntax fixup inserting unnecessary semicolons
-rw-r--r--src/tools/rust-analyzer/crates/hir-expand/src/fixup.rs18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/tools/rust-analyzer/crates/hir-expand/src/fixup.rs b/src/tools/rust-analyzer/crates/hir-expand/src/fixup.rs
index b6d5828da96..0af29681a13 100644
--- a/src/tools/rust-analyzer/crates/hir-expand/src/fixup.rs
+++ b/src/tools/rust-analyzer/crates/hir-expand/src/fixup.rs
@@ -110,7 +110,8 @@ pub(crate) fn fixup_syntax(
                     }
                 },
                 ast::ExprStmt(it) => {
-                    if it.semicolon_token().is_none() {
+                    let needs_semi = it.semicolon_token().is_none() && it.expr().map_or(false, |e| e.syntax().kind() != SyntaxKind::BLOCK_EXPR);
+                    if needs_semi {
                         append.insert(node.clone().into(), vec![
                             Leaf::Punct(Punct {
                                 char: ';',
@@ -908,4 +909,19 @@ fn foo () {|| __ra_fixup}
 "#]],
         );
     }
+
+    #[test]
+    fn fixup_regression_() {
+        check(
+            r#"
+fn foo() {
+    {}
+    {}
+}
+"#,
+            expect![[r#"
+fn foo () {{} {}}
+"#]],
+        );
+    }
 }