type method
The main type production.
Implementation
Parser<TypeNode> type() => [
// Standalone Function type without return type: Function(...)
seq4(
ref0(functionToken),
ref0(typeParameters).optionalWith(const <TypeParameterNode>[]),
ref0(formalParameters),
ref1(token, '?').optional(),
).map4(
(_, typeParams, params, q) => FunctionTypeNode(
typeParameters: typeParams,
parameters: params,
isNullable: q != null,
),
),
// Non-function base type with optional Function suffixes
seq2(
ref0(nonFunctionType),
seq4(
ref0(functionToken),
ref0(typeParameters).optionalWith(const <TypeParameterNode>[]),
ref0(formalParameters),
ref1(token, '?').optional(),
).star(),
).map2((base, functionSuffixes) {
var current = base;
for (final suffix in functionSuffixes) {
current = FunctionTypeNode(
returnType: current,
typeParameters: suffix.$2,
parameters: suffix.$3,
isNullable: suffix.$4 != null,
);
}
return current;
}),
].toChoiceParser();