From ae05e0399b0a9bea2208feac471195464e83ca01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ph=E1=BA=A1m=20B=C3=ACnh=20An?= <111893501+brianhuster@users.noreply.github.com> Date: Wed, 7 May 2025 08:02:06 +0700 Subject: [PATCH 1/2] vim-patch:0fb6cea: runtime(lua): update 'path' option in filetype plugin #33876 Problem: Lua doesn't support importing module in path related to current file like JS does (https://www.reddit.com/r/lua/comments/wi0bau/whats_the_correct_way_to_run_a_lua_file_that_uses/) Solution: Remove `.` from Lua buffer-local option `'path'` closes: vim/vim#17267 https://github.com/vim/vim/commit/0fb6ceac4ce6c2360a1c45d41ca72779af9f6b2f --- runtime/ftplugin/lua.vim | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/runtime/ftplugin/lua.vim b/runtime/ftplugin/lua.vim index 3fbdc73d8e..c609483484 100644 --- a/runtime/ftplugin/lua.vim +++ b/runtime/ftplugin/lua.vim @@ -5,7 +5,9 @@ " Contributor: Dorai Sitaram " C.D. MacEachern " Phạm Bình An -" Last Change: 2025 Feb 27 +" @konfekt +" Last Change: 2025 Apr 04 +" 2025 May 06 by Vim Project update 'path' setting #17267 if exists("b:did_ftplugin") finish @@ -28,6 +30,7 @@ set cpo&vim setlocal comments=:---,:-- setlocal commentstring=--\ %s setlocal formatoptions-=t formatoptions+=croql +setlocal path-=. " Lua doesn't support importing module in path related to current file like JS let &l:define = '\ Date: Fri, 11 Apr 2025 17:15:18 +0700 Subject: [PATCH 2/2] fix(vim.version): vim.VersionRange:has() (#33324) Problem: `vim.version.range('>=0.10'):has('0.12.0-dev')` returns false, which is wrong per semver. Solution: `vim.VersionRange:has()` shouldn't have special handling for prereleases (Why would we need it when `__eq`, `__lt`, `__le` already handle prereleases?). Closes #33316 --- runtime/lua/vim/version.lua | 8 +++----- test/functional/lua/version_spec.lua | 15 ++++++++++++--- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/runtime/lua/vim/version.lua b/runtime/lua/vim/version.lua index 06c54ac033..6aa3aae781 100644 --- a/runtime/lua/vim/version.lua +++ b/runtime/lua/vim/version.lua @@ -238,8 +238,8 @@ function VersionRange:has(version) version = setmetatable(vim.deepcopy(version, true), Version) end if version then - if version.prerelease ~= self.from.prerelease then - return false + if self.from == self.to then + return version == self.from end return version >= self.from and (self.to == nil or version < self.to) end @@ -310,9 +310,7 @@ function M.range(spec) -- Adapted from https://github.com/folke/lazy.nvim local from = semver --- @type vim.Version? local to = vim.deepcopy(semver, true) --- @type vim.Version? ---@diagnostic disable: need-check-nil - if mods == '' or mods == '=' then - to.patch = to.patch + 1 - elseif mods == '<' then + if mods == '<' then from = M._version({}) elseif mods == '<=' then from = M._version({}) diff --git a/test/functional/lua/version_spec.lua b/test/functional/lua/version_spec.lua index c172555091..eba3059c15 100644 --- a/test/functional/lua/version_spec.lua +++ b/test/functional/lua/version_spec.lua @@ -55,9 +55,9 @@ describe('version', function() describe('range', function() local tests = { - ['1.2.3'] = { from = { 1, 2, 3 }, to = { 1, 2, 4 } }, + ['1.2.3'] = { from = { 1, 2, 3 }, to = { 1, 2, 3 } }, ['1.2'] = { from = { 1, 2, 0 }, to = { 1, 3, 0 } }, - ['=1.2.3'] = { from = { 1, 2, 3 }, to = { 1, 2, 4 } }, + ['=1.2.3'] = { from = { 1, 2, 3 }, to = { 1, 2, 3 } }, ['>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 } }, @@ -100,17 +100,25 @@ describe('version', function() end) it('[to] not in range ' .. input .. ' to:' .. tostring(range.to), function() - if range.to then + if range.to and range.to ~= range.from then assert(not (range.to < range.to)) assert(not range:has(range.to)) end end) + + it('[to] in range ' .. input .. ' to:' .. tostring(range.to), function() + if range.to and range.to == range.from then + assert(range:has(range.to)) + end + end) end it('handles prerelease', function() assert(not vim.version.range('1.2.3'):has('1.2.3-alpha')) assert(vim.version.range('1.2.3-alpha'):has('1.2.3-alpha')) assert(not vim.version.range('1.2.3-alpha'):has('1.2.3-beta')) + assert(vim.version.range('>0.10'):has('0.12.0-dev')) + assert(not vim.version.range('>=0.12'):has('0.12.0-dev')) end) it('returns nil with empty version', function() @@ -138,6 +146,7 @@ describe('version', function() { v1 = '1.0.0-2.0', v2 = '1.0.0-2', want = 1 }, { v1 = '1.0.0-2.0', v2 = '1.0.0-2.0', want = 0 }, { v1 = '1.0.0-alpha', v2 = '1.0.0-alpha', want = 0 }, + -- Per semver spec, prereleases have alphabetical ordering. { v1 = '1.0.0-alpha', v2 = '1.0.0-beta', want = -1 }, { v1 = '1.0.0-beta', v2 = '1.0.0-alpha', want = 1 }, { v1 = '1.0.0-alpha', v2 = '1.0.0-alpha.1', want = -1 },