getFoldStartForLine method

int? getFoldStartForLine(
  1. int lineIndex
)

if the corresponding line is in a foldable region, this function returns the first line in that foldable block.

Implementation

int? getFoldStartForLine(int lineIndex) {
  final starts = _foldedStartsSorted;
  final ends = _foldedEndsSorted;
  if (starts.isEmpty) return null;
  int lo = 0, hi = starts.length - 1;
  while (lo <= hi) {
    final mid = (lo + hi) >> 1;
    if (starts[mid] < lineIndex) {
      lo = mid + 1;
    } else {
      hi = mid - 1;
    }
  }
  for (int i = hi; i >= 0; i--) {
    if (starts[i] >= lineIndex) continue;
    if (ends[i] >= lineIndex) return starts[i];
    if (lineIndex - starts[i] > 100000) break;
  }
  return null;
}