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. --- test/functional/lua/loader_spec.lua | 2 ++ 1 file changed, 2 insertions(+) (limited to 'test/functional/lua/loader_spec.lua') diff --git a/test/functional/lua/loader_spec.lua b/test/functional/lua/loader_spec.lua index 8ddd5c9684..0ce19766dd 100644 --- a/test/functional/lua/loader_spec.lua +++ b/test/functional/lua/loader_spec.lua @@ -14,10 +14,12 @@ describe('vim.loader', function() it('can be disabled', function() exec_lua(function() local orig_loader = _G.loadfile + local orig_loaders = { unpack(package.loaders) } vim.loader.enable() assert(orig_loader ~= _G.loadfile) vim.loader.enable(false) assert(orig_loader == _G.loadfile) + assert(vim.deep_equal(orig_loaders, package.loaders)) end) end) -- cgit