diff options
| -rw-r--r-- | lua/clever_f/direct_preview_planner.lua | 12 | ||||
| -rw-r--r-- | tests/run.lua | 15 |
2 files changed, 27 insertions, 0 deletions
diff --git a/lua/clever_f/direct_preview_planner.lua b/lua/clever_f/direct_preview_planner.lua index bc9592a..85dfcbc 100644 --- a/lua/clever_f/direct_preview_planner.lua +++ b/lua/clever_f/direct_preview_planner.lua @@ -48,6 +48,14 @@ function DirectPreviewPlanner:scan_current_line(view, origin, direction) return records end +function DirectPreviewPlanner:scan_for_descriptor(view, origin, descriptor) + descriptor = domain.Descriptor.from_string(descriptor) + if domain.Descriptor.is_uppercase(descriptor) then + fail("backward direct preview scanning is not available", 2) + end + return self:scan_current_line(view, origin, domain.Direction.FORWARD) +end + function M.new() return DirectPreviewPlanner.new() end @@ -56,6 +64,10 @@ function M.scan_current_line(view, origin, direction) return DirectPreviewPlanner.new():scan_current_line(view, origin, direction) end +function M.scan_for_descriptor(view, origin, descriptor) + return DirectPreviewPlanner.new():scan_for_descriptor(view, origin, descriptor) +end + setmetatable(M, { __call = function() return DirectPreviewPlanner.new() diff --git a/tests/run.lua b/tests/run.lua index b7a4820..7e47330 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -4580,6 +4580,21 @@ test("Direct preview scanning excludes the cursor and opposite side", function() same(domain.Position.new(1, 1), backward[2].position) end) +test("Lower-case descriptors scan direct previews forward", function() + local view = text_topology.new({ "abcde" }, "utf-8") + local planner = direct_preview_planner.new() + local origin = domain.Position.new(1, 2) + + for _, descriptor in ipairs({ "f", "t" }) do + local records = planner:scan_for_descriptor(view, origin, descriptor) + same(3, #records) + same("c", records[1].character) + same(domain.Position.new(1, 3), records[1].position) + same("e", records[3].character) + same(domain.Position.new(1, 5), records[3].position) + end +end) + for _, item in ipairs(tests) do local ok, failure = xpcall(item.body, debug.traceback) if not ok then |
