fieldDeclaration method

Parser<FieldDeclarationNode> fieldDeclaration()
inherited

Implementation

Parser<FieldDeclarationNode> fieldDeclaration() => [
  // 1. var x = 1;
  seq4(
    ref0(fieldModifier).star(),
    ref0(varToken),
    ref0(variableDeclarator)
        .plusSeparated(ref1(token, ','))
        .map((l) => l.elements),
    ref1(token, ';'),
  ).map4(
    (modifiers, _, vars, _) => FieldDeclarationNode(
      variables: vars,
      isStatic: modifiers.contains('static'),
      isLate: modifiers.contains('late'),
      isCovariant: modifiers.contains('covariant'),
    ),
  ),
  // 2. final / const with explicit type: static const int x = 1;
  seq5(
    ref0(fieldModifier).star(),
    [ref0(finalToken), ref0(constToken)].toChoiceParser(),
    ref0(type),
    ref0(variableDeclarator)
        .plusSeparated(ref1(token, ','))
        .map((l) => l.elements),
    ref1(token, ';'),
  ).map5(
    (modifiers, modifier, type, vars, _) => FieldDeclarationNode(
      variables: vars,
      type: type,
      isStatic: modifiers.contains('static'),
      isFinal: modifier.value == 'final',
      isConst: modifier.value == 'const',
      isLate: modifiers.contains('late'),
      isCovariant: modifiers.contains('covariant'),
    ),
  ),
  // 3. final / const without explicit type: final x = 1;
  seq4(
    ref0(fieldModifier).star(),
    [ref0(finalToken), ref0(constToken)].toChoiceParser(),
    ref0(variableDeclarator)
        .plusSeparated(ref1(token, ','))
        .map((l) => l.elements),
    ref1(token, ';'),
  ).map4(
    (modifiers, modifier, vars, _) => FieldDeclarationNode(
      variables: vars,
      isStatic: modifiers.contains('static'),
      isFinal: modifier.value == 'final',
      isConst: modifier.value == 'const',
      isLate: modifiers.contains('late'),
      isCovariant: modifiers.contains('covariant'),
    ),
  ),
  // 4. Type only (no final/const/var): int x = 1;
  seq4(
    ref0(fieldModifier).star(),
    ref0(type),
    ref0(variableDeclarator)
        .plusSeparated(ref1(token, ','))
        .map((l) => l.elements),
    ref1(token, ';'),
  ).map4(
    (modifiers, type, vars, _) => FieldDeclarationNode(
      variables: vars,
      type: type,
      isStatic: modifiers.contains('static'),
      isLate: modifiers.contains('late'),
      isCovariant: modifiers.contains('covariant'),
    ),
  ),
].toChoiceParser();