diff options
| author | Lewis Russell <lewis6991@gmail.com> | 2026-03-12 15:04:05 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-12 11:04:05 -0400 |
| commit | ce1154048b11cdc402d0e5da352a3adca19afb56 (patch) | |
| tree | 02516c918bd7b47e96b02eb83323b917ec4dd37d /runtime/lua/vim/version.lua | |
| parent | 2fe07cc9658cfca6dcda1b9b37e5f80e38fd7b19 (diff) | |
| download | rneovim-ce1154048b11cdc402d0e5da352a3adca19afb56.tar.gz rneovim-ce1154048b11cdc402d0e5da352a3adca19afb56.tar.bz2 rneovim-ce1154048b11cdc402d0e5da352a3adca19afb56.zip | |
refactor: integer functions, optimize asserts #34112
refactor(lua): add integer coercion helpers
Add vim._tointeger() and vim._ensure_integer(), including optional base
support, and switch integer-only tonumber()/assert call sites in the Lua
runtime to use them.
This also cleans up related integer parsing in LSP, health, loader, URI,
tohtml, and Treesitter code.
supported by AI
Diffstat (limited to 'runtime/lua/vim/version.lua')
| -rw-r--r-- | runtime/lua/vim/version.lua | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/runtime/lua/vim/version.lua b/runtime/lua/vim/version.lua index a904255490..652d645325 100644 --- a/runtime/lua/vim/version.lua +++ b/runtime/lua/vim/version.lua @@ -86,8 +86,12 @@ local function cmp_prerel(prerel1, prerel2) if word1 == nil and word2 == nil then -- Done iterating. return 0 end - word1, n1, word2, n2 = - word1 or '', n1 and tonumber(n1) or 0, word2 or '', n2 and tonumber(n2) or 0 + + word1 = word1 or '' + n1 = vim._tointeger(n1) or 0 + word2 = word2 or '' + n2 = vim._tointeger(n2) or 0 + if word1 ~= word2 then return word1 < word2 and -1 or 1 end @@ -197,9 +201,9 @@ function M._version(version, strict) -- Adapted from https://github.com/folke/la or (major and minor and patch and major ~= '' and minor ~= '' and patch ~= '') then return setmetatable({ - major = tonumber(major), - minor = minor == '' and 0 or tonumber(minor), - patch = patch == '' and 0 or tonumber(patch), + major = vim._ensure_integer(major), + minor = minor == '' and 0 or vim._ensure_integer(minor), + patch = patch == '' and 0 or vim._ensure_integer(patch), prerelease = prerel ~= '' and prerel or nil, build = build ~= '' and build or nil, }, Version) @@ -286,7 +290,6 @@ function M.range(spec) -- Adapted from https://github.com/folke/lazy.nvim return setmetatable({ from = M.parse('0.0.0') }, range_mt) end - ---@type number? local hyphen = spec:find(' - ', 1, true) if hyphen then local a = spec:sub(1, hyphen - 1) @@ -379,15 +382,15 @@ function M.intersect(r1, r2) end end ----@param v string|vim.Version +---@param v string|vim.Version|number[] ---@return string -local function create_err_msg(v) +local function err_msg(v) if type(v) == 'string' then - return string.format('invalid version: "%s"', tostring(v)) + return ('invalid version: "%s"'):format(v) elseif type(v) == 'table' and v.major then - return string.format('invalid version: %s', vim.inspect(v)) + return ('invalid version: %s'):format(vim.inspect(v)) end - return string.format('invalid version: %s (%s)', tostring(v), type(v)) + return ('invalid version: %s (%s)'):format(tostring(v), type(v)) end --- Parses and compares two version objects (the result of |vim.version.parse()|, or @@ -413,8 +416,8 @@ end ---@param v2 vim.Version|number[]|string Version to compare with `v1`. ---@return integer -1 if `v1 < v2`, 0 if `v1 == v2`, 1 if `v1 > v2`. function M.cmp(v1, v2) - local v1_parsed = assert(M._version(v1), create_err_msg(v1)) - local v2_parsed = assert(M._version(v2), create_err_msg(v1)) + local v1_parsed = M._version(v1) or error(err_msg(v1)) + local v2_parsed = M._version(v2) or error(err_msg(v2)) if v1_parsed == v2_parsed then return 0 end @@ -492,7 +495,9 @@ end ---@param opts vim.version.parse.Opts? Options for parsing. ---@return vim.Version? # `Version` object or `nil` if input is invalid. function M.parse(version, opts) - assert(type(version) == 'string', create_err_msg(version)) + if type(version) ~= 'string' then + error(err_msg(version)) + end opts = opts or { strict = false } return M._version(version, opts.strict) end |