fieldDeclaration method
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();