typeAliasDeclaration method
Implementation
Parser<TypeAliasDeclarationNode> typeAliasDeclaration() => [
// 1. New-style: typedef Name<T> = Type;
seq5(
ref0(typedefToken),
ref0(identifier),
ref0(typeParameters).optionalWith(const <TypeParameterNode>[]),
ref1(token, '='),
seq2(ref0(type), ref1(token, ';')),
).map5(
(_, name, typeParams, _, typeAndSemi) => TypeAliasDeclarationNode(
name: name,
typeParameters: typeParams,
type: typeAndSemi.$1,
),
),
// 2. Old-style with return type: typedef Type Name<T>(params);
seq6(
ref0(typedefToken),
ref0(type),
ref0(identifier),
ref0(typeParameters).optionalWith(const <TypeParameterNode>[]),
ref0(formalParameters),
ref1(token, ';'),
).map6(
(_, returnType, name, typeParams, params, _) => TypeAliasDeclarationNode(
name: name,
typeParameters: typeParams,
type: FunctionTypeNode(returnType: returnType, parameters: params),
),
),
// 3. Old-style untyped: typedef Name<T>(params);
seq5(
ref0(typedefToken),
ref0(identifier),
ref0(typeParameters).optionalWith(const <TypeParameterNode>[]),
ref0(formalParameters),
ref1(token, ';'),
).map5(
(_, name, typeParams, params, _) => TypeAliasDeclarationNode(
name: name,
typeParameters: typeParams,
type: FunctionTypeNode(parameters: params),
),
),
].toChoiceParser();