diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2025-03-20 15:24:32 -0300 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-05-16 09:04:17 -0600 |
| commit | 969af089c8351d5356b1ed9f8208f0be9b4ee703 (patch) | |
| tree | 2acea409e38b40cfa5f3f8a259919f348a977c3a | |
| parent | 90144941f7126383f279033bad6e0f3485970c42 (diff) | |
| download | vis-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.lua | 23 | ||||
| -rwxr-xr-x | util_test.lua | 9 |
2 files changed, 16 insertions, 16 deletions
@@ -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') |
