Using clause in $.arguments

Problem
-------
Scala 3 introduced using clauses to function call expressions:
```scala
f(using A)
```
The grammar did not allow that

Solution
-------
Add `choice` between regular and using-clause argument lists in
`$.arguments`
text_sliders
susliko 2023-05-25 18:25:05 +07:00
parent 9ec7921aa6
commit 8cb5a00a1d
2 changed files with 37 additions and 2 deletions

@ -89,6 +89,31 @@ class C {
(wildcard))) (wildcard)))
(identifier))))))))) (identifier)))))))))
================================================================================
Call expressions (Scala 3 syntax)
================================================================================
class C {
a(b, c)(using A.B)
}
--------------------------------------------------------------------------------
(compilation_unit
(class_definition
(identifier)
(template_body
(call_expression
(call_expression
(identifier)
(arguments
(identifier)
(identifier)))
(arguments
(field_expression
(identifier)
(identifier)))))))
================================================================================ ================================================================================
SIP-44 Fewer braces (Scala 3 syntax) SIP-44 Fewer braces (Scala 3 syntax)
================================================================================ ================================================================================

@ -1173,12 +1173,22 @@ module.exports = grammar({
']' ']'
), ),
arguments: $ => seq( arguments: $ =>
seq(
'(', '(',
trailingCommaSep($.expression), choice(
optional($._exprs_in_parens),
seq(
'using',
$._exprs_in_parens,
),
),
')' ')'
), ),
// ExprsInParens ::= ExprInParens {, ExprInParens}
_exprs_in_parens: $ => trailingCommaSep1($.expression),
splice_expression: $ => prec.left(PREC.macro, seq( splice_expression: $ => prec.left(PREC.macro, seq(
'$', '$',
choice( choice(