diff options
| author | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 11:47:14 +0200 |
|---|---|---|
| committer | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 11:47:14 +0200 |
| commit | 71c815b9794f19df9451f59fac6dd0368d91e1f8 (patch) | |
| tree | 94313ecb6dd68f1d9264c4c87351773529fa6e03 /lua/clever_f/direct_preview_planner.lua | |
| parent | 881a6714c6bfd4d28c5b0470ad54041e5399a06c (diff) | |
Return valid direct marker positions
Diffstat (limited to 'lua/clever_f/direct_preview_planner.lua')
| -rw-r--r-- | lua/clever_f/direct_preview_planner.lua | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/lua/clever_f/direct_preview_planner.lua b/lua/clever_f/direct_preview_planner.lua index e771b15..6735924 100644 --- a/lua/clever_f/direct_preview_planner.lua +++ b/lua/clever_f/direct_preview_planner.lua @@ -149,6 +149,41 @@ function M.case_grouping_settings(settings) } end +function M.validate_marker_positions(view, positions) + require_view(view) + if type(positions) ~= "table" then + fail("direct preview markers must be a list of positions", 2) + end + + local result = {} + local seen = {} + local item_count = 0 + for key, position in pairs(positions) do + if type(key) ~= "number" + or key ~= math.floor(key) + or key < 1 + or key > #positions + then + fail("direct preview markers must be a list of positions", 2) + end + position = domain.Position.coerce(position) + if not view:is_character_start(position) then + fail("direct preview marker must start an editor character", 2) + end + local identity = tostring(position.line) .. ":" .. tostring(position.byte_column) + if seen[identity] then + fail("direct preview marker positions must be unique", 2) + end + seen[identity] = true + result[key] = position + item_count = item_count + 1 + end + if item_count ~= #positions then + fail("direct preview markers must be a list of positions", 2) + end + return result +end + function DirectPreviewPlanner:plan(view, origin, descriptor, count, settings) local grouping = M.case_grouping_settings(settings) local ignore_case = grouping.ignore_case @@ -181,7 +216,7 @@ function DirectPreviewPlanner:plan(view, origin, descriptor, count, settings) positions[#positions + 1] = M.marker_position(descriptor, record.position) end end - return positions + return M.validate_marker_positions(view, positions) end function M.new(options) |
