Skip to content

Commit 2a15634

Browse files
authored
Merge pull request #158 from brandonspark/switch-pattern-matching
feat(java 21): complete pattern matching for switch statements
2 parents 0b3f9cf + 65cf2e0 commit 2a15634

File tree

5 files changed

+28214
-27547
lines changed

5 files changed

+28214
-27547
lines changed

grammar.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,13 @@ module.exports = grammar({
482482
),
483483

484484
switch_label: $ => choice(
485-
seq('case', choice($.pattern, commaSep1($.expression))),
485+
seq('case',
486+
choice(
487+
$.pattern,
488+
commaSep1($.expression)
489+
),
490+
optional($.guard)
491+
),
486492
'default'
487493
),
488494

@@ -498,6 +504,8 @@ module.exports = grammar({
498504
choice($.identifier, $._reserved_identifier)
499505
),
500506

507+
guard: $ => seq('when', $.expression),
508+
501509
// Statements
502510

503511
statement: $ => choice(

src/grammar.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3684,6 +3684,18 @@
36843684
]
36853685
}
36863686
]
3687+
},
3688+
{
3689+
"type": "CHOICE",
3690+
"members": [
3691+
{
3692+
"type": "SYMBOL",
3693+
"name": "guard"
3694+
},
3695+
{
3696+
"type": "BLANK"
3697+
}
3698+
]
36873699
}
36883700
]
36893701
},
@@ -3840,6 +3852,19 @@
38403852
}
38413853
]
38423854
},
3855+
"guard": {
3856+
"type": "SEQ",
3857+
"members": [
3858+
{
3859+
"type": "STRING",
3860+
"value": "when"
3861+
},
3862+
{
3863+
"type": "SYMBOL",
3864+
"name": "expression"
3865+
}
3866+
]
3867+
},
38433868
"statement": {
38443869
"type": "CHOICE",
38453870
"members": [

src/node-types.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2143,6 +2143,21 @@
21432143
]
21442144
}
21452145
},
2146+
{
2147+
"type": "guard",
2148+
"named": true,
2149+
"fields": {},
2150+
"children": {
2151+
"multiple": false,
2152+
"required": true,
2153+
"types": [
2154+
{
2155+
"type": "expression",
2156+
"named": true
2157+
}
2158+
]
2159+
}
2160+
},
21462161
{
21472162
"type": "if_statement",
21482163
"named": true,
@@ -3503,6 +3518,10 @@
35033518
"type": "expression",
35043519
"named": true
35053520
},
3521+
{
3522+
"type": "guard",
3523+
"named": true
3524+
},
35063525
{
35073526
"type": "pattern",
35083527
"named": true
@@ -4512,6 +4531,10 @@
45124531
"type": "volatile",
45134532
"named": false
45144533
},
4534+
{
4535+
"type": "when",
4536+
"named": false
4537+
},
45154538
{
45164539
"type": "while",
45174540
"named": false

0 commit comments

Comments
 (0)