mirror of
https://github.com/neovim/neovim.git
synced 2025-09-14 07:18:17 +00:00
Merge pull request #11470 from bfredl/emptytable
metatable for empty dict value
This commit is contained in:
@@ -717,6 +717,16 @@ vim.NIL *vim.NIL*
|
||||
is equivalent to a missing value: `{"foo", nil}` is the same as
|
||||
`{"foo"}`
|
||||
|
||||
vim.empty_dict() *vim.empty_dict()*
|
||||
Creates a special table which will be converted to an empty
|
||||
dictionary when converting lua values to vimL or API types. The
|
||||
table is empty, and this property is marked using a metatable. An
|
||||
empty table `{}` without this metatable will default to convert to
|
||||
an array/list.
|
||||
|
||||
Note: if numeric keys are added to the table, the metatable will be
|
||||
ignored and the dict converted to a list/array anyway.
|
||||
|
||||
vim.rpcnotify({channel}, {method}[, {args}...]) *vim.rpcnotify()*
|
||||
Sends {event} to {channel} via |RPC| and returns immediately.
|
||||
If {channel} is 0, the event is broadcast to all channels.
|
||||
|
@@ -244,6 +244,11 @@ function Inspector:putTable(t)
|
||||
|
||||
local nonSequentialKeys, nonSequentialKeysLength, sequenceLength = getNonSequentialKeys(t)
|
||||
local mt = getmetatable(t)
|
||||
if (vim and sequenceLength == 0 and nonSequentialKeysLength == 0
|
||||
and mt == vim._empty_dict_mt) then
|
||||
self:puts(tostring(t))
|
||||
return
|
||||
end
|
||||
|
||||
self:puts('{')
|
||||
self:down(function()
|
||||
|
@@ -275,9 +275,15 @@ function vim.tbl_flatten(t)
|
||||
end
|
||||
|
||||
-- Determine whether a Lua table can be treated as an array.
|
||||
--
|
||||
-- An empty table `{}` will default to being treated as an array.
|
||||
-- Use `vim.emtpy_dict()` to create a table treated as an
|
||||
-- empty dict. Empty tables returned by `rpcrequest()` and
|
||||
-- `vim.fn` functions can be checked using this function
|
||||
-- whether they represent empty API arrays and vimL lists.
|
||||
---
|
||||
--@params Table
|
||||
--@returns true: A non-empty array, false: A non-empty table, nil: An empty table
|
||||
--@returns true: An array-like table, false: A dict-like or mixed table
|
||||
function vim.tbl_islist(t)
|
||||
if type(t) ~= 'table' then
|
||||
return false
|
||||
@@ -296,7 +302,12 @@ function vim.tbl_islist(t)
|
||||
if count > 0 then
|
||||
return true
|
||||
else
|
||||
return nil
|
||||
-- TODO(bfredl): in the future, we will always be inside nvim
|
||||
-- then this check can be deleted.
|
||||
if vim._empty_dict_mt == nil then
|
||||
return nil
|
||||
end
|
||||
return getmetatable(t) ~= vim._empty_dict_mt
|
||||
end
|
||||
end
|
||||
|
||||
|
Reference in New Issue
Block a user