patternField method
A field inside an object or record pattern (name: pattern or :pattern or pattern).
Implementation
Parser<PatternFieldNode> patternField() => [
// Explicit name: foo: pattern
seq3(
ref0(identifier),
ref1(token, ':'),
ref0(dartPattern),
).map3((name, _, p) => PatternFieldNode(name: name, pattern: p)),
// Shorthand name: :var x or :final x
(ref1(token, ':') & ref0(variablePattern)).map(
(l) => PatternFieldNode(
name: (l[1] as VariablePatternNode).name,
pattern: l[1] as VariablePatternNode,
),
),
// Shorthand name with just identifier: :x (equivalent to :var x)
(ref1(token, ':') & ref0(identifier)).map(
(l) => PatternFieldNode(
name: l[1] as String,
pattern: VariablePatternNode(name: l[1] as String, isVar: true),
),
),
// Just pattern (in record)
ref0(dartPattern).map((p) => PatternFieldNode(pattern: p)),
].toChoiceParser();