generatedChangedRangeIteratorAuditScenario function
List<String>
generatedChangedRangeIteratorAuditScenario(
- GeneratedTreeSitterTree oldTree,
- GeneratedTreeSitterNode newRoot, {
- int? newRootTotalEndByte,
- 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);
}