diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index c6a72718..bde7be76 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -111,9 +111,7 @@ function M.startup() for _, plugin in pairs(Config.plugins) do if plugin.init then Util.track({ plugin = plugin.name, init = "init" }) - Util.try(function() - plugin.init(plugin) - end, "Failed to run `init` for **" .. plugin.name .. "**") + M.init(plugin) Util.track() end end @@ -157,6 +155,16 @@ function M.startup() Util.track() end +---@param plugin LazyPlugin +function M.init(plugin) + Util.try(function() + local inits = Plugin.super_functions(plugin, "init") + for _, init in ipairs(inits) do + init(plugin) + end + end, "Failed to run `init` for **" .. plugin.name .. "**") +end + function M.get_start_plugins() ---@type LazyPlugin[] local start = {} @@ -264,9 +272,7 @@ function M.reload(plugin) -- run init if plugin.init then - Util.try(function() - plugin.init(plugin) - end, "Failed to run `init` for **" .. plugin.name .. "**") + M.init(plugin) end -- if this is a start plugin, load it now diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index 97347a77..9be54c90 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -478,4 +478,22 @@ function M._values(root, plugin, prop, is_list) end end +-- Collects super values associated with a property that are functions +-- Used for init key +---@param plugin LazyPlugin +---@param prop string +---@return fun(self: LazyPlugin)[] +function M.super_functions(plugin, prop) + if not plugin[prop] then + return {} + end + local super = getmetatable(plugin) + local result = super and M.super_functions(super.__index, prop) or {} + local value = rawget(plugin, prop) + if type(value) == "function" then + table.insert(result, value) + end + return result +end + return M