feat(lua)!: add stricter vim.tbl_islist() and rename old one to vim.tbl_isarray() (#16440)

feat(lua)!: add stricter vim.tbl_islist(), rename vim.tbl_isarray()

Problem: `vim.tbl_islist` allows gaps in tables with integer keys
("arrays").

Solution: Rename `vim.tbl_islist` to `vim.tbl_isarray`, add new
`vim.tbl.islist` that checks for consecutive integer keys that start
from 1.
This commit is contained in:
NAKAI Tsuyoshi
2023-04-14 19:01:08 +09:00
committed by GitHub
parent 33e90f5138
commit 7caf0eafd8
4 changed files with 80 additions and 11 deletions

View File

@@ -521,6 +521,19 @@ describe('lua stdlib', function()
]]))
end)
it('vim.tbl_isarray', function()
eq(true, exec_lua("return vim.tbl_isarray({})"))
eq(false, exec_lua("return vim.tbl_isarray(vim.empty_dict())"))
eq(true, exec_lua("return vim.tbl_isarray({'a', 'b', 'c'})"))
eq(false, exec_lua("return vim.tbl_isarray({'a', '32', a='hello', b='baz'})"))
eq(false, exec_lua("return vim.tbl_isarray({1, a='hello', b='baz'})"))
eq(false, exec_lua("return vim.tbl_isarray({a='hello', b='baz', 1})"))
eq(false, exec_lua("return vim.tbl_isarray({1, 2, nil, a='hello'})"))
eq(true, exec_lua("return vim.tbl_isarray({1, 2, nil, 4})"))
eq(true, exec_lua("return vim.tbl_isarray({nil, 2, 3, 4})"))
eq(false, exec_lua("return vim.tbl_isarray({1, [1.5]=2, [3]=3})"))
end)
it('vim.tbl_islist', function()
eq(true, exec_lua("return vim.tbl_islist({})"))
eq(false, exec_lua("return vim.tbl_islist(vim.empty_dict())"))
@@ -529,6 +542,9 @@ describe('lua stdlib', function()
eq(false, exec_lua("return vim.tbl_islist({1, a='hello', b='baz'})"))
eq(false, exec_lua("return vim.tbl_islist({a='hello', b='baz', 1})"))
eq(false, exec_lua("return vim.tbl_islist({1, 2, nil, a='hello'})"))
eq(false, exec_lua("return vim.tbl_islist({1, 2, nil, 4})"))
eq(false, exec_lua("return vim.tbl_islist({nil, 2, 3, 4})"))
eq(false, exec_lua("return vim.tbl_islist({1, [1.5]=2, [3]=3})"))
end)
it('vim.tbl_isempty', function()