aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/version.lua
diff options
context:
space:
mode:
authorGianmaria Bajo <mg1979.git@gmail.com>2023-06-06 15:38:45 +0200
committerGitHub <noreply@github.com>2023-06-06 06:38:45 -0700
commitca887b80a911df4db4ab5f5496075b9415b9990a (patch)
tree6dbffbfc49528a9980b78ef0cd787ed359acdbb2 /runtime/lua/vim/version.lua
parentf5d12889e80d3369359b8248806694cf6d21f820 (diff)
downloadrneovim-ca887b80a911df4db4ab5f5496075b9415b9990a.tar.gz
rneovim-ca887b80a911df4db4ab5f5496075b9415b9990a.tar.bz2
rneovim-ca887b80a911df4db4ab5f5496075b9415b9990a.zip
fix: version-range < and <= #23539
vim.version.range() couldn't parse them correctly. For example, vim.version.range('<0.9.0'):has('0.9.0') returned `true`. fix: range:has() accepts vim.version() So that it's possible to compare a range with: vim.version.range(spec):has(vim.version())
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