diff --git a/lua/lazy/core/loader.lua b/lua/lazy/core/loader.lua index 9054d32..1ed7361 100644 --- a/lua/lazy/core/loader.lua +++ b/lua/lazy/core/loader.lua @@ -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( diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index 70c1eb8..213a217 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -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] diff --git a/tests/core/plugin_spec.lua b/tests/core/plugin_spec.lua index d3b8902..f7d39e2 100644 --- a/tests/core/plugin_spec.lua +++ b/tests/core/plugin_spec.lua @@ -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