diff options
| -rw-r--r-- | lua/clever_f/direct_preview_planner.lua | 14 | ||||
| -rw-r--r-- | tests/run.lua | 30 |
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 |
