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
2026-09-02 16:08:37 +02:00
committed by GitHub
parent 350fa5ad7c
commit 5bc7dbb13e
2 changed files with 4 additions and 1 deletions

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