summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
authorJackson Moore <jacksonmoore@tuta.io>2026-09-04 11:43:39 +0200
committerJackson Moore <jacksonmoore@tuta.io>2026-09-04 11:43:39 +0200
commit6e9e352375031126902ca062464dd4c4414a6e46 (patch)
treef97ef9eecb1c5edf0a75eb873e575a6d04574a17 /lua
parentec1b1cccdae8ec536fdc99cc3b0f3fe0593c8ea4 (diff)
Count exact smart-case characters
Diffstat (limited to 'lua')
-rw-r--r--lua/clever_f/direct_preview_planner.lua27
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