refactor: moved all plugin state to Plugin._

This commit is contained in:
Folke Lemaitre 2022-11-28 11:19:50 +01:00
parent 352dbadcb6
commit 28af1e1ac3
No known key found for this signature in database
GPG Key ID: 41F8B1FBACAE2040
9 changed files with 49 additions and 46 deletions

View File

@ -46,14 +46,14 @@ function M.load(plugins, reason, opts)
plugin = type(plugin) == "string" and Config.plugins[plugin] or plugin
---@cast plugin LazyPlugin
if not plugin.loaded then
if not plugin._.loaded then
---@diagnostic disable-next-line: assign-type-mismatch
plugin.loaded = {}
plugin._.loaded = {}
for k, v in pairs(reason) do
plugin.loaded[k] = v
plugin._.loaded[k] = v
end
if #M.loading > 0 then
plugin.loaded.plugin = M.loading[#M.loading].name
plugin._.loaded.plugin = M.loading[#M.loading].name
end
table.insert(M.loading, plugin)
@ -69,7 +69,7 @@ function M.load(plugins, reason, opts)
Util.try(plugin.config, "Failed to run `config` for " .. plugin.name)
end
plugin.loaded.time = Util.track().time
plugin._.loaded.time = Util.track().time
table.remove(M.loading)
vim.schedule(function()
vim.cmd("do User LazyRender")

View File

@ -6,7 +6,7 @@ local Cache = require("lazy.core.cache")
local M = {}
---@alias CachedPlugin LazyPlugin | {_funs: string[]}
local skip = { installed = true, loaded = true, tasks = true, dirty = true, dir = true }
local skip = { _ = true, dir = true }
local funs = { config = true, init = true, run = true }
M.dirty = false
@ -29,7 +29,7 @@ M.dirty = false
---@field commit? string
---@field version? string
---@class LazyPlugin: LazyPluginHandlers,LazyPluginHooks,LazyPluginState,LazyPluginRef
---@class LazyPlugin: LazyPluginHandlers,LazyPluginHooks,LazyPluginRef
---@field [1] string
---@field name string display name and name used for plugin config files
---@field uri string
@ -37,6 +37,7 @@ M.dirty = false
---@field enabled? boolean|(fun():boolean)
---@field opt? boolean
---@field requires? string[]
---@field _ LazyPluginState
---@alias LazySpec string|LazyPlugin|LazySpec[]|{requires:LazySpec}
@ -69,6 +70,7 @@ function Spec:add(plugin)
Util.error("Invalid plugin spec " .. vim.inspect(plugin))
end
plugin.uri = plugin.uri or ("https://github.com/" .. plugin[1] .. ".git")
plugin._ = {}
-- PERF: optimized code to get package name without using lua patterns
if not plugin.name then
@ -133,11 +135,12 @@ function M.update_state(check_clean)
end
for _, plugin in pairs(Config.plugins) do
plugin._ = plugin._ or {}
plugin[1] = plugin["1"] or plugin[1]
plugin.opt = plugin.opt == nil and Config.options.opt or plugin.opt
local opt = plugin.opt and "opt" or "start"
plugin.dir = Config.options.package_path .. "/" .. opt .. "/" .. plugin.name
plugin.installed = installed[opt][plugin.name] == true
plugin._.installed = installed[opt][plugin.name] == true
installed[opt][plugin.name] = nil
end

View File

@ -27,7 +27,7 @@ function M.setup(opts)
Util.track("install")
for _, plugin in pairs(Config.plugins) do
if not plugin.installed then
if not plugin._.installed then
vim.cmd("do User LazyInstallPre")
require("lazy.manage").install({
wait = true,
@ -49,7 +49,7 @@ function M.setup(opts)
Loader.init_plugins()
if Config.plugins["lazy.nvim"] then
Config.plugins["lazy.nvim"].loaded.time = lazy_delta
Config.plugins["lazy.nvim"]._.loaded.time = lazy_delta
end
vim.cmd("do User LazyDone")
@ -64,7 +64,7 @@ function M.stats()
for _, plugin in pairs(require("lazy.core.config").plugins) do
ret.count = ret.count + 1
if plugin.loaded then
if plugin._.loaded then
ret.loaded = ret.loaded + 1
end
end

View File

@ -49,7 +49,7 @@ function M.install(opts)
M.run({
pipeline = { "git.install", { "plugin.docs", "plugin.run" } },
plugins = function(plugin)
return plugin.uri and not plugin.installed
return plugin.uri and not plugin._.installed
end,
}, opts)
end
@ -59,7 +59,7 @@ function M.update(opts)
M.run({
pipeline = { "git.update", { "plugin.docs", "plugin.run" }, "git.log" },
plugins = function(plugin)
return plugin.uri and plugin.installed
return plugin.uri and plugin._.installed
end,
}, opts)
end
@ -69,7 +69,7 @@ function M.log(opts)
M.run({
pipeline = { "git.log" },
plugins = function(plugin)
return plugin.uri and plugin.installed
return plugin.uri and plugin._.installed
end,
}, opts)
end
@ -86,13 +86,13 @@ end
function M.clear()
for _, plugin in pairs(Config.plugins) do
-- clear updated status
plugin.updated = nil
plugin._.updated = nil
-- clear finished tasks
if plugin.tasks then
if plugin._.tasks then
---@param task LazyTask
plugin.tasks = vim.tbl_filter(function(task)
plugin._.tasks = vim.tbl_filter(function(task)
return task:is_running()
end, plugin.tasks)
end, plugin._.tasks)
end
end
vim.cmd([[do User LazyRender]])

View File

@ -8,7 +8,7 @@ M.log = {
if opts.interactive ~= true or not Util.file_exists(plugin.dir .. "/.git") then
return false
end
return plugin.updated == nil or plugin.updated.from ~= plugin.updated.to
return plugin._.updated == nil or plugin._.updated.from ~= plugin._.updated.to
end,
run = function(self)
local args = {
@ -20,8 +20,8 @@ M.log = {
"--color=never",
}
if self.plugin.updated then
table.insert(args, self.plugin.updated.from .. ".." .. (self.plugin.updated.to or "HEAD"))
if self.plugin._.updated then
table.insert(args, self.plugin._.updated.from .. ".." .. (self.plugin._.updated.to or "HEAD"))
else
table.insert(args, "--since=7 days ago")
end
@ -59,11 +59,11 @@ M.update = {
on_exit = function(ok)
if ok then
local git_new = assert(Util.git_info(self.plugin.dir))
self.plugin.updated = {
self.plugin._.updated = {
from = git.hash,
to = git_new.hash,
}
self.plugin.dirty = not vim.deep_equal(git, git_new)
self.plugin._.dirty = not vim.deep_equal(git, git_new)
end
end,
})
@ -103,8 +103,8 @@ M.install = {
args = args,
on_exit = function(ok)
if ok then
self.plugin.installed = true
self.plugin.dirty = true
self.plugin._.installed = true
self.plugin._.dirty = true
end
end,
})

View File

@ -39,8 +39,8 @@ function Task.new(plugin, type, task, opts)
self.type = type
self.output = ""
self.status = ""
plugin.tasks = plugin.tasks or {}
table.insert(plugin.tasks, self)
plugin._.tasks = plugin._.tasks or {}
table.insert(plugin._.tasks, self)
return self
end

View File

@ -6,7 +6,7 @@ local M = {}
M.run = {
needed = function(plugin)
return plugin.dirty and (plugin.opt == false or plugin.run)
return plugin._.dirty and (plugin.opt == false or plugin.run)
end,
run = function(self)
Loader.load(self.plugin, { task = "run" }, { load_start = true })
@ -47,13 +47,13 @@ M.clean = {
vim.loop.fs_unlink(dir)
end
self.plugin.installed = false
self.plugin._.installed = false
end,
}
M.docs = {
needed = function(plugin)
return plugin.dirty
return plugin._.dirty
end,
run = function(self)
local docs = self.plugin.dir .. "/doc/"

View File

@ -47,8 +47,8 @@ function M:update()
}
for _, plugin in ipairs(self.plugins) do
if plugin.tasks then
for _, task in ipairs(plugin.tasks) do
if plugin._.tasks then
for _, task in ipairs(plugin._.tasks) do
self.progress.total = self.progress.total + 1
if not task:is_running() then
self.progress.done = self.progress.done + 1
@ -144,7 +144,7 @@ end
---@param plugin LazyPlugin
function M:reason(plugin)
local reason = vim.deepcopy(plugin.loaded or {})
local reason = vim.deepcopy(plugin._.loaded or {})
---@type string?
local source = reason.source
if source then
@ -203,18 +203,18 @@ end
---@param plugin LazyPlugin
function M:diagnostics(plugin)
if plugin.updated then
if plugin.updated.from == plugin.updated.to then
if plugin._.updated then
if plugin._.updated.from == plugin._.updated.to then
self:diagnostic({
message = "already up to date",
})
else
self:diagnostic({
message = "updated from " .. plugin.updated.from:sub(1, 7) .. " to " .. plugin.updated.to:sub(1, 7),
message = "updated from " .. plugin._.updated.from:sub(1, 7) .. " to " .. plugin._.updated.to:sub(1, 7),
})
end
end
for _, task in ipairs(plugin.tasks or {}) do
for _, task in ipairs(plugin._.tasks or {}) do
if task:is_running() then
self:diagnostic({
severity = vim.diagnostic.severity.WARN,
@ -233,7 +233,7 @@ end
function M:plugin(plugin)
self:append(" - ", "LazySpecial"):append(plugin.name)
local plugin_start = self:row()
if plugin.loaded then
if plugin._.loaded then
self:reason(plugin)
end
self:diagnostics(plugin)
@ -248,7 +248,7 @@ end
---@param plugin LazyPlugin
function M:tasks(plugin)
for _, task in ipairs(plugin.tasks or {}) do
for _, task in ipairs(plugin._.tasks or {}) do
if task.type == "log" and not task.error then
self:log(task)
elseif task.error or self._details == plugin.name then

View File

@ -1,8 +1,8 @@
---@param plugin LazyPlugin
---@param filter fun(task:LazyTask):boolean?
local function has_task(plugin, filter)
if plugin.tasks then
for _, task in ipairs(plugin.tasks) do
if plugin._.tasks then
for _, task in ipairs(plugin._.tasks) do
if filter(task) then
return true
end
@ -49,7 +49,7 @@ return {
{
---@param plugin LazyPlugin
filter = function(plugin)
return plugin.updated and plugin.updated.from ~= plugin.updated.to
return plugin._.updated and plugin._.updated.from ~= plugin._.updated.to
end,
title = "Updated",
},
@ -63,25 +63,25 @@ return {
},
{
filter = function(plugin)
return plugin.installed and not plugin.uri
return plugin._.installed and not plugin.uri
end,
title = "Clean",
},
{
filter = function(plugin)
return not plugin.installed and not plugin.uri
return not plugin._.installed and not plugin.uri
end,
title = "Cleaned",
},
{
filter = function(plugin)
return plugin.loaded
return plugin._.loaded
end,
title = "Loaded",
},
{
filter = function(plugin)
return plugin.installed
return plugin._.installed
end,
title = "Installed",
},