split case / case_match

pull/70/head
Arthur Baars 2021-11-16 15:00:01 +07:00
parent df3a7ca99b
commit d3955c7ae5
2 changed files with 19 additions and 10 deletions

@ -330,14 +330,22 @@ module.exports = grammar({
), ),
case: $ => seq( case: $ => seq(
'case',
field('value', optional($._statement)),
optional($._terminator),
repeat($.when),
optional($.else),
'end'
),
case_match: $ => seq(
'case', 'case',
field('value', optional($._statement)), field('value', optional($._statement)),
optional($._terminator), optional($._terminator),
choice( choice(
repeat($.when), repeat1(field('clauses', $.in_clause)),
repeat($.in_clause),
), ),
optional($.else), optional(field('else', $.else)),
'end' 'end'
), ),
@ -652,6 +660,7 @@ module.exports = grammar({
$.unless, $.unless,
$.for, $.for,
$.case, $.case,
$.case_match,
$.return, $.return,
$.yield, $.yield,
$.break, $.break,

@ -61,13 +61,13 @@ end
----- -----
(program (program
(case (identifier) (case_match (identifier)
(in_clause (in_clause
(integer) (integer)
(then (true)) (then (true))
) )
(else (false))) (else (false)))
(case (identifier) (case_match (identifier)
(in_clause (in_clause
(pattern_variable (identifier)) (pattern_variable (identifier))
(unless_guard (binary (identifier) (integer))) (unless_guard (binary (identifier) (integer)))
@ -81,7 +81,7 @@ end
(else (false)) (else (false))
) )
(case (identifier) (case_match (identifier)
(in_clause (integer)) (in_clause (integer))
(in_clause (array_pattern (integer) (array_pattern_rest))) (in_clause (array_pattern (integer) (array_pattern_rest)))
(in_clause (array_pattern (integer) (integer))) (in_clause (array_pattern (integer) (integer)))
@ -155,7 +155,7 @@ end
-------- --------
(program (program
(case (identifier) (case_match (identifier)
(in_clause (integer)) (in_clause (integer))
(in_clause (variable_reference_pattern (identifier))) (in_clause (variable_reference_pattern (identifier)))
(in_clause (pattern_variable (identifier))) (in_clause (pattern_variable (identifier)))
@ -217,7 +217,7 @@ end
-------------- --------------
(program (program
(case (identifier) (case_match (identifier)
(in_clause (array_pattern)) (in_clause (array_pattern))
(in_clause (array_pattern (pattern_variable (identifier)))) (in_clause (array_pattern (pattern_variable (identifier))))
(in_clause (array_pattern (pattern_variable (identifier)) (array_pattern_rest))) (in_clause (array_pattern (pattern_variable (identifier)) (array_pattern_rest)))
@ -251,7 +251,7 @@ end
------------- -------------
(program (program
(case (identifier) (case_match (identifier)
(in_clause (find_pattern (array_pattern_rest) (pattern_variable (identifier)) (array_pattern_rest))) (in_clause (find_pattern (array_pattern_rest) (pattern_variable (identifier)) (array_pattern_rest)))
(in_clause (find_pattern (array_pattern_rest (identifier)) (integer) (integer) (array_pattern_rest (identifier)))) (in_clause (find_pattern (array_pattern_rest (identifier)) (integer) (integer) (array_pattern_rest (identifier))))
(in_clause (find_pattern (in_clause (find_pattern
@ -280,7 +280,7 @@ end
------------- -------------
(program (case (identifier) (program (case_match (identifier)
(in_clause (hash_pattern)) (in_clause (hash_pattern))
(in_clause (hash_pattern (pattern_pair (hash_key_symbol)))) (in_clause (hash_pattern (pattern_pair (hash_key_symbol))))
(in_clause (hash_pattern (in_clause (hash_pattern