simpleFormalParameter method
Implementation
Parser<SimpleParameterNode> simpleFormalParameter() => [
// Typed with name: int x
seq5(
ref0(covariantToken).optional(),
[ref0(finalToken), ref0(varToken)].toChoiceParser().optional(),
ref0(type),
ref0(identifier),
(ref1(token, '=') & ref0(expression))
.map((l) => l[1] as ExpressionNode)
.optional(),
).map5(
(cov, finalOrVar, type, name, defaultVal) => SimpleParameterNode(
name: name,
type: type,
defaultValue: defaultVal,
isFinal: finalOrVar?.value == 'final',
isVar: finalOrVar?.value == 'var',
),
),
// Untyped name (e.g. `(x)`) or type-only parameter in function types (e.g. `(int)`)
seq5(
ref0(covariantToken).optional(),
[ref0(finalToken), ref0(varToken)].toChoiceParser().optional(),
epsilon(),
ref0(type),
(ref1(token, '=') & ref0(expression))
.map((l) => l[1] as ExpressionNode)
.optional(),
).map5((cov, finalOrVar, _, type, defaultVal) {
if (type is NamedTypeNode &&
!type.isNullable &&
type.typeArguments.isEmpty) {
return SimpleParameterNode(
name: type.name,
defaultValue: defaultVal,
isFinal: finalOrVar?.value == 'final',
isVar: finalOrVar?.value == 'var',
);
}
return SimpleParameterNode(
name: '',
type: type,
defaultValue: defaultVal,
isFinal: finalOrVar?.value == 'final',
isVar: finalOrVar?.value == 'var',
);
}),
].toChoiceParser();