Skip to content

Commit

Permalink
feat(spec): config can be true or a table that will be passed t…
Browse files Browse the repository at this point in the history
…o `require("plugin").setup(config)`
  • Loading branch information
folke committed Dec 22, 2022
1 parent 9e98389 commit 2a7b004
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 2 deletions.
16 changes: 15 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ require("lazy").setup({
| **enabled** | `boolean?` or `fun():boolean` | When `false`, or if the `function` returns false, then this plugin will not be used |
| **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)` | `config` is executed when the plugin loads |
| **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)` |
| **build** | `fun(LazyPlugin)` | `build` is executed when a plugin is installed or updated |
| **branch** | `string?` | Branch of the repository |
| **tag** | `string?` | Tag of the repository |
Expand Down Expand Up @@ -202,6 +202,20 @@ return {
end,
},

-- the above could also be written as
{
"nvim-neorg/neorg",
ft = "norg",
config = true, -- run require("norg").setup()
},

-- or set custom config
{
"nvim-neorg/neorg",
ft = "norg",
config = { foo = "bar" }, -- run require("norg").setup({foo = "bar"})
},

{
"dstein64/vim-startuptime",
-- lazy-load on a command
Expand Down
36 changes: 35 additions & 1 deletion lua/lazy/core/loader.lua
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ function M.load(plugins, reason)

M.packadd(plugin.dir)
if plugin.config then
Util.try(plugin.config, "Failed to run `config` for " .. plugin.name)
M.config(plugin)
end

plugin._.loaded.time = Util.track().time
Expand All @@ -154,6 +154,40 @@ function M.load(plugins, reason)
end
end

--- runs plugin config
---@param plugin LazyPlugin
function M.config(plugin)
local fn
if type(plugin.config) == "function" then
fn = plugin.config
else
local normname = Util.normname(plugin.name)
---@type table<string, string>
local mods = {}
Util.ls(plugin.dir .. "/lua", function(_, modname)
modname = modname:gsub("%.lua$", "")
mods[modname] = modname
local modnorm = Util.normname(modname)
-- if we found an exact match, then use that
if modnorm == normname then
mods = { modname }
return false
end
end)
mods = vim.tbl_values(mods)
if #mods == 1 then
fn = function()
require(mods[1]).setup(plugin.config == true and {} or plugin.config)
end
else
return Util.error(
"Lua module not found for config of " .. plugin.name .. ". Please use a `config()` function instead"
)
end
end
Util.try(fn, "Failed to run `config` for " .. plugin.name)
end

---@param path string
function M.packadd(path)
M.source_runtime(path, "plugin")
Expand Down
5 changes: 5 additions & 0 deletions lua/lazy/core/util.lua
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@ function M.track(data, time)
end
end

---@param name string
function M.normname(name)
return name:lower():gsub("^n?vim%-", ""):gsub("%.n?vim$", ""):gsub("%.lua", ""):gsub("[^a-z]+", "")
end

function M.norm(path)
if path:sub(1, 1) == "~" then
local home = vim.loop.os_homedir()
Expand Down
14 changes: 14 additions & 0 deletions lua/lazy/example.lua
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,20 @@ return {
end,
},

-- the above could also be written as
{
"nvim-neorg/neorg",
ft = "norg",
config = true, -- run require("norg").setup()
},

-- or set custom config
{
"nvim-neorg/neorg",
ft = "norg",
config = { foo = "bar" }, -- run require("norg").setup({foo = "bar"})
},

{
"dstein64/vim-startuptime",
-- lazy-load on a command
Expand Down

0 comments on commit 2a7b004

Please sign in to comment.