generatedChangedRangeIteratorAuditScenario function

List<String> generatedChangedRangeIteratorAuditScenario(
  1. GeneratedTreeSitterTree oldTree,
  2. GeneratedTreeSitterNode newRoot, {
  3. int? newRootTotalEndByte,
  4. TreeSitterTablePoint? newRootTotalEndPoint,
})

Produces the same direct iterator transition transcript as native_tree_sitter_0_25_changed_ranges_oracle.c.

Implementation

List<String> generatedChangedRangeIteratorAuditScenario(
  GeneratedTreeSitterTree oldTree,
  GeneratedTreeSitterNode newRoot, {
  int? newRootTotalEndByte,
  TreeSitterTablePoint? newRootTotalEndPoint,
}) {
  _ChangedRangeIterator oldIterator() =>
      _ChangedRangeIterator.old(oldTree, null);
  _ChangedRangeIterator newIterator() => _ChangedRangeIterator.fresh(
    newRoot,
    oldTree.language,
    null,
    rootTotalEndByte: newRootTotalEndByte,
    rootTotalEndPoint: newRootTotalEndPoint,
  );

  final old = oldIterator();
  final fresh = newIterator();
  final oldStart = old.startPosition();
  final oldEnd = old.endPosition();
  final visible = old.visibleState();
  final result = <String>[
    _auditIteratorLine('iterator_new_old', old),
    _auditIteratorLine('iterator_new_new', fresh),
    _auditLengthLine('iterator_start_old', oldStart),
    _auditLengthLine('iterator_end_old', oldEnd),
    'iterator_done_old ${old.done ? 1 : 0}',
    'iterator_visible_old ${old.treeIsVisible() ? 1 : 0}',
    'iterator_visible_state_old '
        '${visible.node?.structuralSymbol ?? 0} '
        '${visible.aliasSymbol} ${visible.startByte}',
    'iterator_compare_root ${old.compare(fresh).index}',
  ];
  final goal = oldStart.byte;
  final oldDescended = old.descend(goal);
  final newDescended = fresh.descend(goal);
  result.addAll(<String>[
    'iterator_descend_old ${oldDescended ? 1 : 0}',
    'iterator_descend_new ${newDescended ? 1 : 0}',
    _auditIteratorLine('iterator_after_descend_old', old),
    _auditIteratorLine('iterator_after_descend_new', fresh),
    'iterator_compare_descended ${old.compare(fresh).index}',
  ]);
  old.advance();
  result.add(_auditIteratorLine('iterator_after_advance_old', old));
  fresh.ascend();
  result.add(_auditIteratorLine('iterator_after_ascend_new', fresh));
  return List.unmodifiable(result);
}