summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lua/clever_f/direct_preview_planner.lua14
-rw-r--r--tests/run.lua30
2 files changed, 41 insertions, 3 deletions
diff --git a/lua/clever_f/direct_preview_planner.lua b/lua/clever_f/direct_preview_planner.lua
index 404191e..e771b15 100644
--- a/lua/clever_f/direct_preview_planner.lua
+++ b/lua/clever_f/direct_preview_planner.lua
@@ -138,13 +138,21 @@ local function require_case_setting(settings, name)
return value
end
-function DirectPreviewPlanner:plan(view, origin, descriptor, count, settings)
+function M.case_grouping_settings(settings)
settings = settings or {}
if type(settings) ~= "table" then
fail("direct preview case settings must be a table", 2)
end
- local ignore_case = require_case_setting(settings, "ignore_case")
- local smart_case = require_case_setting(settings, "smart_case")
+ return {
+ ignore_case = require_case_setting(settings, "ignore_case"),
+ smart_case = require_case_setting(settings, "smart_case"),
+ }
+end
+
+function DirectPreviewPlanner:plan(view, origin, descriptor, count, settings)
+ local grouping = M.case_grouping_settings(settings)
+ local ignore_case = grouping.ignore_case
+ local smart_case = grouping.smart_case
local selected_occurrence = self:normalize_count(count)
local counters = {}
local positions = {}
diff --git a/tests/run.lua b/tests/run.lua
index 458b521..3c5150a 100644
--- a/tests/run.lua
+++ b/tests/run.lua
@@ -4752,6 +4752,36 @@ test("TILL direct previews retain target occurrence positions", function()
)
end)
+test("Direct preview counters ignore Migemo and symbol merging", function()
+ local planner = direct_preview_planner.new({ lowercase = string.lower })
+ local positions = planner:plan(
+ text_topology.new({ "x;!;!" }, "utf-8"),
+ domain.Position.new(1, 1),
+ "f",
+ 2,
+ {
+ ignore_case = false,
+ smart_case = false,
+ use_migemo = true,
+ chars_match_any_signs = ";",
+ }
+ )
+
+ same(2, #positions)
+ same(domain.Position.new(1, 4), positions[1])
+ same(domain.Position.new(1, 5), positions[2])
+ local grouping = direct_preview_planner.case_grouping_settings({
+ ignore_case = true,
+ smart_case = true,
+ use_migemo = true,
+ chars_match_any_signs = ";",
+ })
+ truthy(grouping.ignore_case)
+ truthy(grouping.smart_case)
+ same(nil, grouping.use_migemo)
+ same(nil, grouping.chars_match_any_signs)
+end)
+
for _, item in ipairs(tests) do
local ok, failure = xpcall(item.body, debug.traceback)
if not ok then