From 67ccbdae96616c1f7f0d0e7965af55296cb0c07c Mon Sep 17 00:00:00 2001 From: Johannes Altmanninger Date: Wed, 11 Dec 2024 09:13:50 +0100 Subject: [PATCH] Refine errors on "begin; case" This will also give better errors for unbalanced braces (which are sigils for begin/end), see a following commit. --- src/ast.rs | 9 +++++++++ src/tests/parser.rs | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ast.rs b/src/ast.rs index c96d5f20d..9c7065149 100644 --- a/src/ast.rs +++ b/src/ast.rs @@ -2970,6 +2970,15 @@ fn did_visit_fields_of<'a>(&'a mut self, node: &'a dyn NodeMut, flow: VisitResul }; if let Some((header_kw_range, enclosing_stmt)) = header { + let next_token = self.peek_token(0); + if next_token.typ == ParseTokenType::string + && matches!( + next_token.keyword, + ParseKeyword::kw_case | ParseKeyword::kw_else | ParseKeyword::kw_end + ) + { + self.consume_excess_token_generating_error(); + } parse_error_range!( self, header_kw_range, diff --git a/src/tests/parser.rs b/src/tests/parser.rs index 9611de929..6a926708e 100644 --- a/src/tests/parser.rs +++ b/src/tests/parser.rs @@ -602,7 +602,7 @@ macro_rules! validate { validate!("if true ; end ; else", ParseErrorCode::unbalancing_else); validate!("case", ParseErrorCode::unbalancing_case); - validate!("if true ; case ; end", ParseErrorCode::generic); + validate!("if true ; case ; end", ParseErrorCode::unbalancing_case); validate!("true | and", ParseErrorCode::andor_in_pipeline);