diff options
| author | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 11:43:39 +0200 |
|---|---|---|
| committer | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 11:43:39 +0200 |
| commit | 6e9e352375031126902ca062464dd4c4414a6e46 (patch) | |
| tree | f97ef9eecb1c5edf0a75eb873e575a6d04574a17 /lua/clever_f/direct_preview_planner.lua | |
| parent | ec1b1cccdae8ec536fdc99cc3b0f3fe0593c8ea4 (diff) | |
Count exact smart-case characters
Diffstat (limited to 'lua/clever_f/direct_preview_planner.lua')
| -rw-r--r-- | lua/clever_f/direct_preview_planner.lua | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/lua/clever_f/direct_preview_planner.lua b/lua/clever_f/direct_preview_planner.lua index 51d7b18..a034c3c 100644 --- a/lua/clever_f/direct_preview_planner.lua +++ b/lua/clever_f/direct_preview_planner.lua @@ -102,6 +102,10 @@ local function increment_counter(counters, character) return value end +local function increment_smart_counters(counters, character) + return increment_counter(counters, character) +end + local function require_case_setting(settings, name) local value = settings[name] if value == nil then @@ -119,15 +123,30 @@ function DirectPreviewPlanner:plan(view, origin, descriptor, count, settings) 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") local selected_occurrence = self:normalize_count(count) local counters = {} local positions = {} local resolver = planner_records[self].case_resolver for _, record in ipairs(self:scan_for_descriptor(view, origin, descriptor)) do - local counter_key = ignore_case - and resolver:lowercase(record.character) - or record.character - if increment_counter(counters, counter_key) == selected_occurrence then + local selected + if ignore_case then + selected = increment_counter( + counters, + resolver:lowercase(record.character) + ) == selected_occurrence + elseif smart_case then + selected = increment_smart_counters( + counters, + record.character + ) == selected_occurrence + else + selected = increment_counter( + counters, + record.character + ) == selected_occurrence + end + if selected then positions[#positions + 1] = record.position end end |
