From fd96032949434207dda3b288f48d7fe579f59e4e Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Sat, 7 Feb 2026 03:04:49 +0000 Subject: [PATCH] fix bug in line_gap.sml: when we convert a line number to an absolute index and travel leftwards, make sure we continue travelling leftwards when the current node is at the correct line number but the line number does not start at this node. --- src/line_gap.sml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/line_gap.sml b/src/line_gap.sml index 9de2d5e..253c913 100644 --- a/src/line_gap.sml +++ b/src/line_gap.sml @@ -3308,8 +3308,16 @@ struct val prevIdx = curIdx - String.size shd in if findLine >= prevLine then - let val relativeLine = findLine - prevLine - 1 - in Vector.sub (lhd, relativeLine) + prevIdx + let + val relativeLine = findLine - prevLine - 1 + in + if relativeLine < 0 then + (* the line start is not at this node, + * so we need to continue going left + * to find what index the line start corresponds to *) + lineNumberToIdxLeft (findLine, prevIdx, prevLine, stl, ltl) + else + Vector.sub (lhd, relativeLine) + prevIdx end else lineNumberToIdxLeft (findLine, prevIdx, prevLine, stl, ltl)