patternArguments method

Parser<({List<String> kwdNames, List<PatternNode> kwdPatterns, List<PatternNode> pos})> patternArguments()
inherited

Pattern arguments in class pattern.

Implementation

Parser<
  ({
    List<PatternNode> pos,
    List<String> kwdNames,
    List<PatternNode> kwdPatterns,
  })
>
patternArguments() =>
    seq2(
      [
        ref0(keywordPatternArg),
        ref0(pythonPattern).map((p) => (kwd: null, pat: p)),
      ].toChoiceParser().plusSeparated(ref1(token, ',')),
      ref1(token, ',').optional(),
    ).map2((seq, _) {
      final pos = <PatternNode>[];
      final kwdNames = <String>[];
      final kwdPatterns = <PatternNode>[];
      for (final item in seq.elements) {
        if (item.kwd case final kwd?) {
          kwdNames.add(kwd);
          kwdPatterns.add(item.pat);
        } else {
          pos.add(item.pat);
        }
      }
      return (pos: pos, kwdNames: kwdNames, kwdPatterns: kwdPatterns);
    });