formalParameterListInternal method
Implementation
Parser<List<ParameterNode>> formalParameterListInternal() => [
// 1. Positional + named: a, b, {c, d}
seq3(
ref0(normalFormalParameter)
.plusSeparated(ref1(token, ','))
.map((l) => l.elements),
ref1(token, ',') & ref0(optionalNamedFormalParameters),
ref1(token, ',').optional(),
).map3(
(normal, named, _) => [...normal, ...named[1] as List<ParameterNode>],
),
// 2. Positional + optional positional: a, b, [c, d]
seq3(
ref0(normalFormalParameter)
.plusSeparated(ref1(token, ','))
.map((l) => l.elements),
ref1(token, ',') & ref0(optionalPositionalFormalParameters),
ref1(token, ',').optional(),
).map3((normal, opt, _) => [...normal, ...opt[1] as List<ParameterNode>]),
// 3. Only named: {a, b}
seq2(
ref0(optionalNamedFormalParameters),
ref1(token, ',').optional(),
).map2((named, _) => named),
// 4. Only optional positional: [a, b]
seq2(
ref0(optionalPositionalFormalParameters),
ref1(token, ',').optional(),
).map2((opt, _) => opt),
// 5. Only positional: a, b
seq2(
ref0(normalFormalParameter)
.plusSeparated(ref1(token, ','))
.map((l) => l.elements),
ref1(token, ',').optional(),
).map2((normal, _) => normal),
].toChoiceParser();