summaryrefslogtreecommitdiff
path: root/lua/clever_f/direct_preview_planner.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/clever_f/direct_preview_planner.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