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