Skip to content

Commit

Permalink
update blocklike
Browse files Browse the repository at this point in the history
  • Loading branch information
jnyfah committed Jan 16, 2025
1 parent 11717ca commit e3deeec
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 13 deletions.
2 changes: 1 addition & 1 deletion crates/parser/src/event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use crate::{
/// `Parser` produces a flat list of `Event`s.
/// They are converted to a tree-structure in
/// a separate pass, via `TreeBuilder`.
#[derive(Debug)]
#[derive(Debug, PartialEq)]
pub(crate) enum Event {
/// This event signifies the start of the node.
/// It should be either abandoned (in which case the
Expand Down
5 changes: 3 additions & 2 deletions crates/parser/src/grammar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -204,8 +204,9 @@ impl BlockLike {
self == BlockLike::Block
}

fn is_blocklike(kind: SyntaxKind) -> bool {
matches!(kind, BLOCK_EXPR | IF_EXPR | WHILE_EXPR | FOR_EXPR | LOOP_EXPR | MATCH_EXPR)
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))
}
}

Expand Down
10 changes: 4 additions & 6 deletions crates/parser/src/grammar/expressions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -134,12 +134,10 @@ 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 let Some(token) = expr.last_token(p) {
if token == T!['}'] {
p.error(
"right curly brace `}` before `else` in a `let...else` statement not allowed"
)
}
if BlockLike::is_blocklike(&expr, p) {
p.error(
"right curly brace `}` before `else` in a `let...else` statement not allowed",
)
}
}

Expand Down
2 changes: 1 addition & 1 deletion crates/parser/src/grammar/expressions/atom.rs
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ pub(super) fn atom_expr(
}
};
let blocklike =
if BlockLike::is_blocklike(done.kind()) { BlockLike::Block } else { BlockLike::NotBlock };
if BlockLike::is_blocklike(&done, p) { BlockLike::Block } else { BlockLike::NotBlock };
Some((done, blocklike))
}

Expand Down
4 changes: 1 addition & 3 deletions crates/parser/src/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -391,9 +391,7 @@ impl CompletedMarker {

pub(crate) fn last_token(&self, p: &Parser<'_>) -> Option<SyntaxKind> {
let end_pos = self.end_pos as usize;
if end_pos > p.events.len() {
return None;
}
debug_assert_eq!(p.events[end_pos - 1], Event::Finish);
p.events[..end_pos].iter().rev().find_map(|event| match event {
Event::Token { kind, .. } => Some(*kind),
_ => None,
Expand Down

0 comments on commit e3deeec

Please sign in to comment.