aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/range.lua
diff options
context:
space:
mode:
authorOlivia Kinnear <git@superatomic.dev>2026-08-23 06:13:41 -0500
committerGitHub <noreply@github.com>2026-08-23 07:13:41 -0400
commit8ce1aac477a33ab1fe2a0b590ff278518dc0e473 (patch)
treec202de7281b9a3905e0f1fde1173b792a1a03ee0 /runtime/lua/vim/range.lua
parent1deeff9c3898701255be467614d84180accd78b9 (diff)
downloadrneovim-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.lua42
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