summaryrefslogtreecommitdiff
path: root/lua/clever_f
diff options
context:
space:
mode:
authorJackson Moore <jacksonmoore@tuta.io>2026-09-04 11:42:30 +0200
committerJackson Moore <jacksonmoore@tuta.io>2026-09-04 11:42:30 +0200
commit01caae6671f456d898f20d1ea29c3315c93f01f2 (patch)
tree7507b3cbb12702beaf6eec00fc97ce6d1c7484ee /lua/clever_f
parente504a829432d9a80357f6c6416b4510070919a1c (diff)
Count exact preview characters
Diffstat (limited to 'lua/clever_f')
-rw-r--r--lua/clever_f/direct_preview_planner.lua22
1 files changed, 22 insertions, 0 deletions
diff --git a/lua/clever_f/direct_preview_planner.lua b/lua/clever_f/direct_preview_planner.lua
index e81d941..9a6b0d2 100644
--- a/lua/clever_f/direct_preview_planner.lua
+++ b/lua/clever_f/direct_preview_planner.lua
@@ -72,6 +72,24 @@ function DirectPreviewPlanner:scan_for_descriptor(view, origin, descriptor)
)
end
+local function increment_counter(counters, character)
+ local value = (counters[character] or 0) + 1
+ counters[character] = value
+ return value
+end
+
+function DirectPreviewPlanner:plan(view, origin, descriptor, count)
+ local selected_occurrence = self:normalize_count(count)
+ local counters = {}
+ local positions = {}
+ for _, record in ipairs(self:scan_for_descriptor(view, origin, descriptor)) do
+ if increment_counter(counters, record.character) == selected_occurrence then
+ positions[#positions + 1] = record.position
+ end
+ end
+ return positions
+end
+
function M.new()
return DirectPreviewPlanner.new()
end
@@ -84,6 +102,10 @@ function M.scan_for_descriptor(view, origin, descriptor)
return DirectPreviewPlanner.new():scan_for_descriptor(view, origin, descriptor)
end
+function M.plan(view, origin, descriptor, count)
+ return DirectPreviewPlanner.new():plan(view, origin, descriptor, count)
+end
+
setmetatable(M, {
__call = function()
return DirectPreviewPlanner.new()