guidesComputeViewport function

List<GuideBlock> guidesComputeViewport({
  1. required Rope rope,
  2. required BigInt firstVisible,
  3. required BigInt lastVisible,
  4. required BigInt tabSize,
})

Implementation

List<GuideBlock> guidesComputeViewport({
  required Rope rope,
  required BigInt firstVisible,
  required BigInt lastVisible,
  required BigInt tabSize,
}) {
  final blocks = <GuideBlock>[];
  for (
    var line = firstVisible.toInt();
    line <= lastVisible.toInt() && line < rope.lineCount;
    line++
  ) {
    final text = rope.getLineText(line);
    final leading = text.length - text.trimLeft().length;
    if (leading > 0) {
      blocks.add(
        GuideBlock(
          startLine: line,
          endLine: line,
          indentLevel: (leading / math.max(1, tabSize.toInt())).floor(),
          leadingSpaces: leading,
        ),
      );
    }
  }
  return blocks;
}