Skip to content

Commit

Permalink
feat(checker): checker will now save last check time and only check a…
Browse files Browse the repository at this point in the history
…t configured frequency even after restarting Neovim
  • Loading branch information
folke committed Jan 18, 2023
1 parent 835731f commit 813fc94
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 3 deletions.
1 change: 1 addition & 0 deletions lua/lazy/core/config.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}

Expand Down
16 changes: 13 additions & 3 deletions lua/lazy/manage/checker.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {}

Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down
45 changes: 45 additions & 0 deletions lua/lazy/state.lua
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit 813fc94

Please sign in to comment.