From 70f764bf735f74aed795188aeb8e57ccae0ae94e Mon Sep 17 00:00:00 2001 From: Folke Lemaitre Date: Fri, 13 Oct 2023 11:37:52 +0200 Subject: [PATCH] fix(util): Util.merge now skips nil args --- lua/lazy/core/util.lua | 11 ++++------- tests/core/util_spec.lua | 22 +++++++++++++++++++++- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/lua/lazy/core/util.lua b/lua/lazy/core/util.lua index dd9b2a9..0b27797 100644 --- a/lua/lazy/core/util.lua +++ b/lua/lazy/core/util.lua @@ -396,22 +396,19 @@ end ---@param ... T ---@return T function M.merge(...) - local values = { ... } - local ret = values[1] - + local ret = select(1, ...) if ret == vim.NIL then ret = nil end - - for i = 2, #values, 1 do - local value = values[i] + for i = 2, select("#", ...) do + local value = select(i, ...) if can_merge(ret) and can_merge(value) then for k, v in pairs(value) do ret[k] = M.merge(ret[k], v) end elseif value == vim.NIL then ret = nil - else + elseif value ~= nil then ret = value end end diff --git a/tests/core/util_spec.lua b/tests/core/util_spec.lua index 97c42c7..1d3592c 100644 --- a/tests/core/util_spec.lua +++ b/tests/core/util_spec.lua @@ -101,6 +101,22 @@ describe("util", function() input = { { a = 1 }, { b = 2 } }, output = { a = 1, b = 2 }, }, + { + input = { nil, { a = 1 }, { b = 2 } }, + output = { a = 1, b = 2 }, + }, + { + input = { { a = 1 }, { b = 2 }, nil }, + output = { a = 1, b = 2 }, + }, + { + input = { { a = 1 }, nil, { b = 2 } }, + output = { a = 1, b = 2 }, + }, + { + input = { nil, { a = 1 }, nil, { b = 2 }, nil }, + output = { a = 1, b = 2 }, + }, { input = { { a = 1 }, { a = 2 } }, output = { a = 2 }, @@ -120,7 +136,11 @@ describe("util", function() } for _, test in ipairs(tests) do - assert.same(test.output, Util.merge(unpack(test.input))) + local n = 0 + for i in pairs(test.input) do + n = math.max(n, i) + end + assert.same(test.output, Util.merge(unpack(test.input, 1, n))) end end) end)