generatedSubtreeCompare function

int generatedSubtreeCompare(
  1. GeneratedTreeSitterNode left,
  2. GeneratedTreeSitterNode right
)

Exact symbol/child-count/pre-order comparison used by ts_subtree_compare. Source coordinates and other metadata deliberately do not participate.

Implementation

int generatedSubtreeCompare(
  GeneratedTreeSitterNode left,
  GeneratedTreeSitterNode right,
) {
  final pending = <(GeneratedTreeSitterNode, GeneratedTreeSitterNode)>[
    (left, right),
  ];
  while (pending.isNotEmpty) {
    final pair = pending.removeLast();
    final symbolOrder = pair.$1.structuralSymbol.compareTo(
      pair.$2.structuralSymbol,
    );
    if (symbolOrder != 0) return symbolOrder;
    final childCountOrder = pair.$1.children.length.compareTo(
      pair.$2.children.length,
    );
    if (childCountOrder != 0) return childCountOrder;
    for (var index = pair.$1.children.length - 1; index >= 0; index--) {
      pending.add((pair.$1.children[index], pair.$2.children[index]));
    }
  }
  return 0;
}