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