diff options
| -rw-r--r-- | lua/clever_f/direct_preview_planner.lua | 6 | ||||
| -rw-r--r-- | tests/run.lua | 25 |
2 files changed, 29 insertions, 2 deletions
diff --git a/lua/clever_f/direct_preview_planner.lua b/lua/clever_f/direct_preview_planner.lua index 16808af..bd15870 100644 --- a/lua/clever_f/direct_preview_planner.lua +++ b/lua/clever_f/direct_preview_planner.lua @@ -152,10 +152,12 @@ function DirectPreviewPlanner:plan(view, origin, descriptor, count, settings) resolver:lowercase(record.character) ) == selected_occurrence elseif smart_case then - selected = increment_smart_counters( + local exact_count, lowercase_count = increment_smart_counters( counters, record.character - ) == selected_occurrence + ) + selected = exact_count == selected_occurrence + or lowercase_count == selected_occurrence else selected = increment_counter( counters, diff --git a/tests/run.lua b/tests/run.lua index 4984fb6..718488b 100644 --- a/tests/run.lua +++ b/tests/run.lua @@ -4710,6 +4710,31 @@ test("Smart-case previews add ASCII uppercase to lowercase counters", function() falsy(direct_preview_planner.is_upper_ascii("AA")) end) +test("Smart-case previews mark the exact and lowercase union", function() + local planner = direct_preview_planner.new({ lowercase = string.lower }) + local origin = domain.Position.new(1, 1) + + local folded_position = planner:plan( + text_topology.new({ "xaA" }, "utf-8"), + origin, + "f", + 2, + { ignore_case = false, smart_case = true } + ) + same(1, #folded_position) + same(domain.Position.new(1, 3), folded_position[1]) + + local one_marker = planner:plan( + text_topology.new({ "xAA" }, "utf-8"), + origin, + "f", + 2, + { ignore_case = false, smart_case = true } + ) + same(1, #one_marker) + same(domain.Position.new(1, 3), one_marker[1]) +end) + for _, item in ipairs(tests) do local ok, failure = xpcall(item.body, debug.traceback) if not ok then |
