feat(checker): checker will now save last check time and only check at configured frequency even after restarting Neovim

This commit is contained in:
Folke Lemaitre 2023-01-18 08:24:43 +01:00
parent 835731f102
commit 813fc944d7
No known key found for this signature in database
GPG Key ID: 41F8B1FBACAE2040
3 changed files with 59 additions and 3 deletions

View File

@ -136,6 +136,7 @@ M.defaults = {
-- only generate markdown helptags for plugins that dont have docs
skip_if_doc_exists = true,
},
state = vim.fn.stdpath("state") .. "/lazy/state.json", -- state info for checker and other things
debug = false,
}

View File

@ -3,6 +3,7 @@ local Manage = require("lazy.manage")
local Util = require("lazy.util")
local Plugin = require("lazy.core.plugin")
local Git = require("lazy.manage.git")
local State = require("lazy.state")
local M = {}
@ -12,7 +13,14 @@ M.reported = {}
function M.start()
M.fast_check()
M.check()
M.schedule()
end
function M.schedule()
State.read() -- update state
local next_check = State.checker.last_check + Config.options.checker.frequency - os.time()
next_check = math.max(next_check, 0)
vim.defer_fn(M.check, next_check * 1000)
end
---@param opts? {report:boolean} report defaults to true
@ -32,6 +40,8 @@ function M.fast_check(opts)
end
function M.check()
State.checker.last_check = os.time()
State.write() -- update state
local errors = false
for _, plugin in pairs(Config.plugins) do
if Plugin.has_errors(plugin) then
@ -40,14 +50,14 @@ function M.check()
end
end
if errors then
vim.defer_fn(M.check, Config.options.checker.frequency * 1000)
M.schedule()
else
Manage.check({
show = false,
concurrency = Config.options.checker.concurrency,
}):wait(function()
M.report()
vim.defer_fn(M.check, Config.options.checker.frequency * 1000)
M.schedule()
end)
end
end

45
lua/lazy/state.lua Normal file
View File

@ -0,0 +1,45 @@
local Util = require("lazy.util")
local Config = require("lazy.core.config")
---@type LazyState
local M = {}
---@class LazyState
local defaults = {
checker = {
last_check = 0,
},
}
---@type LazyState
local data = nil
function M.read()
pcall(function()
---@diagnostic disable-next-line: cast-local-type
data = vim.json.decode(Util.read_file(Config.options.state))
end)
data = vim.tbl_deep_extend("force", {}, defaults, data or {})
end
function M.write()
vim.fn.mkdir(vim.fn.fnamemodify(Config.options.state, ":p:h"), "p")
Util.write_file(Config.options.state, vim.json.encode(data))
end
function M.__index(_, key)
if not data then
M.read()
end
return data[key]
end
function M.__setindex(_, key, value)
if not data then
M.read()
end
---@diagnostic disable-next-line: no-unknown
data[key] = value
end
return setmetatable(M, M)