From 5bc7dbb13ecb644e9cff2468503f826cfca01483 Mon Sep 17 00:00:00 2001 From: Volodymyr Chernetskyi Date: Wed, 2 Sep 2026 16:08:37 +0200 Subject: 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. --- runtime/lua/vim/loader.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'runtime/lua/vim/loader.lua') diff --git a/runtime/lua/vim/loader.lua b/runtime/lua/vim/loader.lua index bba42e7123..924503514b 100644 --- a/runtime/lua/vim/loader.lua +++ b/runtime/lua/vim/loader.lua @@ -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 -- cgit