docs: added docs on optional

This commit is contained in:
Folke Lemaitre 2023-05-23 08:57:53 +02:00
parent b1ad64a73e
commit b0aa5348d8
No known key found for this signature in database
GPG Key ID: 41F8B1FBACAE2040
2 changed files with 15 additions and 9 deletions

View File

@ -107,6 +107,7 @@ require("lazy").setup({
| **keys** | `string?` or `string[]` or `LazyKeys[]` or `fun(self:LazyPlugin, keys:string[]):(string \| LazyKeys)[]` | Lazy-load on key mapping | | **keys** | `string?` or `string[]` or `LazyKeys[]` or `fun(self:LazyPlugin, keys:string[]):(string \| LazyKeys)[]` | Lazy-load on key mapping |
| **module** | `false?` | Do not automatically load this Lua module when it's required somewhere | | **module** | `false?` | Do not automatically load this Lua module when it's required somewhere |
| **priority** | `number?` | Only useful for **start** plugins (`lazy=false`) to force loading certain plugins first. Default priority is `50`. It's recommended to set this to a high number for colorschemes. | | **priority** | `number?` | Only useful for **start** plugins (`lazy=false`) to force loading certain plugins first. Default priority is `50`. It's recommended to set this to a high number for colorschemes. |
| **optional** | `boolean?` | When a spec is tagged optional, it will only be included in the final spec, when the same plugin has been specified at least once somewhere else without `optional`. This is mainly useful for Neovim distros, to allow setting options on plugins that may/may not be part of the user's plugins |
### Lazy Loading ### Lazy Loading

View File

@ -12,16 +12,19 @@ M.loading = false
---@field modules string[] ---@field modules string[]
---@field notifs {msg:string, level:number, file?:string}[] ---@field notifs {msg:string, level:number, file?:string}[]
---@field importing? string ---@field importing? string
---@field optional? boolean
local Spec = {} local Spec = {}
M.Spec = Spec M.Spec = Spec
---@param spec? LazySpec ---@param spec? LazySpec
function Spec.new(spec) ---@param opts? {optional?:boolean}
function Spec.new(spec, opts)
local self = setmetatable({}, { __index = Spec }) local self = setmetatable({}, { __index = Spec })
self.plugins = {} self.plugins = {}
self.disabled = {} self.disabled = {}
self.modules = {} self.modules = {}
self.notifs = {} self.notifs = {}
self.optional = opts and opts.optional
if spec then if spec then
self:parse(spec) self:parse(spec)
end end
@ -141,15 +144,17 @@ function Spec:warn(msg)
end end
function Spec:fix_disabled() function Spec:fix_disabled()
---@param plugin LazyPlugin if not self.optional then
local function all_optional(plugin) ---@param plugin LazyPlugin
return (not plugin) or (rawget(plugin, "optional") and all_optional(plugin._.super)) local function all_optional(plugin)
end return (not plugin) or (rawget(plugin, "optional") and all_optional(plugin._.super))
end
-- handle optional plugins -- handle optional plugins
for _, plugin in pairs(self.plugins) do for _, plugin in pairs(self.plugins) do
if plugin.optional and all_optional(plugin) then if plugin.optional and all_optional(plugin) then
self.plugins[plugin.name] = nil self.plugins[plugin.name] = nil
end
end end
end end