aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2025-03-20 15:24:32 -0300
committerFlorian Fischer <florian.fischer@muhq.space>2025-05-16 09:04:17 -0600
commit969af089c8351d5356b1ed9f8208f0be9b4ee703 (patch)
tree2acea409e38b40cfa5f3f8a259919f348a977c3a
parent90144941f7126383f279033bad6e0f3485970c42 (diff)
downloadvis-lspc-969af089c8351d5356b1ed9f8208f0be9b4ee703.tar.gz
vis-lspc-969af089c8351d5356b1ed9f8208f0be9b4ee703.zip
append numbered members when merging
Overriding numbered members is not intuitive. Merging {1} and {2} should return {1,2} not {2}.
-rw-r--r--util.lua23
-rwxr-xr-xutil_test.lua9
2 files changed, 16 insertions, 16 deletions
diff --git a/util.lua b/util.lua
index 4aa7406..ab111f7 100644
--- a/util.lua
+++ b/util.lua
@@ -3,7 +3,7 @@
-- @author Florian Fischer
-- @author git-bruh <prathamIN@proton.me>
-- @license GPL-3
--- @copyright 2024 Florian Fischer
+-- @copyright 2024-2025 Florian Fischer
-- @copyright 2024 git-bruh <prathamIN@proton.me>
local util = {}
@@ -308,30 +308,25 @@ end
--- Recursively merge two tables.
-- This method modifies the weak table, if this is not intended make sure you
-- use a deep copy of the weak table.
--- The members of the strong table override members of the weak one.
+-- Named members of the strong table override members of the weak one.
+-- Numbered members get inserted into the weak table.
-- @param weak table which's members are potentially overridden
-- @param strong table which's members override ones from the weak table
-- @return the merged table
function util.table.merge(weak, strong)
- -- merge named members
for k, v in pairs(strong) do
- -- potentially override the weak member
if type(v) ~= 'table' then
- weak[k] = v
+ if tonumber(k) then -- append numeric members
+ table.insert(weak, v)
+ else -- potentially override the weak member
+ weak[k] = v
+ end
+
else
weak[k] = util.table.merge(weak[k] or {}, v)
end
end
- -- merge numbered members
- for i, v in ipairs(strong) do
- -- potentially override the weak member
- if type(v) ~= 'table' then
- weak[i] = v
- else
- weak[i] = util.table.merge(weak[i] or {}, v)
- end
- end
return weak
end
diff --git a/util_test.lua b/util_test.lua
index 9f34d3c..c49b66e 100755
--- a/util_test.lua
+++ b/util_test.lua
@@ -42,11 +42,16 @@ function test_table_merge() -- luacheck: ignore 111
util.table.merge(t, t2)
lunatest.assert_table(t)
- lunatest.assert_len(2, t)
+ lunatest.assert_len(3, t)
+
+ lunatest.assert_equal(1, t[1])
+ lunatest.assert_equal(2, t[2])
+ lunatest.assert_equal(3, t[3])
+
lunatest.assert_table(t.foo)
lunatest.assert_len(2, t.foo)
- lunatest.assert_equal(t[1], t2[1])
+ lunatest.assert_equal(t[3], t2[1])
lunatest.assert_equal(t[2], 2)
lunatest.assert_equal(t.foo.bar.bar, 'bar')