commit db2b774a16414a7b964736c0e896ddd40d25ca3f
parent 8d75910ef9689b601087cf9bc59ec2622771490a
Author: Phạm Bình An <111893501+brianhuster@users.noreply.github.com>
Date: Tue, 6 May 2025 19:15:31 +0700
fix(runtime): 'includeexpr' with non-Nvim-style Lua modules #33867
Closes #33862
Diffstat:
2 files changed, 23 insertions(+), 9 deletions(-)
diff --git a/runtime/lua/vim/_ftplugin/lua.lua b/runtime/lua/vim/_ftplugin/lua.lua
@@ -3,13 +3,15 @@ local M = {}
--- @param module string
---@return string
function M.includeexpr(module)
- local fname = module:gsub('%.', '/')
+ module = module:gsub('%.', '/')
local root = vim.fs.root(vim.api.nvim_buf_get_name(0), 'lua') or vim.fn.getcwd()
- for _, suf in ipairs { '.lua', '/init.lua' } do
- local path = vim.fs.joinpath(root, 'lua', fname .. suf)
- if vim.uv.fs_stat(path) then
- return path
+ for _, fname in ipairs { module, vim.fs.joinpath(root, 'lua', module) } do
+ for _, suf in ipairs { '.lua', '/init.lua' } do
+ local path = fname .. suf
+ if vim.uv.fs_stat(path) then
+ return path
+ end
end
end
diff --git a/test/functional/editor/ftplugin_spec.lua b/test/functional/editor/ftplugin_spec.lua
@@ -10,18 +10,18 @@ local eq = t.eq
---@param type string
---@return string
local function stdpath(type)
- return exec_lua([[return vim.fs.normalize(vim.fn.stdpath(...))]], type)
+ return exec_lua([[return vim.fs.abspath(vim.fn.stdpath(...))]], type)
end
---@return string
local function vimruntime()
- return exec_lua [[ return vim.fs.normalize(vim.env.VIMRUNTIME) ]]
+ return exec_lua [[ return vim.fs.abspath(vim.env.VIMRUNTIME) ]]
end
---@param module string
---@return string
local function lua_includeexpr(module)
- return exec_lua([[return require('vim._ftplugin.lua').includeexpr(...)]], module)
+ return exec_lua([[return vim.fs.abspath(require 'vim._ftplugin.lua'.includeexpr(...))]], module)
end
describe("ftplugin: Lua 'includeexpr'", function()
@@ -59,7 +59,12 @@ describe("ftplugin: Lua 'includeexpr'", function()
write ++p
edit %s/lua/runtime-foo/bar.lua
write ++p
- ]]):format(temp_dir, temp_dir))
+
+ edit %s/general-foo/bar/init.lua
+ write ++p
+ edit %s/general-foo/bar/baz.lua
+ write ++p
+ ]]):format(temp_dir, temp_dir, temp_dir, temp_dir))
end)
it('finds module in current repo', function()
@@ -94,4 +99,11 @@ describe("ftplugin: Lua 'includeexpr'", function()
eq(temp_dir .. '/lua/runtime-foo/init.lua', lua_includeexpr('runtime-foo'))
eq(temp_dir .. '/lua/runtime-foo/bar.lua', lua_includeexpr('runtime-foo.bar'))
end)
+
+ it('non-Nvim-style Lua modules', function()
+ command('cd ' .. temp_dir)
+ eq(temp_dir .. '/general-foo/bar/init.lua', lua_includeexpr('general-foo.bar'))
+ eq(temp_dir .. '/general-foo/bar/baz.lua', lua_includeexpr('general-foo.bar.baz'))
+ command('cd -')
+ end)
end)