From 6e9e352375031126902ca062464dd4c4414a6e46 Mon Sep 17 00:00:00 2001 From: Jackson Moore Date: Fri, 4 Sep 2026 11:43:39 +0200 Subject: Count exact smart-case characters --- lua/clever_f/direct_preview_planner.lua | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'lua') 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 -- cgit v1.2.3