misc.merge: ensure that misc.none is never returned (#441)
Before this change:
1. `misc.merge({a = misc.none}, {a = nil})` returned `{a = misc.none}`
2. `misc.merge({a = nil}, {a = misc.none})` returned `{a = misc.none}`
(1) can cause error if a non-existing mapping is set to `config.disable`
(which is an alias for `misc.none`).
(2) does not cause any issue to date, but is inconsistent with the
expected behavior of `misc.merge(…)`.
After this change:
1. `misc.merge({a = misc.none}, {a = nil})` returns `{a = nil}`
2. `misc.merge({a = nil}, {a = misc.none})` returns `{a = nil}`
Fixes #440.
This commit is contained in:
@@ -46,7 +46,7 @@ misc.merge = function(v1, v2)
|
|||||||
new_tbl[k] = misc.merge(v1[k], v)
|
new_tbl[k] = misc.merge(v1[k], v)
|
||||||
end
|
end
|
||||||
for k, v in pairs(v1) do
|
for k, v in pairs(v1) do
|
||||||
if v2[k] == nil then
|
if v2[k] == nil and v ~= misc.none then
|
||||||
new_tbl[k] = v
|
new_tbl[k] = v
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -56,7 +56,11 @@ misc.merge = function(v1, v2)
|
|||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
if v1 == nil then
|
if v1 == nil then
|
||||||
return v2
|
if v2 == misc.none then
|
||||||
|
return nil
|
||||||
|
else
|
||||||
|
return v2
|
||||||
|
end
|
||||||
end
|
end
|
||||||
if v1 == true then
|
if v1 == true then
|
||||||
if merge2 then
|
if merge2 then
|
||||||
|
|||||||
@@ -33,5 +33,19 @@ describe('misc', function()
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
assert.are.equal(merged.a, nil)
|
assert.are.equal(merged.a, nil)
|
||||||
|
|
||||||
|
merged = misc.merge({
|
||||||
|
a = misc.none,
|
||||||
|
}, {
|
||||||
|
a = nil,
|
||||||
|
})
|
||||||
|
assert.are.equal(merged.a, nil)
|
||||||
|
|
||||||
|
merged = misc.merge({
|
||||||
|
a = nil,
|
||||||
|
}, {
|
||||||
|
a = misc.none,
|
||||||
|
})
|
||||||
|
assert.are.equal(merged.a, nil)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|||||||
Reference in New Issue
Block a user