patternField method

Parser<PatternFieldNode> patternField()
inherited

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