fix(spec): `Plugin.opts` is now always a table. Fixes #351

This commit is contained in:
Folke Lemaitre 2023-01-08 18:45:30 +01:00
parent ef87c24e8e
commit e77be3cf3b
No known key found for this signature in database
GPG Key ID: 41F8B1FBACAE2040
3 changed files with 13 additions and 5 deletions

View File

@ -234,6 +234,7 @@ end
-- Merges super opts or runs the opts function to override opts or return new ones
---@param plugin LazyPlugin
function M.opts(plugin)
---@type table
local opts = plugin._.super and M.opts(plugin._.super) or {}
---@type PluginOpts?
local plugin_opts = rawget(plugin, "opts")
@ -273,11 +274,7 @@ function M.config(plugin)
end
if #mods == 1 then
fn = function()
local opts = M.opts(plugin)
if next(opts) == nil then
opts = nil
end
require(mods[1]).setup(opts)
require(mods[1]).setup(M.opts(plugin))
end
else
return Util.error(

View File

@ -295,6 +295,9 @@ end
--- Values will me merged in-place in the first left-most table. If you want the result to be in
--- a new table, then simply pass an empty table as the first argument `vim.merge({}, ...)`
--- Supports clearing values by setting a key to `vim.NIL`
---@generic T
---@param ... T
---@return T
function M.merge(...)
local values = { ... }
local ret = values[1]

View File

@ -298,6 +298,14 @@ describe("plugin opts", function()
spec = { { "foo/foo", config = { a = 1, b = 1 } }, { "foo/foo", config = { a = vim.NIL } } },
opts = { b = 1 },
},
{
spec = { { "foo/foo", config = { a = 1, b = 1 } }, { "foo/foo" } },
opts = { a = 1, b = 1 },
},
{
spec = { { "foo/foo" }, { "foo/foo" } },
opts = {},
},
}
for _, test in ipairs(tests) do