aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/version.lua
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/lua/vim/version.lua')
-rw-r--r--runtime/lua/vim/version.lua21
1 files changed, 17 insertions, 4 deletions
diff --git a/runtime/lua/vim/version.lua b/runtime/lua/vim/version.lua
index ebe8f4e053..d4a3752e37 100644
--- a/runtime/lua/vim/version.lua
+++ b/runtime/lua/vim/version.lua
@@ -226,8 +226,13 @@ function Range:has(version)
if type(version) == 'string' then
---@diagnostic disable-next-line: cast-local-type
version = M.parse(version)
+ else
+ -- Need metatable to compare versions.
+ version = setmetatable(vim.deepcopy(version), Version)
end
if version then
+ -- Workaround: vim.version() reports "prerelease" as a boolean.
+ version.prerelease = version.prerelease or nil
if version.prerelease ~= self.from.prerelease then
return false
end
@@ -244,11 +249,14 @@ end
--- }
--- </pre>
---
---- `:has()` checks if a version is in the range (inclusive `from`, exclusive `to`). Example:
+--- `:has()` checks if a version is in the range (inclusive `from`, exclusive `to`).
+---
+--- Example:
--- <pre>lua
--- local r = vim.version.range('1.0.0 - 2.0.0')
---- print(r:has('1.9.9')) -- true
---- print(r:has('2.0.0')) -- false
+--- print(r:has('1.9.9')) -- true
+--- print(r:has('2.0.0')) -- false
+--- print(r:has(vim.version())) -- check against current Nvim version
--- </pre>
---
--- Or use cmp(), eq(), lt(), and gt() to compare `.to` and `.from` directly:
@@ -279,7 +287,7 @@ function M.range(spec) -- Adapted from https://github.com/folke/lazy.nvim
}, { __index = Range })
end
---@type string, string
- local mods, version = spec:lower():match('^([%^=>~]*)(.*)$')
+ local mods, version = spec:lower():match('^([%^=<>~]*)(.*)$')
version = version:gsub('%.[%*x]', '')
local parts = vim.split(version:gsub('%-.*', ''), '.', { plain = true })
if #parts < 3 and mods == '' then
@@ -292,6 +300,11 @@ function M.range(spec) -- Adapted from https://github.com/folke/lazy.nvim
local to = vim.deepcopy(semver)
if mods == '' or mods == '=' then
to.patch = to.patch + 1
+ elseif mods == '<' then
+ from = M._version({})
+ elseif mods == '<=' then
+ from = M._version({})
+ to.patch = to.patch + 1
elseif mods == '>' then
from.patch = from.patch + 1
to = nil ---@diagnostic disable-line: cast-local-type