classDeclaration method

Parser<ClassDeclarationNode> classDeclaration()
inherited

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,
      ),
    );