diff options
| author | Lukas Wirth <lukastw97@gmail.com> | 2024-12-02 13:35:58 +0100 |
|---|---|---|
| committer | Lukas Wirth <lukastw97@gmail.com> | 2024-12-02 13:35:58 +0100 |
| commit | 03ae70dcacf96e50c52b0df20a99d655d33255d4 (patch) | |
| tree | 55a14159812dabf4ffe8222c12d3f1a6dfdcee8f | |
| parent | b747197a8278c90f0ff198ccf8a17335f53f9022 (diff) | |
| download | rust-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.rs | 18 |
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 () {{} {}} +"#]], + ); + } } |
