Skip to content
This repository was archived by the owner on Jun 1, 2022. It is now read-only.

Commit fc765c4

Browse files
authored
[#52] Allow pattern matching in case expressions (#53)
1 parent 24d6113 commit fc765c4

File tree

2 files changed

+28
-13
lines changed

2 files changed

+28
-13
lines changed

grammar.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,10 @@ module.exports = grammar({
273273
'->',
274274
choice(
275275
seq('[', field('right', $._simple_expression), ']'),
276-
field('right', alias($.identifier, $.shorthand_access_identifier))
276+
field('right', choice(
277+
alias($.identifier, $.shorthand_access_identifier),
278+
$.number)
279+
)
277280
)
278281
)),
279282

@@ -336,11 +339,11 @@ module.exports = grammar({
336339
),
337340
when_clause: $ => seq(
338341
'when',
339-
field('values', $.expression_list),
342+
field('values', $.pattern_list),
340343
optional('then'),
341344
field('consequence', $.block)
342345
),
343-
expression_list: $ => commaSep1($._simple_expression),
346+
pattern_list: $ => commaSep1($.pattern),
344347

345348
module: $ => seq('module', field('body', $.block)),
346349

test/corpus/expressions.txt

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -367,12 +367,16 @@ a.b.c(1)
367367
access
368368
==================
369369

370+
a->0
370371
a->b(1)
371372
a.b->[c]
372373

373374
---
374375

375376
(program
377+
(access
378+
left: (identifier)
379+
right: (number))
376380
(application
377381
abstraction: (access
378382
left: (identifier)
@@ -497,8 +501,8 @@ a := case a
497501
1
498502

499503
case a
500-
when 1
501-
1
504+
when [1, a]
505+
a
502506
when 1, 1 then 1
503507
else 1
504508

@@ -511,22 +515,30 @@ else 1
511515
value: (identifier)
512516
branches: (when_clauses
513517
(when_clause
514-
values: (expression_list
515-
(number))
518+
values: (pattern_list
519+
(pattern
520+
value: (number)))
516521
consequence: (block
517522
(number))))))
518523
(case
519524
value: (identifier)
520525
branches: (when_clauses
521526
(when_clause
522-
values: (expression_list
523-
(number))
527+
values: (pattern_list
528+
(pattern
529+
pattern: (list_pattern
530+
(pattern
531+
value: (number))
532+
(pattern
533+
name: (identifier_pattern)))))
524534
consequence: (block
525-
(number)))
535+
(identifier)))
526536
(when_clause
527-
values: (expression_list
528-
(number)
529-
(number))
537+
values: (pattern_list
538+
(pattern
539+
value: (number))
540+
(pattern
541+
value: (number)))
530542
consequence: (block
531543
(number))))
532544
default: (block

0 commit comments

Comments
 (0)