selectChildren025ParityProbe method

Map<String, Object?> selectChildren025ParityProbe()

Direct decision probe for Tree-sitter 0.25.10's private ts_parser__select_children helper.

Implementation

Map<String, Object?> selectChildren025ParityProbe() {
  const zero = TreeSitterTablePoint(0, 0);
  const one = TreeSitterTablePoint(0, 1);
  GeneratedTreeSitterNode leaf() => GeneratedTreeSitterNode(
    symbol: 1,
    type: language.symbols[1].name,
    startByte: 0,
    endByte: 1,
    startPoint: zero,
    endPoint: one,
    named: language.symbols[1].named,
    visible: language.symbols[1].visible,
    extra: false,
  );
  GeneratedTreeSitterNode child({int errorSpan = 0, int precedence = 0}) {
    final error = errorSpan > 0;
    return GeneratedTreeSitterNode(
      symbol: error ? _treeSitterBuiltinErrorSymbol : 16,
      type: error ? 'ERROR' : language.symbols[16].name,
      startByte: 0,
      endByte: error ? errorSpan : 1,
      startPoint: zero,
      endPoint: TreeSitterTablePoint(0, error ? errorSpan : 1),
      named: true,
      visible: true,
      extra: false,
      dynamicPrecedence: precedence,
      children: [leaf()],
    );
  }

  GeneratedTreeSitterNode parent(List<GeneratedTreeSitterNode> children) =>
      GeneratedTreeSitterNode(
        symbol: 16,
        type: language.symbols[16].name,
        startByte: 0,
        endByte: children.isEmpty ? 0 : children.last.endByte,
        startPoint: zero,
        endPoint: children.isEmpty ? zero : children.last.endPoint,
        named: true,
        visible: true,
        extra: false,
        dynamicPrecedence: children.fold<int>(
          0,
          (total, child) => total + child.dynamicPrecedence,
        ),
        children: children,
      );

  bool selectRight(
    GeneratedTreeSitterNode left,
    GeneratedTreeSitterNode right,
  ) {
    _Frame frame(GeneratedTreeSitterNode node) =>
        _Frame(1, node, extra: false);
    return _compareReducedCandidates(
          (reduced: frame(right), trailingExtras: const <_Frame>[]),
          (reduced: frame(left), trailingExtras: const <_Frame>[]),
        ) >
        0;
  }

  return <String, Object?>{
    'right_lower_error': selectRight(
      parent([child(errorSpan: 10)]),
      parent([child(errorSpan: 1)]),
    ),
    'left_lower_error': selectRight(
      parent([child(errorSpan: 1)]),
      parent([child(errorSpan: 10)]),
    ),
    'right_higher_precedence': selectRight(
      parent([child(precedence: 1)]),
      parent([child(precedence: 2)]),
    ),
    'left_higher_precedence': selectRight(
      parent([child(precedence: 2)]),
      parent([child(precedence: 1)]),
    ),
    'equal_positive_error': selectRight(
      parent([child(errorSpan: 1)]),
      parent([child(errorSpan: 1)]),
    ),
    'right_fewer_children': selectRight(
      parent([leaf(), leaf()]),
      parent([leaf()]),
    ),
    'equal_clean_tree': selectRight(parent([leaf()]), parent([leaf()])),
  };
}