From b298bab1bf4dc5fdd07de867ad922f0157abbaee Mon Sep 17 00:00:00 2001 From: Jackson Moore Date: Fri, 4 Sep 2026 11:41:31 +0200 Subject: Scan uppercase previews backward --- lua/clever_f/direct_preview_planner.lua | 14 +++++++++++--- tests/run.lua | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/lua/clever_f/direct_preview_planner.lua b/lua/clever_f/direct_preview_planner.lua index 85dfcbc..8ccfa75 100644 --- a/lua/clever_f/direct_preview_planner.lua +++ b/lua/clever_f/direct_preview_planner.lua @@ -48,12 +48,20 @@ function DirectPreviewPlanner:scan_current_line(view, origin, direction) return records end -function DirectPreviewPlanner:scan_for_descriptor(view, origin, descriptor) +function M.direction_for_descriptor(descriptor) descriptor = domain.Descriptor.from_string(descriptor) if domain.Descriptor.is_uppercase(descriptor) then - fail("backward direct preview scanning is not available", 2) + return domain.Direction.BACKWARD end - return self:scan_current_line(view, origin, domain.Direction.FORWARD) + return domain.Direction.FORWARD +end + +function DirectPreviewPlanner:scan_for_descriptor(view, origin, descriptor) + return self:scan_current_line( + view, + origin, + M.direction_for_descriptor(descriptor) + ) end function M.new() diff --git a/tests/run.lua b/tests/run.lua index 7e47330..cbca8d9 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -4595,6 +4595,25 @@ test("Lower-case descriptors scan direct previews forward", function() end end) +test("Upper-case descriptors scan direct previews backward", function() + local view = text_topology.new({ "abcde" }, "utf-8") + local planner = direct_preview_planner.new() + local origin = domain.Position.new(1, 5) + + for _, descriptor in ipairs({ "F", "T" }) do + local records = planner:scan_for_descriptor(view, origin, descriptor) + same(4, #records) + same("d", records[1].character) + same(domain.Position.new(1, 4), records[1].position) + same("a", records[4].character) + same(domain.Position.new(1, 1), records[4].position) + end + same( + domain.Direction.BACKWARD, + direct_preview_planner.direction_for_descriptor("F") + ) +end) + for _, item in ipairs(tests) do local ok, failure = xpcall(item.body, debug.traceback) if not ok then -- cgit v1.2.3