Skip to content

Commit bdd6f70

Browse files
committed
Make closure brackets optional
1 parent 67878a1 commit bdd6f70

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

parser/parser.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -374,18 +374,24 @@ func (p *parser) parseIdentifierExpression(token Token) Node {
374374
}
375375

376376
func (p *parser) parseClosure() Node {
377-
token := p.current
378-
p.expect(Bracket, "{")
377+
startToken := p.current
378+
expectClosingBracket := false
379+
if p.current.Is(Bracket, "{") {
380+
p.next()
381+
expectClosingBracket = true
382+
}
379383

380384
p.depth++
381385
node := p.parseExpression(0)
382386
p.depth--
383387

384-
p.expect(Bracket, "}")
388+
if expectClosingBracket {
389+
p.expect(Bracket, "}")
390+
}
385391
closure := &ClosureNode{
386392
Node: node,
387393
}
388-
closure.SetLocation(token.Location)
394+
closure.SetLocation(startToken.Location)
389395
return closure
390396
}
391397

parser/parser_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,16 @@ func TestParse(t *testing.T) {
338338
&UnaryNode{Operator: "not",
339339
Node: &IdentifierNode{Value: "in_var"}},
340340
},
341+
{
342+
"all(Tickets, #)",
343+
&BuiltinNode{
344+
Name: "all",
345+
Arguments: []Node{
346+
&IdentifierNode{Value: "Tickets"},
347+
&ClosureNode{
348+
Node: &PointerNode{},
349+
}}},
350+
},
341351
{
342352
"all(Tickets, {.Price > 0})",
343353
&BuiltinNode{

0 commit comments

Comments
 (0)