diff options
| author | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 11:42:30 +0200 |
|---|---|---|
| committer | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 11:42:30 +0200 |
| commit | 01caae6671f456d898f20d1ea29c3315c93f01f2 (patch) | |
| tree | 7507b3cbb12702beaf6eec00fc97ce6d1c7484ee /lua/clever_f/direct_preview_planner.lua | |
| parent | e504a829432d9a80357f6c6416b4510070919a1c (diff) | |
Count exact preview characters
Diffstat (limited to 'lua/clever_f/direct_preview_planner.lua')
| -rw-r--r-- | lua/clever_f/direct_preview_planner.lua | 22 |
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() |
