summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lua/clever_f/direct_preview_planner.lua12
-rw-r--r--tests/run.lua15
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