lazy.nvim/lua/lazy/core/loader.lua

107 lines
2.7 KiB
Lua
Raw Normal View History

local Util = require("lazy.core.util")
local Config = require("lazy.core.config")
2022-11-21 05:33:47 +08:00
local M = {}
2022-11-23 23:07:57 +08:00
---@type LazyPlugin[]
M.loading = {}
2022-11-21 05:33:47 +08:00
function M.setup()
-- install missing plugins
if Config.options.install_missing then
Util.track("install")
for _, plugin in pairs(Config.plugins) do
if not plugin._.installed then
vim.cmd("do User LazyInstallPre")
require("lazy.manage").install({ wait = true })
break
end
end
Util.track()
end
-- setup handlers
Util.track("handlers")
local Handler = require("lazy.core.handler")
Handler.setup()
Util.track()
end
2022-11-21 05:33:47 +08:00
function M.init_plugins()
Util.track({ start = "init" })
for _, plugin in pairs(Config.plugins) do
2022-11-21 05:34:55 +08:00
if plugin.init then
Util.track({ plugin = plugin.name, init = "init" })
Util.try(plugin.init, "Failed to run `init` for **" .. plugin.name .. "**")
2022-11-21 05:34:55 +08:00
Util.track()
end
if plugin.lazy == false then
M.load(plugin, { start = "startup" })
2022-11-21 05:34:55 +08:00
end
end
Util.track()
2022-11-21 05:33:47 +08:00
end
---@class Loader
2022-11-21 05:33:47 +08:00
---@param plugins string|LazyPlugin|string[]|LazyPlugin[]
2022-11-23 23:07:57 +08:00
---@param reason {[string]:string}
function M.load(plugins, reason)
---@diagnostic disable-next-line: cast-local-type
plugins = type(plugins) == "string" or plugins.name and { plugins } or plugins
---@cast plugins (string|LazyPlugin)[]
2022-11-21 05:34:55 +08:00
for _, plugin in ipairs(plugins) do
plugin = type(plugin) == "string" and Config.plugins[plugin] or plugin
---@cast plugin LazyPlugin
2022-11-21 05:33:47 +08:00
if not plugin._.loaded then
---@diagnostic disable-next-line: assign-type-mismatch
plugin._.loaded = {}
2022-11-24 04:54:56 +08:00
for k, v in pairs(reason) do
plugin._.loaded[k] = v
2022-11-24 04:54:56 +08:00
end
2022-11-23 23:07:57 +08:00
if #M.loading > 0 then
plugin._.loaded.plugin = M.loading[#M.loading].name
2022-11-23 23:07:57 +08:00
end
table.insert(M.loading, plugin)
2022-11-21 05:33:47 +08:00
2022-11-29 19:02:25 +08:00
Util.track({ plugin = plugin.name, start = reason.start })
M.packadd(plugin)
2022-11-21 05:33:47 +08:00
if plugin.dependencies then
M.load(plugin.dependencies, {})
2022-11-21 05:34:55 +08:00
end
2022-11-21 05:33:47 +08:00
2022-11-21 05:34:55 +08:00
if plugin.config then
Util.try(plugin.config, "Failed to run `config` for " .. plugin.name)
2022-11-21 05:34:55 +08:00
end
2022-11-21 05:33:47 +08:00
plugin._.loaded.time = Util.track().time
2022-11-23 23:07:57 +08:00
table.remove(M.loading)
vim.schedule(function()
vim.cmd("do User LazyRender")
end)
2022-11-21 05:34:55 +08:00
end
end
2022-11-21 05:33:47 +08:00
end
---@param plugin LazyPlugin
function M.packadd(plugin)
vim.cmd.packadd(plugin.name)
M.source_runtime(plugin, "/after/plugin")
2022-11-21 05:33:47 +08:00
end
---@param plugin LazyPlugin
2022-11-30 21:41:20 +08:00
---@param dir? string
function M.source_runtime(plugin, dir)
Util.walk(plugin.dir .. dir, 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-21 05:34:55 +08:00
end
end)
2022-11-21 05:33:47 +08:00
end
return M