mirror of
https://github.com/neovim/neovim.git
synced 2025-12-06 22:52:42 +00:00
fix(lua): always return nil values in vim.tbl_get when no results
While `return` and `return nil` are for most intents and purposes
identical, there are situations where they're not. For example,
calculating the amount of values via the `select()` function will yield
varying results:
```lua
local function nothing() return end
local function null() return nil end
select('#', nothing()) -- 0
select('#', null()) -- 1
```
`vim.tbl_get` currently returns both nil and no results, which makes it
unreliable to use in certain situations without manually accounting for
these discrepancies.
This commit is contained in:
@@ -395,15 +395,14 @@ end
|
||||
function vim.tbl_get(o, ...)
|
||||
local keys = { ... }
|
||||
if #keys == 0 then
|
||||
return
|
||||
return nil
|
||||
end
|
||||
for i, k in ipairs(keys) do
|
||||
if type(o[k]) ~= 'table' and next(keys, i) then
|
||||
return nil
|
||||
end
|
||||
o = o[k]
|
||||
if o == nil then
|
||||
return
|
||||
return nil
|
||||
elseif type(o) ~= 'table' and next(keys, i) then
|
||||
return nil
|
||||
end
|
||||
end
|
||||
return o
|
||||
|
||||
Reference in New Issue
Block a user