Skip to content

Commit 2eed2d8

Browse files
committed
feat: support last argument append with comma
1 parent d3aea46 commit 2eed2d8

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

Diff for: parser/parser.go

+7
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,10 @@ func (p *parser) parseCall(token Token, arguments []Node, checkOverrides bool) N
553553
arguments = append(arguments, node)
554554
}
555555

556+
// skip last comma
557+
if p.current.Is(Operator, ",") {
558+
p.next()
559+
}
556560
p.expect(Bracket, ")")
557561

558562
node = p.createNode(&BuiltinNode{
@@ -597,6 +601,9 @@ func (p *parser) parseArguments(arguments []Node) []Node {
597601
if len(arguments) > offset {
598602
p.expect(Operator, ",")
599603
}
604+
if p.current.Is(Bracket, ")") {
605+
break
606+
}
600607
node := p.parseExpression(0)
601608
arguments = append(arguments, node)
602609
}

Diff for: parser/parser_test.go

+36
Original file line numberDiff line numberDiff line change
@@ -839,6 +839,42 @@ world`},
839839
Expr: &IdentifierNode{Value: "x"},
840840
},
841841
},
842+
{
843+
`all(
844+
[
845+
true,
846+
false,
847+
],
848+
#,
849+
)`,
850+
&BuiltinNode{
851+
Name: "all",
852+
Arguments: []Node{
853+
&ArrayNode{
854+
Nodes: []Node{
855+
&BoolNode{Value: true},
856+
&BoolNode{Value: false},
857+
},
858+
},
859+
&PredicateNode{
860+
Node: &PointerNode{},
861+
},
862+
},
863+
},
864+
},
865+
{
866+
`func(
867+
parameter1,
868+
parameter2,
869+
)`,
870+
&CallNode{
871+
Callee: &IdentifierNode{Value: "func"},
872+
Arguments: []Node{
873+
&IdentifierNode{Value: "parameter1"},
874+
&IdentifierNode{Value: "parameter2"},
875+
},
876+
},
877+
},
842878
}
843879
for _, test := range tests {
844880
t.Run(test.input, func(t *testing.T) {

0 commit comments

Comments
 (0)