mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 10:45:16 -07:00
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())
This commit is contained in:
parent
f5d12889e8
commit
ca887b80a9
@ -2832,11 +2832,15 @@ range({spec}) *vim.version.range()*
|
||||
}
|
||||
<
|
||||
|
||||
`:has()` checks if a version is in the range (inclusive `from` , exclusive `to` ). Example: >lua
|
||||
`:has()` checks if a version is in the range (inclusive `from`, exclusive
|
||||
`to`).
|
||||
|
||||
Example: >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
|
||||
<
|
||||
|
||||
Or use cmp(), eq(), lt(), and gt() to compare `.to` and `.from` directly: >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
|
||||
|
@ -40,6 +40,8 @@ describe('version', function()
|
||||
['=1.2.3'] = { from = { 1, 2, 3 }, to = { 1, 2, 4 } },
|
||||
['>1.2.3'] = { from = { 1, 2, 4 } },
|
||||
['>=1.2.3'] = { from = { 1, 2, 3 } },
|
||||
['<1.2.3'] = { from = { 0, 0, 0 }, to = { 1, 2, 3 } },
|
||||
['<=1.2.3'] = { from = { 0, 0, 0 }, to = { 1, 2, 4 } },
|
||||
['~1.2.3'] = { from = { 1, 2, 3 }, to = { 1, 3, 0 } },
|
||||
['^1.2.3'] = { from = { 1, 2, 3 }, to = { 2, 0, 0 } },
|
||||
['^0.2.3'] = { from = { 0, 2, 3 }, to = { 0, 3, 0 } },
|
||||
|
Loading…
Reference in New Issue
Block a user