mirror of https://github.com/folke/lazy.nvim.git
feat(loader): incrementally install missing plugins and rebuild spec, so imported specs from plugins work as expected
This commit is contained in:
parent
919b7f5de3
commit
2d06faa941
|
@ -2,6 +2,7 @@ local Util = require("lazy.core.util")
|
||||||
local Config = require("lazy.core.config")
|
local Config = require("lazy.core.config")
|
||||||
local Handler = require("lazy.core.handler")
|
local Handler = require("lazy.core.handler")
|
||||||
local Cache = require("lazy.core.cache")
|
local Cache = require("lazy.core.cache")
|
||||||
|
local Plugin = require("lazy.core.plugin")
|
||||||
|
|
||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
|
@ -26,29 +27,52 @@ function M.setup()
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- load the plugins
|
||||||
|
Plugin.load()
|
||||||
|
|
||||||
-- install missing plugins
|
-- install missing plugins
|
||||||
if Config.options.install.missing then
|
if Config.options.install.missing then
|
||||||
Util.track("install")
|
Util.track("install")
|
||||||
for _, plugin in pairs(Config.plugins) do
|
while M.install_missing() do
|
||||||
if not plugin._.installed then
|
|
||||||
for _, colorscheme in ipairs(Config.options.install.colorscheme) do
|
|
||||||
if pcall(vim.cmd.colorscheme, colorscheme) then
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
require("lazy.manage").install({ wait = true, lockfile = true })
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
Util.track()
|
Util.track()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- report any warnings & errors
|
||||||
|
Config.spec:report()
|
||||||
|
|
||||||
-- setup handlers
|
-- setup handlers
|
||||||
Util.track("handlers")
|
Util.track("handlers")
|
||||||
Handler.setup()
|
Handler.setup()
|
||||||
Util.track()
|
Util.track()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- this will incrementally install missing plugins
|
||||||
|
-- multiple rounds can happen when importing a spec from a missing plugin
|
||||||
|
function M.install_missing()
|
||||||
|
for _, plugin in pairs(Config.plugins) do
|
||||||
|
if not plugin._.installed then
|
||||||
|
for _, colorscheme in ipairs(Config.options.install.colorscheme) do
|
||||||
|
if pcall(vim.cmd.colorscheme, colorscheme) then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
require("lazy.manage").install({ wait = true, lockfile = true })
|
||||||
|
-- remove and installed plugins from indexed, so cache will index again
|
||||||
|
for _, p in pairs(Config.plugins) do
|
||||||
|
if p._.installed then
|
||||||
|
Cache.indexed[p.dir] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- clear plugins. no need to merge in this stage
|
||||||
|
Config.plugins = {}
|
||||||
|
-- reload plugins
|
||||||
|
Plugin.load()
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- Startup sequence
|
-- Startup sequence
|
||||||
-- 1. load any start plugins and do init
|
-- 1. load any start plugins and do init
|
||||||
function M.startup()
|
function M.startup()
|
||||||
|
|
|
@ -80,18 +80,23 @@ function Spec:add(plugin, is_dep)
|
||||||
end
|
end
|
||||||
|
|
||||||
function Spec:error(msg)
|
function Spec:error(msg)
|
||||||
self:notify(msg, vim.log.levels.ERROR)
|
self:log(msg, vim.log.levels.ERROR)
|
||||||
end
|
end
|
||||||
|
|
||||||
function Spec:warn(msg)
|
function Spec:warn(msg)
|
||||||
self:notify(msg, vim.log.levels.WARN)
|
self:log(msg, vim.log.levels.WARN)
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param msg string
|
---@param msg string
|
||||||
---@param level number
|
---@param level number
|
||||||
function Spec:notify(msg, level)
|
function Spec:log(msg, level)
|
||||||
self.notifs[#self.notifs + 1] = { msg = msg, level = level, file = self.importing }
|
self.notifs[#self.notifs + 1] = { msg = msg, level = level, file = self.importing }
|
||||||
Util.notify(msg, level)
|
end
|
||||||
|
|
||||||
|
function Spec:report()
|
||||||
|
for _, notif in ipairs(self.notifs) do
|
||||||
|
Util.notify(notif.msg, notif.level)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param spec LazySpec|LazySpecImport
|
---@param spec LazySpec|LazySpecImport
|
||||||
|
|
|
@ -49,9 +49,6 @@ function M.setup(spec, opts)
|
||||||
Config.setup(opts)
|
Config.setup(opts)
|
||||||
Util.track()
|
Util.track()
|
||||||
|
|
||||||
-- load the plugins
|
|
||||||
Plugin.load()
|
|
||||||
|
|
||||||
-- setup loader and handlers
|
-- setup loader and handlers
|
||||||
Loader.setup()
|
Loader.setup()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue