Skip to content

Commit 08a8a0c

Browse files
authored
Merge pull request #95 from tree-sitter/formal-parameters-tweak
Allow trailing commas in formal parameters
2 parents 774de18 + f699a75 commit 08a8a0c

File tree

4 files changed

+67282
-67156
lines changed

4 files changed

+67282
-67156
lines changed

corpus/expressions.txt

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,9 @@ Functions
478478
function(arg1, ...arg2) {
479479
arg2;
480480
},
481-
function stuff() {}
481+
function stuff() {},
482+
function trailing(a,) {},
483+
function trailing(a,b,) {}
482484
]
483485

484486
---
@@ -495,6 +497,14 @@ Functions
495497
(function
496498
(identifier)
497499
(formal_parameters)
500+
(statement_block))
501+
(function
502+
(identifier)
503+
(formal_parameters (identifier))
504+
(statement_block))
505+
(function
506+
(identifier)
507+
(formal_parameters (identifier) (identifier))
498508
(statement_block)))))
499509

500510
===================================================
@@ -507,6 +517,8 @@ a => 1;
507517
(f, g) => {
508518
return h;
509519
};
520+
(trailing,) => 4;
521+
(h, trailing,) => 5;
510522
(set, kv) => 2;
511523

512524
---
@@ -525,6 +537,12 @@ a => 1;
525537
(formal_parameters (identifier) (identifier))
526538
(statement_block
527539
(return_statement (identifier)))))
540+
(expression_statement (arrow_function
541+
(formal_parameters (identifier))
542+
(number)))
543+
(expression_statement (arrow_function
544+
(formal_parameters (identifier) (identifier))
545+
(number)))
528546
(expression_statement (arrow_function
529547
(formal_parameters (identifier) (identifier)) (number))))
530548

grammar.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ module.exports = grammar({
4141
$._statement,
4242
$._expressions,
4343
$._semicolon,
44+
$._formal_parameter,
4445
$._destructuring_pattern,
4546
$._reserved_identifier,
4647
$._jsx_attribute,
@@ -909,16 +910,21 @@ module.exports = grammar({
909910

910911
formal_parameters: $ => seq(
911912
'(',
912-
commaSep(choice(
913-
$.identifier,
914-
alias($._reserved_identifier, $.identifier),
915-
$._destructuring_pattern,
916-
$.assignment_pattern,
917-
$.rest_parameter
913+
optional(seq(
914+
commaSep1($._formal_parameter),
915+
optional(',')
918916
)),
919917
')'
920918
),
921919

920+
_formal_parameter: $ => choice(
921+
$.identifier,
922+
alias($._reserved_identifier, $.identifier),
923+
$._destructuring_pattern,
924+
$.assignment_pattern,
925+
$.rest_parameter
926+
),
927+
922928
rest_parameter: $ => seq(
923929
'...',
924930
$.identifier

src/grammar.json

Lines changed: 52 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -4598,76 +4598,41 @@
45984598
"type": "SEQ",
45994599
"members": [
46004600
{
4601-
"type": "CHOICE",
4601+
"type": "SEQ",
46024602
"members": [
46034603
{
46044604
"type": "SYMBOL",
4605-
"name": "identifier"
4605+
"name": "_formal_parameter"
46064606
},
46074607
{
4608-
"type": "ALIAS",
4608+
"type": "REPEAT",
46094609
"content": {
4610-
"type": "SYMBOL",
4611-
"name": "_reserved_identifier"
4612-
},
4613-
"named": true,
4614-
"value": "identifier"
4615-
},
4616-
{
4617-
"type": "SYMBOL",
4618-
"name": "_destructuring_pattern"
4619-
},
4620-
{
4621-
"type": "SYMBOL",
4622-
"name": "assignment_pattern"
4623-
},
4624-
{
4625-
"type": "SYMBOL",
4626-
"name": "rest_parameter"
4627-
}
4628-
]
4629-
},
4630-
{
4631-
"type": "REPEAT",
4632-
"content": {
4633-
"type": "SEQ",
4634-
"members": [
4635-
{
4636-
"type": "STRING",
4637-
"value": ","
4638-
},
4639-
{
4640-
"type": "CHOICE",
4610+
"type": "SEQ",
46414611
"members": [
46424612
{
4643-
"type": "SYMBOL",
4644-
"name": "identifier"
4645-
},
4646-
{
4647-
"type": "ALIAS",
4648-
"content": {
4649-
"type": "SYMBOL",
4650-
"name": "_reserved_identifier"
4651-
},
4652-
"named": true,
4653-
"value": "identifier"
4654-
},
4655-
{
4656-
"type": "SYMBOL",
4657-
"name": "_destructuring_pattern"
4658-
},
4659-
{
4660-
"type": "SYMBOL",
4661-
"name": "assignment_pattern"
4613+
"type": "STRING",
4614+
"value": ","
46624615
},
46634616
{
46644617
"type": "SYMBOL",
4665-
"name": "rest_parameter"
4618+
"name": "_formal_parameter"
46664619
}
46674620
]
46684621
}
4669-
]
4670-
}
4622+
}
4623+
]
4624+
},
4625+
{
4626+
"type": "CHOICE",
4627+
"members": [
4628+
{
4629+
"type": "STRING",
4630+
"value": ","
4631+
},
4632+
{
4633+
"type": "BLANK"
4634+
}
4635+
]
46714636
}
46724637
]
46734638
},
@@ -4682,6 +4647,36 @@
46824647
}
46834648
]
46844649
},
4650+
"_formal_parameter": {
4651+
"type": "CHOICE",
4652+
"members": [
4653+
{
4654+
"type": "SYMBOL",
4655+
"name": "identifier"
4656+
},
4657+
{
4658+
"type": "ALIAS",
4659+
"content": {
4660+
"type": "SYMBOL",
4661+
"name": "_reserved_identifier"
4662+
},
4663+
"named": true,
4664+
"value": "identifier"
4665+
},
4666+
{
4667+
"type": "SYMBOL",
4668+
"name": "_destructuring_pattern"
4669+
},
4670+
{
4671+
"type": "SYMBOL",
4672+
"name": "assignment_pattern"
4673+
},
4674+
{
4675+
"type": "SYMBOL",
4676+
"name": "rest_parameter"
4677+
}
4678+
]
4679+
},
46854680
"rest_parameter": {
46864681
"type": "SEQ",
46874682
"members": [
@@ -4913,6 +4908,7 @@
49134908
"_statement",
49144909
"_expressions",
49154910
"_semicolon",
4911+
"_formal_parameter",
49164912
"_destructuring_pattern",
49174913
"_reserved_identifier",
49184914
"_jsx_attribute",

0 commit comments

Comments
 (0)