methodOrFunctionDeclaration method
Implementation
Parser<FunctionDeclarationNode> methodOrFunctionDeclaration() => [
// 1. Explicit return type: int foo() {}
seq7(
ref0(methodModifier).star(),
ref0(type),
ref0(identifier),
ref0(typeParameters).optionalWith(const <TypeParameterNode>[]),
ref0(formalParameters),
ref0(asyncOrSyncModifier).optional(),
ref0(methodBody),
).map7(
(modifiers, returnType, name, typeParams, params, asyncMod, body) =>
FunctionDeclarationNode(
name: name,
returnType: returnType,
typeParameters: typeParams,
parameters: params,
body: body,
isStatic: modifiers.contains('static'),
isAbstract: modifiers.contains('abstract'),
isExternal: modifiers.contains('external'),
),
),
// 2. Untyped: foo() {} or foo<T>() {}
seq6(
ref0(methodModifier).star(),
ref0(identifier),
ref0(typeParameters).optionalWith(const <TypeParameterNode>[]),
ref0(formalParameters),
ref0(asyncOrSyncModifier).optional(),
ref0(methodBody),
).map6(
(modifiers, name, typeParams, params, asyncMod, body) =>
FunctionDeclarationNode(
name: name,
typeParameters: typeParams,
parameters: params,
body: body,
isStatic: modifiers.contains('static'),
isAbstract: modifiers.contains('abstract'),
isExternal: modifiers.contains('external'),
),
),
].toChoiceParser();