lambdaParameters method
Lambda parameters — like function params but without type annotations.
Overridden by PythonDeclarationGrammar to support *args, **kwargs.
Implementation
@override
Parser<ArgumentsNode> lambdaParameters() =>
seq2(
ref0(lambdaParamItem).plusSeparated(ref1(token, ',')),
ref1(token, ',').optional(),
).map2((seq, _) {
final posonly = <ArgNode>[];
final args = <ArgNode>[];
ArgNode? vararg;
final kwonly = <ArgNode>[];
final kwDefaults = <ExpressionNode?>[];
ArgNode? kwarg;
final defaults = <ExpressionNode>[];
var seenStar = false;
for (final item in seq.elements) {
if (item.isSlash) {
posonly.addAll(args);
args.clear();
} else if (item.isBareStar) {
seenStar = true;
} else if (item.isVararg) {
vararg = item.arg;
seenStar = true;
} else if (item.isKwarg) {
kwarg = item.arg;
} else if (item.arg case final arg?) {
final defaultVal = item.defaultVal;
if (seenStar) {
kwonly.add(arg);
kwDefaults.add(defaultVal);
} else {
args.add(arg);
if (defaultVal != null) {
defaults.add(defaultVal);
}
}
}
}
return ArgumentsNode(
posonlyargs: posonly,
args: args,
vararg: vararg,
kwonlyargs: kwonly,
kwDefaults: kwDefaults,
kwarg: kwarg,
defaults: defaults,
);
});