diff --git a/runtime/lua/vim/_ftplugin/lua.lua b/runtime/lua/vim/_ftplugin/lua.lua index d81393192d..778817a665 100644 --- 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 index 417c5df089..b7f323b38c 100644 --- 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)