diff options
| author | Olivia Kinnear <git@superatomic.dev> | 2026-08-23 06:13:41 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-08-23 07:13:41 -0400 |
| commit | 8ce1aac477a33ab1fe2a0b590ff278518dc0e473 (patch) | |
| tree | c202de7281b9a3905e0f1fde1173b792a1a03ee0 /runtime/lua/vim/range.lua | |
| parent | 1deeff9c3898701255be467614d84180accd78b9 (diff) | |
| download | rneovim-8ce1aac477a33ab1fe2a0b590ff278518dc0e473.tar.gz rneovim-8ce1aac477a33ab1fe2a0b590ff278518dc0e473.tar.bz2 rneovim-8ce1aac477a33ab1fe2a0b590ff278518dc0e473.zip | |
feat(pos): mutable vim.Pos, vim.Range fields #41318
Allow plugins to set the human-readable fields.
Diffstat (limited to 'runtime/lua/vim/range.lua')
| -rw-r--r-- | runtime/lua/vim/range.lua | 42 |
1 files changed, 35 insertions, 7 deletions
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 |