Skip to content

Commit 1cfd6d1

Browse files
committed
fix(loader): don't load handlers before installing plugins
1 parent ed6c9ff commit 1cfd6d1

File tree

6 files changed

+49
-25
lines changed

6 files changed

+49
-25
lines changed

lua/lazy/core/handler/event.lua

+2-1
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,11 @@ end
6464

6565
---@param plugin LazyPlugin
6666
function M:values(plugin)
67+
local Plugin = require("lazy.core.plugin")
6768
---@type table<string,any>
6869
local values = {}
6970
---@diagnostic disable-next-line: no-unknown
70-
for _, value in ipairs(plugin[self.type] or {}) do
71+
for _, value in ipairs(Plugin.values(plugin, self.type, true)) do
7172
local event = self:parse(value)
7273
values[event.id] = event
7374
end

lua/lazy/core/handler/init.lua

+10-1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ end
3939

4040
---@param plugin LazyPlugin
4141
function M.disable(plugin)
42+
if not plugin._.handlers_enabled then
43+
return
44+
end
45+
plugin._.handlers_enabled = false
4246
for type, handler in pairs(M.handlers) do
4347
if plugin[type] then
4448
handler:del(plugin)
@@ -49,11 +53,15 @@ end
4953
---@param plugin LazyPlugin
5054
function M.enable(plugin)
5155
if not plugin._.loaded then
56+
if plugin._.handlers_enabled then
57+
return
58+
end
5259
for type, handler in pairs(M.handlers) do
5360
if plugin[type] then
5461
handler:add(plugin)
5562
end
5663
end
64+
plugin._.handlers_enabled = true
5765
end
5866
end
5967

@@ -80,10 +88,11 @@ function M:_del(_value) end
8088

8189
---@param plugin LazyPlugin
8290
function M:values(plugin)
91+
local Plugin = require("lazy.core.plugin")
8392
---@type table<string,any>
8493
local values = {}
8594
---@diagnostic disable-next-line: no-unknown
86-
for _, value in ipairs(plugin[self.type] or {}) do
95+
for _, value in ipairs(Plugin.values(plugin, self.type, true)) do
8796
values[value] = value
8897
end
8998
return values

lua/lazy/core/handler/keys.lua

+2-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ end
5252

5353
---@param plugin LazyPlugin
5454
function M:values(plugin)
55-
return M.resolve(plugin.keys)
55+
local Plugin = require("lazy.core.plugin")
56+
return M.resolve(Plugin.values(plugin, "keys", true))
5657
end
5758

5859
---@param spec? (string|LazyKeysSpec)[]

lua/lazy/core/plugin.lua

+19-10
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,6 @@ end
4242
function Spec:parse(spec)
4343
self:normalize(spec)
4444
self:fix_disabled()
45-
46-
-- calculate handlers
47-
for _, plugin in pairs(self.plugins) do
48-
for _, handler in pairs(Handler.types) do
49-
if plugin[handler] then
50-
plugin[handler] = M.values(plugin, handler, true)
51-
end
52-
end
53-
end
5445
end
5546

5647
-- PERF: optimized code to get package name without using lua patterns
@@ -609,8 +600,26 @@ end
609600
---@param prop string
610601
---@param is_list? boolean
611602
function M.values(plugin, prop, is_list)
603+
if not plugin[prop] then
604+
return {}
605+
end
606+
plugin._.values = plugin._.values or {}
607+
local key = prop .. (is_list and "_list" or "")
608+
if plugin._.values[key] == nil then
609+
plugin[prop] = M._values(plugin, prop, is_list)
610+
plugin._.values[key] = true
611+
end
612+
return plugin[prop] or {}
613+
end
614+
615+
-- Merges super values or runs the values function to override values or return new ones
616+
-- Used for opts, cmd, event, ft and keys
617+
---@param plugin LazyPlugin
618+
---@param prop string
619+
---@param is_list? boolean
620+
function M._values(plugin, prop, is_list)
612621
---@type table
613-
local ret = plugin._.super and M.values(plugin._.super, prop, is_list) or {}
622+
local ret = plugin._.super and M._values(plugin._.super, prop, is_list) or {}
614623
local values = rawget(plugin, prop)
615624

616625
if not values then

lua/lazy/types.lua

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
---@field module? string
2121
---@field dir? string Explicit dir or dev set for this plugin
2222
---@field rtp_loaded? boolean
23+
---@field values? table<string,boolean>
24+
---@field handlers_enabled? boolean
2325

2426
---@alias PluginOpts table|fun(self:LazyPlugin, opts:table):table?
2527

lua/lazy/view/render.lua

+14-12
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ function M:plugin(plugin)
415415
else
416416
self:append(" ")
417417
local reason = {}
418-
if plugin._.kind ~= "disabled" then
418+
if plugin._.kind ~= "disabled" and plugin._.handlers_enabled then
419419
for handler in pairs(Handler.types) do
420420
if plugin[handler] then
421421
local values = Handler.handlers[handler]:values(plugin)
@@ -542,17 +542,19 @@ function M:details(plugin)
542542
end
543543
end)
544544

545-
for handler in pairs(Handler.types) do
546-
if plugin[handler] then
547-
table.insert(props, {
548-
handler,
549-
function()
550-
for _, value in ipairs(plugin[handler]) do
551-
self:reason({ [handler] = value })
552-
self:append(" ")
553-
end
554-
end,
555-
})
545+
if plugin._.handlers_enabled then
546+
for handler in pairs(Handler.types) do
547+
if plugin[handler] then
548+
table.insert(props, {
549+
handler,
550+
function()
551+
for _, value in ipairs(Plugin.values(plugin, handler, true)) do
552+
self:reason({ [handler] = value })
553+
self:append(" ")
554+
end
555+
end,
556+
})
557+
end
556558
end
557559
end
558560
self:props(props, { indent = 6 })

0 commit comments

Comments
 (0)