From aed842ae1e39aa227069a7f46ef0e141efbd021b Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Mon, 26 Dec 2022 09:35:19 +0100 Subject: [PATCH] feat(plugin): added `Plugin.cond`. Fixes #89, #168 --- README.md | 3 ++- lua/lazy/core/loader.lua | 5 +++++ lua/lazy/core/plugin.lua | 2 ++ lua/lazy/view/colors.lua | 1 + lua/lazy/view/render.lua | 2 ++ 5 files changed, 12 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c919872..0901eec 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,8 @@ require("lazy").setup({ | **name** | `string?` | A custom name for the plugin used for the local plugin directory and as the display name | | **dev** | `boolean?` | When `true`, a local plugin directory will be used instead. See `config.dev` | | **lazy** | `boolean?` | When `true`, the plugin will only be loaded when needed. Lazy-loaded plugins are automatically loaded when their Lua modules are `required`, or when one of the lazy-loading handlers triggers | -| **enabled** | `boolean?` or `fun():boolean` | When `false`, or if the `function` returns false, then this plugin will not be used | +| **enabled** | `boolean?` or `fun():boolean` | When `false`, or if the `function` returns false, then this plugin will not be included in the spec | +| **cond** | `boolean?` or `fun():boolean` | When `false`, or if the `function` returns false, then this plugin will not be loaded. Useful to disable some plugins in vscode, or firenvim for example. | | **dependencies** | `LazySpec[]` | A list of plugin specs that should be loaded when the plugin loads. Dependencies are always lazy-loaded unless specified otherwise | | **init** | `fun(LazyPlugin)` | `init` functions are always executed during startup | | **config** | `fun(LazyPlugin)` or `true` or `table` | `config` is executed when the plugin loads. You can also set to `true` or pass a `table`, that will be passed to `require("plugin").setup(opts)` | diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 3c443d5..60e6a84 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -121,6 +121,11 @@ function M.load(plugins, reason) end end + if try_load and plugin.cond then + try_load = plugin.cond == true or (type(plugin.cond) == "function" and plugin.cond()) or false + plugin._.cond = try_load + end + ---@cast plugin LazyPlugin if try_load and not plugin._.loaded then diff --git a/lua/lazy/core/plugin.lua b/lua/lazy/core/plugin.lua index de365d9..54509e5 100644 --- a/lua/lazy/core/plugin.lua +++ b/lua/lazy/core/plugin.lua @@ -18,6 +18,7 @@ local M = {} ---@field cloned? boolean ---@field kind? LazyPluginKind ---@field dep? boolean True if this plugin is only in the spec as a dependency +---@field cond? boolean ---@class LazyPluginHooks ---@field init? fun(LazyPlugin) Will always be run @@ -44,6 +45,7 @@ local M = {} ---@field url string? ---@field dir string ---@field enabled? boolean|(fun():boolean) +---@field cond? boolean|(fun():boolean) ---@field lazy? boolean ---@field dev? boolean If set, then link to the respective folder under your ~/projects ---@field dependencies? string[] diff --git a/lua/lazy/view/colors.lua b/lua/lazy/view/colors.lua index ed489c9..f03b402 100644 --- a/lua/lazy/view/colors.lua +++ b/lua/lazy/view/colors.lua @@ -15,6 +15,7 @@ M.colors = { fg = "#ff007c", }, ProgressTodo = "LineNr", + NoCond = "DiagnosticError", Special = "@punctuation.special", HandlerRuntime = "@macro", HandlerPlugin = "Special", diff --git a/lua/lazy/view/render.lua b/lua/lazy/view/render.lua index 8342a8e..c4e15bb 100644 --- a/lua/lazy/view/render.lua +++ b/lua/lazy/view/render.lua @@ -359,6 +359,8 @@ end function M:plugin(plugin) if plugin._.loaded then self:append(" ● ", "LazySpecial"):append(plugin.name) + elseif plugin._.cond == false then + self:append(" ○ ", "LazyNoCond"):append(plugin.name) else self:append(" ○ ", "LazySpecial"):append(plugin.name) end