From 8ce1aac477a33ab1fe2a0b590ff278518dc0e473 Mon Sep 17 00:00:00 2001 From: Olivia Kinnear Date: Sun, 23 Aug 2026 06:13:41 -0500 Subject: feat(pos): mutable vim.Pos, vim.Range fields #41318 Allow plugins to set the human-readable fields. --- runtime/lua/vim/range.lua | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) (limited to 'runtime/lua/vim/range.lua') diff --git a/runtime/lua/vim/range.lua b/runtime/lua/vim/range.lua index e8dd7d8bb9..aafc8da65f 100644 --- a/runtime/lua/vim/range.lua +++ b/runtime/lua/vim/range.lua @@ -50,24 +50,52 @@ local util = require('vim.pos._util') local M = {} ---@private ----@param pos vim.Range +---@param range vim.Range ---@param key any -function M.__index(pos, key) +function M.__index(range, key) if key == 'start_row' then - return pos[1] + return range[1] elseif key == 'start_col' then - return pos[2] + return range[2] elseif key == 'end_row' then - return pos[3] + return range[3] elseif key == 'end_col' then - return pos[4] + return range[4] elseif key == 'buf' then - return pos[5] + return range[5] end return M[key] end +---@private +---@param range vim.Range +---@param key any +---@param value any +function M.__newindex(range, key, value) + if key == 'start_row' then + validate('start_row', value, 'number') + range[1] = value + elseif key == 'start_col' then + validate('start_col', value, 'number') + range[2] = value + elseif key == 'end_row' then + validate('end_row', value, 'number') + range[3] = value + elseif key == 'end_col' then + validate('end_col', value, 'number') + range[4] = value + elseif key == 'buf' then + validate('buf', value, 'number') + if value == 0 then + value = api.nvim_get_current_buf() + end + range[5] = value + else + rawset(range, key, value) + end +end + ---@package ---@overload fun(start: vim.Pos, end_: vim.Pos): vim.Range ---@overload fun(buf: integer, start_row: integer, start_col: integer, end_row: integer, end_col: integer): vim.Range -- cgit