From 9f4b3546f6fab8e73909014b1092c33cb2d31e5e Mon Sep 17 00:00:00 2001 From: MeanderingProgrammer Date: Mon, 4 Nov 2024 12:24:37 -0800 Subject: [PATCH] feat(plugin): support running all init functions --- lua/lazy/core/loader.lua | 18 ++++++++++++------ lua/lazy/core/plugin.lua | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index c6a7271..bde7be7 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 97347a7..9be54c9 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