about summary refs log tree commit diff
diff options
context:
space:
mode:
authorjnyfah <jnyfaah@gmail.com>2025-01-16 12:54:26 +0100
committerjnyfah <jnyfaah@gmail.com>2025-01-16 12:54:26 +0100
commit715e457500dd8a9f06f2fa92426a6266a1bf88f6 (patch)
tree20f72f62c599d0720d24b706435b8e21247e38a4
parent39a1bb9e9841762c5e49586f6b245ddd43cd028c (diff)
downloadrust-715e457500dd8a9f06f2fa92426a6266a1bf88f6.tar.gz
rust-715e457500dd8a9f06f2fa92426a6266a1bf88f6.zip
revert blocklike changes
-rw-r--r--src/tools/rust-analyzer/crates/parser/src/grammar.rs5
-rw-r--r--src/tools/rust-analyzer/crates/parser/src/grammar/expressions.rs10
-rw-r--r--src/tools/rust-analyzer/crates/parser/src/grammar/expressions/atom.rs2
3 files changed, 9 insertions, 8 deletions
diff --git a/src/tools/rust-analyzer/crates/parser/src/grammar.rs b/src/tools/rust-analyzer/crates/parser/src/grammar.rs
index d3aa56c7ebd..fe6b904bd88 100644
--- a/src/tools/rust-analyzer/crates/parser/src/grammar.rs
+++ b/src/tools/rust-analyzer/crates/parser/src/grammar.rs
@@ -204,9 +204,8 @@ impl BlockLike {
         self == BlockLike::Block
     }
 
-    fn is_blocklike(expr: &CompletedMarker, p: &Parser<'_>) -> bool {
-        matches!(expr.kind(), BLOCK_EXPR | IF_EXPR | WHILE_EXPR | FOR_EXPR | LOOP_EXPR | MATCH_EXPR)
-            || (expr.last_token(p) == Some(T!['}']) && !matches!(expr.kind(), CLOSURE_EXPR))
+    fn is_blocklike(kind: SyntaxKind) -> bool {
+        matches!(kind, BLOCK_EXPR | IF_EXPR | WHILE_EXPR | FOR_EXPR | LOOP_EXPR | MATCH_EXPR)
     }
 }
 
diff --git a/src/tools/rust-analyzer/crates/parser/src/grammar/expressions.rs b/src/tools/rust-analyzer/crates/parser/src/grammar/expressions.rs
index e7ba33bcb64..6494ce8d718 100644
--- a/src/tools/rust-analyzer/crates/parser/src/grammar/expressions.rs
+++ b/src/tools/rust-analyzer/crates/parser/src/grammar/expressions.rs
@@ -134,10 +134,12 @@ pub(super) fn let_stmt(p: &mut Parser<'_>, with_semi: Semicolon) {
         // test_err let_else_right_curly_brace
         // fn func() { let Some(_) = {Some(1)} else { panic!("h") };}
         if let Some(expr) = expr_after_eq {
-            if BlockLike::is_blocklike(&expr, p) {
-                p.error(
-                    "right curly brace `}` before `else` in a `let...else` statement not allowed",
-                )
+            if let Some(token) = expr.last_token(p) {
+                if token == T!['}'] {
+                    p.error(
+                        "right curly brace `}` before `else` in a `let...else` statement not allowed"
+                    )
+                }
             }
         }
 
diff --git a/src/tools/rust-analyzer/crates/parser/src/grammar/expressions/atom.rs b/src/tools/rust-analyzer/crates/parser/src/grammar/expressions/atom.rs
index 40705d4a392..407320e1d08 100644
--- a/src/tools/rust-analyzer/crates/parser/src/grammar/expressions/atom.rs
+++ b/src/tools/rust-analyzer/crates/parser/src/grammar/expressions/atom.rs
@@ -198,7 +198,7 @@ pub(super) fn atom_expr(
         }
     };
     let blocklike =
-        if BlockLike::is_blocklike(&done, p) { BlockLike::Block } else { BlockLike::NotBlock };
+        if BlockLike::is_blocklike(done.kind()) { BlockLike::Block } else { BlockLike::NotBlock };
     Some((done, blocklike))
 }