diff options
| author | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 11:40:51 +0200 |
|---|---|---|
| committer | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 11:40:51 +0200 |
| commit | 05700ac654c285c1a503d54613b2bb06a6696ffa (patch) | |
| tree | cc27ad555d969f0ef7590884a792c2fd7a5b29e8 | |
| parent | 5574e26f6bf1152a50e28080ca200e447f1acade (diff) | |
Restrict preview scans to strict side
| -rw-r--r-- | lua/clever_f/direct_preview_planner.lua | 5 | ||||
| -rw-r--r-- | tests/run.lua | 34 |
2 files changed, 31 insertions, 8 deletions
diff --git a/lua/clever_f/direct_preview_planner.lua b/lua/clever_f/direct_preview_planner.lua index 7ead43f..bc9592a 100644 --- a/lua/clever_f/direct_preview_planner.lua +++ b/lua/clever_f/direct_preview_planner.lua @@ -34,9 +34,10 @@ function DirectPreviewPlanner:scan_current_line(view, origin, direction) origin = domain.Position.coerce(origin) direction = domain.Direction.from_string(direction) local records = {} - for position, character, span in view:iterate( + for position, character, span in view:iter_strict( + origin, direction, - view:line_match_start_bounds(origin.line) + domain.SearchScope.CURRENT_LINE ) do records[#records + 1] = { position = position, diff --git a/tests/run.lua b/tests/run.lua index e16f082..b7a4820 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -4548,14 +4548,36 @@ test("Direct preview scanning stays on the cursor line", function() local records = planner:scan_current_line( view, - domain.Position.new(2, 2), + domain.Position.new(2, 1), domain.Direction.FORWARD ) - same(2, #records) - same(domain.Position.new(2, 1), records[1].position) - same("d", records[1].character) - same(domain.Position.new(2, 2), records[2].position) - same("e", records[2].character) + same(1, #records) + same(domain.Position.new(2, 2), records[1].position) + same("e", records[1].character) +end) + +test("Direct preview scanning excludes the cursor and opposite side", function() + local view = text_topology.new({ "abcde" }, "utf-8") + local planner = direct_preview_planner.new() + local origin = domain.Position.new(1, 3) + + local forward = planner:scan_current_line( + view, + origin, + domain.Direction.FORWARD + ) + same(2, #forward) + same(domain.Position.new(1, 4), forward[1].position) + same(domain.Position.new(1, 5), forward[2].position) + + local backward = planner:scan_current_line( + view, + origin, + domain.Direction.BACKWARD + ) + same(2, #backward) + same(domain.Position.new(1, 2), backward[1].position) + same(domain.Position.new(1, 1), backward[2].position) end) for _, item in ipairs(tests) do |
