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);