diff --git a/grammar.js b/grammar.js index 321fc81..815713a 100644 --- a/grammar.js +++ b/grammar.js @@ -895,15 +895,14 @@ module.exports = grammar({ _case_terminator: ($) => choice($._block_terminator, seq(kw("END"), kw("CASE"), $._terminator)), - _case_branch_body: ($) => choice($.do_block, $._terminated_statement), + _case_branch_body: ($) => + choice($.do_block, field("statement", $._terminated_statement)), + + case_conditon: ($) => + seq(optional(seq(kw("OR"), kw("WHEN"))), $._expression), case_when_branch: ($) => - seq( - kw("WHEN"), - field("condition", $._expression), - kw("THEN"), - $._case_branch_body - ), + seq(kw("WHEN"), repeat($.case_conditon), kw("THEN"), $._case_branch_body), case_otherwise_branch: ($) => seq(kw("OTHERWISE"), $._case_branch_body), case_body: ($) => diff --git a/test/corpus/basic.txt b/test/corpus/basic.txt index da22a86..80ceb3d 100644 --- a/test/corpus/basic.txt +++ b/test/corpus/basic.txt @@ -1595,6 +1595,7 @@ CASE test: x = 5. y = 20. END. + WHEN "yyy" OR WHEN "zxc" THEN y = 3. WHEN "def" THEN y = 10. OTHERWISE c = 8. END CASE. @@ -1606,7 +1607,8 @@ END CASE. (identifier) (body (case_when_branch - (double_quoted_string) + (case_conditon + (double_quoted_string)) (do_block (body (variable_assignment @@ -1618,7 +1620,19 @@ END CASE. (identifier) (number_literal)))))) (case_when_branch - (double_quoted_string) + (case_conditon + (logical_expression + (double_quoted_string) + (identifier))) + (case_conditon + (double_quoted_string)) + (variable_assignment + (assignment + (identifier) + (number_literal)))) + (case_when_branch + (case_conditon + (double_quoted_string)) (variable_assignment (assignment (identifier)