classDeclaration method
Implementation
Parser<ClassDeclarationNode> classDeclaration() =>
seq8(
ref0(classModifier).star(),
ref0(classToken),
ref0(identifier),
ref0(typeParameters).optionalWith(const <TypeParameterNode>[]),
(ref0(extendsToken) & ref0(type))
.map((l) => l[1] as TypeNode)
.optional(),
(ref0(withToken) & ref0(typeList))
.map((l) => l[1] as List<TypeNode>)
.optionalWith(const <TypeNode>[]),
(ref0(implementsToken) & ref0(typeList))
.map((l) => l[1] as List<TypeNode>)
.optionalWith(const <TypeNode>[]),
[
ref1(token, ';').map((_) => const <DeclarationNode>[]),
seq3(
ref1(token, '{'),
ref0(classMemberDefinition).star(),
ref1(token, '}'),
).map3((_, members, _) => members),
].toChoiceParser(),
).map8(
(
modifiers,
_,
name,
typeParams,
superclass,
mixins,
interfaces,
members,
) => ClassDeclarationNode(
name: name,
modifiers: modifiers,
typeParameters: typeParams,
superclass: superclass,
mixins: mixins,
interfaces: interfaces,
members: members,
),
);