mirror of
https://github.com/folke/lazy.nvim.git
synced 2025-04-20 05:16:45 +00:00
refactor(handlers): lazy resolving of plugin handlers
This commit is contained in:
parent
2270bbbc48
commit
47dafaed64
8 changed files with 103 additions and 110 deletions
|
@ -37,7 +37,7 @@ M.group = vim.api.nvim_create_augroup("lazy_handler_event", { clear = true })
|
|||
|
||||
---@param spec LazyEventSpec
|
||||
---@return LazyEvent
|
||||
function M:parse(spec)
|
||||
function M:_parse(spec)
|
||||
local ret = M.mappings[spec] --[[@as LazyEvent?]]
|
||||
if ret then
|
||||
return ret
|
||||
|
@ -62,19 +62,6 @@ function M:parse(spec)
|
|||
return ret
|
||||
end
|
||||
|
||||
---@param plugin LazyPlugin
|
||||
function M:values(plugin)
|
||||
local Plugin = require("lazy.core.plugin")
|
||||
---@type table<string,any>
|
||||
local values = {}
|
||||
---@diagnostic disable-next-line: no-unknown
|
||||
for _, value in ipairs(Plugin.values(plugin, self.type, true)) do
|
||||
local event = self:parse(value)
|
||||
values[event.id] = event
|
||||
end
|
||||
return values
|
||||
end
|
||||
|
||||
---@param event LazyEvent
|
||||
function M:_add(event)
|
||||
local done = false
|
||||
|
|
|
@ -13,7 +13,8 @@ function M:add(plugin)
|
|||
end
|
||||
end
|
||||
|
||||
function M:parse(value)
|
||||
---@return LazyEvent
|
||||
function M:_parse(value)
|
||||
return {
|
||||
id = value,
|
||||
event = "FileType",
|
||||
|
|
|
@ -39,29 +39,25 @@ end
|
|||
|
||||
---@param plugin LazyPlugin
|
||||
function M.disable(plugin)
|
||||
if not plugin._.handlers_enabled then
|
||||
return
|
||||
end
|
||||
plugin._.handlers_enabled = false
|
||||
for type, handler in pairs(M.handlers) do
|
||||
if plugin[type] then
|
||||
handler:del(plugin)
|
||||
end
|
||||
for type in pairs(plugin._.handlers or {}) do
|
||||
M.handlers[type]:del(plugin)
|
||||
end
|
||||
end
|
||||
|
||||
---@param plugin LazyPlugin
|
||||
function M.enable(plugin)
|
||||
if not plugin._.loaded then
|
||||
if plugin._.handlers_enabled then
|
||||
return
|
||||
end
|
||||
for type, handler in pairs(M.handlers) do
|
||||
if plugin[type] then
|
||||
handler:add(plugin)
|
||||
if not plugin._.handlers then
|
||||
plugin._.handlers = {}
|
||||
for type, handler in pairs(M.handlers) do
|
||||
if plugin[type] then
|
||||
handler:load(plugin)
|
||||
end
|
||||
end
|
||||
end
|
||||
plugin._.handlers_enabled = true
|
||||
for type in pairs(plugin._.handlers or {}) do
|
||||
M.handlers[type]:add(plugin)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -86,21 +82,35 @@ function M:_add(_value) end
|
|||
---@protected
|
||||
function M:_del(_value) end
|
||||
|
||||
---@param value any
|
||||
---@param _plugin LazyPlugin
|
||||
---@return string|{id:string}
|
||||
function M:_parse(value, _plugin)
|
||||
assert(type(value) == "string", "Expected string, got " .. vim.inspect(value))
|
||||
return value
|
||||
end
|
||||
|
||||
---@param values any[]
|
||||
---@param plugin LazyPlugin
|
||||
function M:values(plugin)
|
||||
local Plugin = require("lazy.core.plugin")
|
||||
function M:_values(values, plugin)
|
||||
---@type table<string,any>
|
||||
local values = {}
|
||||
---@diagnostic disable-next-line: no-unknown
|
||||
for _, value in ipairs(Plugin.values(plugin, self.type, true)) do
|
||||
values[value] = value
|
||||
local ret = {}
|
||||
for _, value in ipairs(values) do
|
||||
local parsed = self:_parse(value, plugin)
|
||||
ret[type(parsed) == "string" and parsed or parsed.id] = parsed
|
||||
end
|
||||
return values
|
||||
return ret
|
||||
end
|
||||
|
||||
---@param plugin LazyPlugin
|
||||
function M:load(plugin)
|
||||
local Plugin = require("lazy.core.plugin")
|
||||
plugin._.handlers[self.type] = self:_values(Plugin.values(plugin, self.type, true), plugin)
|
||||
end
|
||||
|
||||
---@param plugin LazyPlugin
|
||||
function M:add(plugin)
|
||||
for key, value in pairs(self:values(plugin)) do
|
||||
for key, value in pairs(plugin._.handlers[self.type] or {}) do
|
||||
if not self.active[key] then
|
||||
self.active[key] = {}
|
||||
self:_add(value)
|
||||
|
@ -112,7 +122,10 @@ end
|
|||
|
||||
---@param plugin LazyPlugin
|
||||
function M:del(plugin)
|
||||
for key, value in pairs(self:values(plugin)) do
|
||||
if not plugin._.handlers then
|
||||
return
|
||||
end
|
||||
for key, value in pairs(plugin._.handlers[self.type] or {}) do
|
||||
if self.active[key] and self.active[key][plugin.name] then
|
||||
self.active[key][plugin.name] = nil
|
||||
if vim.tbl_isempty(self.active[key]) then
|
||||
|
|
|
@ -19,10 +19,13 @@ local Util = require("lazy.core.util")
|
|||
---@field rhs? string|fun() rhs
|
||||
---@field mode? string
|
||||
---@field id string
|
||||
---@field name string
|
||||
|
||||
---@class LazyKeysHandler:LazyHandler
|
||||
local M = {}
|
||||
|
||||
local skip = { mode = true, id = true, ft = true, rhs = true, lhs = true, name = true }
|
||||
|
||||
---@param value string|LazyKeysSpec
|
||||
---@param mode? string
|
||||
---@return LazyKeys
|
||||
|
@ -37,8 +40,11 @@ function M.parse(value, mode)
|
|||
ret[2] = nil
|
||||
ret.mode = mode or "n"
|
||||
ret.id = vim.api.nvim_replace_termcodes(ret.lhs, true, true, true)
|
||||
ret.name = ret.lhs
|
||||
|
||||
if ret.mode ~= "n" then
|
||||
ret.id = ret.id .. " (" .. ret.mode .. ")"
|
||||
ret.name = ret.name .. " (" .. ret.mode .. ")"
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
@ -50,10 +56,8 @@ function M:have(lhs, mode)
|
|||
return self.managed[keys.id] ~= nil
|
||||
end
|
||||
|
||||
---@param plugin LazyPlugin
|
||||
function M:values(plugin)
|
||||
local Plugin = require("lazy.core.plugin")
|
||||
return M.resolve(Plugin.values(plugin, "keys", true))
|
||||
function M:_values(values)
|
||||
return M.resolve(values)
|
||||
end
|
||||
|
||||
---@param spec? (string|LazyKeysSpec)[]
|
||||
|
@ -79,7 +83,6 @@ end
|
|||
|
||||
---@param keys LazyKeys
|
||||
function M.opts(keys)
|
||||
local skip = { mode = true, id = true, ft = true, rhs = true, lhs = true }
|
||||
local opts = {} ---@type LazyKeysBase
|
||||
---@diagnostic disable-next-line: no-unknown
|
||||
for k, v in pairs(keys) do
|
||||
|
@ -106,8 +109,8 @@ function M:_add(keys)
|
|||
self.active[keys.id] = nil
|
||||
|
||||
if plugins then
|
||||
Util.track({ keys = lhs })
|
||||
Loader.load(plugins, { keys = lhs })
|
||||
Util.track({ keys = keys.name })
|
||||
Loader.load(plugins, { keys = keys.name })
|
||||
Util.track()
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue