mirror of https://github.com/folke/lazy.nvim.git
fix(cache): check that modpaths still exist when finding mod root
This commit is contained in:
parent
8798ccc950
commit
d34c85d580
|
@ -262,7 +262,7 @@ function M.find_root(modname)
|
||||||
if M.cache[modname] then
|
if M.cache[modname] then
|
||||||
-- check if modname is in cache
|
-- check if modname is in cache
|
||||||
local modpath = M.cache[modname].modpath
|
local modpath = M.cache[modname].modpath
|
||||||
if M.check_path(modname, modpath) then
|
if M.check_path(modname, modpath) and vim.loop.fs_stat(modpath) then
|
||||||
local root = modpath:gsub("/init%.lua$", ""):gsub("%.lua$", "")
|
local root = modpath:gsub("/init%.lua$", ""):gsub("%.lua$", "")
|
||||||
return root
|
return root
|
||||||
end
|
end
|
||||||
|
@ -271,7 +271,7 @@ function M.find_root(modname)
|
||||||
-- check for any children in the cache
|
-- check for any children in the cache
|
||||||
for child, entry in pairs(M.cache) do
|
for child, entry in pairs(M.cache) do
|
||||||
if child:find(modname, 1, true) == 1 then
|
if child:find(modname, 1, true) == 1 then
|
||||||
if M.check_path(child, entry.modpath) then
|
if M.check_path(child, entry.modpath) and vim.loop.fs_stat(entry.modpath) then
|
||||||
local basename = modname:gsub("%.", "/")
|
local basename = modname:gsub("%.", "/")
|
||||||
local childbase = child:gsub("%.", "/")
|
local childbase = child:gsub("%.", "/")
|
||||||
local ret = entry.modpath:gsub("/init%.lua$", ""):gsub("%.lua$", "")
|
local ret = entry.modpath:gsub("/init%.lua$", ""):gsub("%.lua$", "")
|
||||||
|
|
|
@ -3,11 +3,19 @@ local Cache = require("lazy.core.cache")
|
||||||
local Helpers = require("tests.helpers")
|
local Helpers = require("tests.helpers")
|
||||||
|
|
||||||
describe("util", function()
|
describe("util", function()
|
||||||
|
local rtp = vim.opt.rtp:get()
|
||||||
before_each(function()
|
before_each(function()
|
||||||
|
vim.opt.rtp = rtp
|
||||||
|
for k, v in pairs(package.loaded) do
|
||||||
|
if k:find("^foobar") then
|
||||||
|
package.loaded[k] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
Helpers.fs_rm("")
|
Helpers.fs_rm("")
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it("lsmod lists all mods in dir", function()
|
it("lsmod lists all mods in dir", function()
|
||||||
|
vim.opt.rtp:append(Helpers.path(""))
|
||||||
local tests = {
|
local tests = {
|
||||||
{
|
{
|
||||||
root = "lua/foo",
|
root = "lua/foo",
|
||||||
|
@ -35,7 +43,6 @@ describe("util", function()
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
vim.opt.rtp:append(Helpers.path(""))
|
|
||||||
for t, test in ipairs(tests) do
|
for t, test in ipairs(tests) do
|
||||||
local expected = vim.deepcopy(test.mods)
|
local expected = vim.deepcopy(test.mods)
|
||||||
table.sort(expected)
|
table.sort(expected)
|
||||||
|
@ -74,4 +81,54 @@ describe("util", function()
|
||||||
assert.same(expected, mods)
|
assert.same(expected, mods)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it("find the correct root with dels", function()
|
||||||
|
Cache.cache = {}
|
||||||
|
Cache.indexed = {}
|
||||||
|
Cache.indexed_rtp = false
|
||||||
|
vim.opt.rtp:append(Helpers.path("old"))
|
||||||
|
Helpers.fs_create({ "old/lua/foobar/init.lua" })
|
||||||
|
require("foobar")
|
||||||
|
local root = Cache.find_root("foobar")
|
||||||
|
assert(root, "foobar root not found")
|
||||||
|
assert.same(Helpers.path("old/lua/foobar"), root)
|
||||||
|
|
||||||
|
Helpers.fs_rm("old/")
|
||||||
|
|
||||||
|
-- vim.opt.rtp = rtp
|
||||||
|
Cache.indexed = {}
|
||||||
|
Cache.indexed_rtp = false
|
||||||
|
vim.opt.rtp:append(Helpers.path("new"))
|
||||||
|
Helpers.fs_create({ "new/lua/foobar/init.lua" })
|
||||||
|
root = Cache.find_root("foobar")
|
||||||
|
assert(root, "foobar root not found")
|
||||||
|
assert.same(Helpers.path("new/lua/foobar"), root)
|
||||||
|
end)
|
||||||
|
|
||||||
|
it("find the correct root with mod dels", function()
|
||||||
|
Cache.cache = {}
|
||||||
|
Cache.indexed = {}
|
||||||
|
Cache.indexed_rtp = false
|
||||||
|
Cache.topmods = {}
|
||||||
|
Cache.enabled = true
|
||||||
|
vim.opt.rtp:append(Helpers.path("old"))
|
||||||
|
Helpers.fs_create({ "old/lua/foobar/test.lua" })
|
||||||
|
Cache.cache["foobar.test"] = { modpath = Helpers.path("old/lua/foobar/test.lua") }
|
||||||
|
local root = Cache.find_root("foobar")
|
||||||
|
assert(root, "foobar root not found")
|
||||||
|
assert.same(Helpers.path("old/lua/foobar"), root)
|
||||||
|
assert(not Cache.cache["foobar"], "foobar should not be in cache")
|
||||||
|
assert(Cache.cache["foobar.test"], "foobar.test not found in cache")
|
||||||
|
|
||||||
|
Helpers.fs_rm("old/")
|
||||||
|
|
||||||
|
-- vim.opt.rtp = rtp
|
||||||
|
Cache.indexed = {}
|
||||||
|
Cache.indexed_rtp = false
|
||||||
|
vim.opt.rtp:append(Helpers.path("new"))
|
||||||
|
Helpers.fs_create({ "new/lua/foobar/test.lua" })
|
||||||
|
root = Cache.find_root("foobar")
|
||||||
|
assert(root, "foobar root not found")
|
||||||
|
assert.same(Helpers.path("new/lua/foobar"), root)
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
Loading…
Reference in New Issue