mappingItems method

Parser<({List<ExpressionNode> keys, List<PatternNode> patterns, String? rest})> mappingItems()
inherited

Implementation

Parser<
  ({List<ExpressionNode> keys, List<PatternNode> patterns, String? rest})
>
mappingItems() =>
    seq2(
      [
        ref0(mappingDoubleStarRest),
        ref0(keyValPattern),
      ].toChoiceParser().plusSeparated(ref1(token, ',')),
      ref1(token, ',').optional(),
    ).map2((seq, _) {
      final keys = <ExpressionNode>[];
      final patterns = <PatternNode>[];
      String? rest;
      for (final item in seq.elements) {
        final key = item.key;
        final pat = item.pat;
        if (item.rest != null) {
          rest = item.rest;
        } else if (key != null && pat != null) {
          keys.add(key);
          patterns.add(pat);
        }
      }
      return (keys: keys, patterns: patterns, rest: rest);
    });