currentStatus property

TreeSitterTreeCursorStatus get currentStatus

Implementation

TreeSitterTreeCursorStatus get currentStatus {
  _checkNotDisposed();
  final currentFieldId = fieldId;
  if (_stack.isEmpty) {
    return TreeSitterTreeCursorStatus(
      fieldId: currentFieldId,
      hasLaterSiblings: false,
      hasLaterNamedSiblings: false,
      canHaveLaterSiblingsWithThisField: false,
      supertypeIds: _currentSupertypeIds(),
    );
  }
  final frame = _stack.last;
  final laterSiblings = <TreeSitterNode>[
    for (
      var index = frame.childIndex + 1;
      index < frame.parent.childCount;
      index++
    )
      frame.parent.child(index)!,
  ];
  final currentFieldName = fieldName;
  return TreeSitterTreeCursorStatus(
    fieldId: currentFieldId,
    hasLaterSiblings: laterSiblings.isNotEmpty,
    hasLaterNamedSiblings: laterSiblings.any((node) => node.isNamed),
    canHaveLaterSiblingsWithThisField:
        currentFieldName != null &&
        laterSiblings.any(
          (node) => node.fieldNames.contains(currentFieldName),
        ),
    supertypeIds: _currentSupertypeIds(),
  );
}