aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/lua/vim/version.lua10
-rw-r--r--test/functional/lua/version_spec.lua12
2 files changed, 18 insertions, 4 deletions
diff --git a/runtime/lua/vim/version.lua b/runtime/lua/vim/version.lua
index d4a3752e37..92250ff1f8 100644
--- a/runtime/lua/vim/version.lua
+++ b/runtime/lua/vim/version.lua
@@ -226,13 +226,11 @@ function Range:has(version)
if type(version) == 'string' then
---@diagnostic disable-next-line: cast-local-type
version = M.parse(version)
- else
+ elseif getmetatable(version) ~= Version then
-- 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
@@ -423,8 +421,12 @@ function M.parse(version, opts)
end
setmetatable(M, {
+ --- Returns the current Nvim version.
__call = function()
- return vim.fn.api_info().version
+ local version = vim.fn.api_info().version
+ -- Workaround: vim.fn.api_info().version reports "prerelease" as a boolean.
+ version.prerelease = version.prerelease and 'dev' or nil
+ return setmetatable(version, Version)
end,
})
diff --git a/test/functional/lua/version_spec.lua b/test/functional/lua/version_spec.lua
index 64dcbec983..d1c981c388 100644
--- a/test/functional/lua/version_spec.lua
+++ b/test/functional/lua/version_spec.lua
@@ -17,6 +17,18 @@ describe('version', function()
eq({ major = 42, minor = 3, patch = 99 }, exec_lua("return vim.version.parse('v42.3.99')"))
end)
+ it('version() returns Nvim version', function()
+ local expected = exec_lua('return vim.fn.api_info().version')
+ local actual = exec_lua('return vim.version()')
+ eq(expected.major, actual.major)
+ eq(expected.minor, actual.minor)
+ eq(expected.patch, actual.patch)
+ eq(expected.prerelease and 'dev' or nil, actual.prerelease)
+
+ -- tostring() #23863
+ matches([[%d+%.%d+%.%d+]], exec_lua('return tostring(vim.version())'))
+ end)
+
describe('_version()', function()
local tests = {
['v1.2.3'] = { major = 1, minor = 2, patch = 3 },