diff options
Diffstat (limited to 'runtime/lua/vim/version.lua')
-rw-r--r-- | runtime/lua/vim/version.lua | 21 |
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 |