fix(loader): remove all cached loaders on disable #41613

Problem:
When disabling, the loader list is traversed forwards while entries are
removed. As a result, some entries are skipped and remain active. Thus,
disabling `vim.loader` restores `_G.loadfile`, but does not fully
restore the original package loader chain.

Solution:
Traverse `package.loaders` in reverse when removing cached loaders.
Capture the original `package.loaders` list in the test, and assert that
the list is restored properly.
This commit is contained in:
Volodymyr Chernetskyi authored and GitHub committed 2026-09-02 10:08:37 -04:00
1 parent 350fa5ad7c
commit 5bc7dbb13e
2 files changed
+4 -1

No files matched your search

+2 -1
View File
@@ -452,7 +452,8 @@ function M.enable(enable)
end
else
_G.loadfile = _loadfile
for l, loader in ipairs(loaders) do
for l = #loaders, 1, -1 do
local loader = loaders[l]
if loader == loader_cached or loader == loader_lib_cached then
table.remove(loaders, l)
end