2022-11-22 20:28:08 +00:00
|
|
|
local Util = require("lazy.core.util")
|
|
|
|
local Config = require("lazy.core.config")
|
2022-11-20 21:33:47 +00:00
|
|
|
|
|
|
|
local M = {}
|
|
|
|
|
2022-11-23 15:07:57 +00:00
|
|
|
---@type LazyPlugin[]
|
|
|
|
M.loading = {}
|
2022-11-20 21:33:47 +00:00
|
|
|
|
|
|
|
function M.setup()
|
2022-11-26 20:29:40 +00:00
|
|
|
local Handler = require("lazy.core.handler")
|
2022-11-26 21:04:32 +00:00
|
|
|
local groups = Handler.group(Config.plugins)
|
2022-11-26 20:29:40 +00:00
|
|
|
for t, handler in pairs(Handler.handlers) do
|
2022-11-26 21:04:32 +00:00
|
|
|
if groups[t] then
|
|
|
|
Util.track(t)
|
|
|
|
handler(groups[t])
|
|
|
|
Util.track()
|
2022-11-26 20:29:40 +00:00
|
|
|
end
|
2022-11-20 21:34:55 +00:00
|
|
|
end
|
2022-11-20 21:33:47 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function M.init_plugins()
|
2022-11-22 20:12:33 +00:00
|
|
|
Util.track("plugin_init")
|
2022-11-26 20:29:40 +00:00
|
|
|
for _, plugin in pairs(Config.plugins) do
|
2022-11-20 21:34:55 +00:00
|
|
|
if plugin.init then
|
2022-11-29 11:02:25 +00:00
|
|
|
Util.track({ plugin = plugin.name, start = "init" })
|
2022-11-25 21:50:17 +00:00
|
|
|
Util.try(plugin.init, "Failed to run `init` for **" .. plugin.name .. "**")
|
2022-11-20 21:34:55 +00:00
|
|
|
Util.track()
|
|
|
|
end
|
|
|
|
if plugin.opt == false then
|
2022-11-23 20:54:56 +00:00
|
|
|
M.load(plugin, { start = "start" })
|
2022-11-20 21:34:55 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
Util.track()
|
2022-11-20 21:33:47 +00:00
|
|
|
end
|
|
|
|
|
2022-11-26 20:29:40 +00:00
|
|
|
---@class Loader
|
2022-11-20 21:33:47 +00:00
|
|
|
---@param plugins string|LazyPlugin|string[]|LazyPlugin[]
|
2022-11-23 15:07:57 +00:00
|
|
|
---@param reason {[string]:string}
|
2022-11-24 21:04:23 +00:00
|
|
|
---@param opts? {load_start: boolean}
|
|
|
|
function M.load(plugins, reason, opts)
|
2022-11-26 18:33:38 +00:00
|
|
|
---@diagnostic disable-next-line: cast-local-type
|
|
|
|
plugins = type(plugins) == "string" or plugins.name and { plugins } or plugins
|
2022-11-22 20:12:33 +00:00
|
|
|
---@cast plugins (string|LazyPlugin)[]
|
2022-11-26 18:33:38 +00:00
|
|
|
|
2022-11-20 21:34:55 +00:00
|
|
|
for _, plugin in ipairs(plugins) do
|
2022-11-26 18:33:38 +00:00
|
|
|
plugin = type(plugin) == "string" and Config.plugins[plugin] or plugin
|
|
|
|
---@cast plugin LazyPlugin
|
2022-11-20 21:33:47 +00:00
|
|
|
|
2022-11-28 10:19:50 +00:00
|
|
|
if not plugin._.loaded then
|
2022-11-24 21:04:23 +00:00
|
|
|
---@diagnostic disable-next-line: assign-type-mismatch
|
2022-11-28 10:19:50 +00:00
|
|
|
plugin._.loaded = {}
|
2022-11-23 20:54:56 +00:00
|
|
|
for k, v in pairs(reason) do
|
2022-11-28 10:19:50 +00:00
|
|
|
plugin._.loaded[k] = v
|
2022-11-23 20:54:56 +00:00
|
|
|
end
|
2022-11-23 15:07:57 +00:00
|
|
|
if #M.loading > 0 then
|
2022-11-28 10:19:50 +00:00
|
|
|
plugin._.loaded.plugin = M.loading[#M.loading].name
|
2022-11-23 15:07:57 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
table.insert(M.loading, plugin)
|
2022-11-20 21:33:47 +00:00
|
|
|
|
2022-11-29 11:02:25 +00:00
|
|
|
Util.track({ plugin = plugin.name, start = reason.start })
|
2022-11-24 21:04:23 +00:00
|
|
|
M.packadd(plugin, opts and opts.load_start)
|
2022-11-20 21:33:47 +00:00
|
|
|
|
2022-11-20 21:34:55 +00:00
|
|
|
if plugin.requires then
|
2022-11-23 15:07:57 +00:00
|
|
|
M.load(plugin.requires, {})
|
2022-11-20 21:34:55 +00:00
|
|
|
end
|
2022-11-20 21:33:47 +00:00
|
|
|
|
2022-11-20 21:34:55 +00:00
|
|
|
if plugin.config then
|
2022-11-25 21:50:17 +00:00
|
|
|
Util.try(plugin.config, "Failed to run `config` for " .. plugin.name)
|
2022-11-20 21:34:55 +00:00
|
|
|
end
|
2022-11-20 21:33:47 +00:00
|
|
|
|
2022-11-28 10:19:50 +00:00
|
|
|
plugin._.loaded.time = Util.track().time
|
2022-11-23 15:07:57 +00:00
|
|
|
table.remove(M.loading)
|
2022-11-22 20:12:33 +00:00
|
|
|
vim.schedule(function()
|
|
|
|
vim.cmd("do User LazyRender")
|
|
|
|
end)
|
2022-11-20 21:34:55 +00:00
|
|
|
end
|
|
|
|
end
|
2022-11-20 21:33:47 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
---@param plugin LazyPlugin
|
2022-11-24 21:04:23 +00:00
|
|
|
function M.packadd(plugin, load_start)
|
2022-11-20 21:34:55 +00:00
|
|
|
if plugin.opt then
|
2022-11-25 14:35:40 +00:00
|
|
|
vim.cmd.packadd(plugin.name)
|
2022-11-20 21:34:55 +00:00
|
|
|
M.source_plugin_files(plugin, true)
|
2022-11-24 21:04:23 +00:00
|
|
|
elseif load_start then
|
2022-11-20 21:34:55 +00:00
|
|
|
vim.opt.runtimepath:append(plugin.dir)
|
|
|
|
M.source_plugin_files(plugin)
|
|
|
|
M.source_plugin_files(plugin, true)
|
|
|
|
end
|
2022-11-20 21:33:47 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
---@param plugin LazyPlugin
|
|
|
|
---@param after? boolean
|
|
|
|
function M.source_plugin_files(plugin, after)
|
2022-11-24 21:04:23 +00:00
|
|
|
Util.walk(plugin.dir .. (after and "/after" or "") .. "/plugin", function(path, _, t)
|
|
|
|
local ext = path:sub(-3)
|
|
|
|
if t == "file" and (ext == "lua" or ext == "vim") then
|
|
|
|
vim.cmd("silent source " .. path)
|
2022-11-20 21:34:55 +00:00
|
|
|
end
|
2022-11-24 21:04:23 +00:00
|
|
|
end)
|
2022-11-20 21:33:47 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
return M
|