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