aboutsummaryrefslogtreecommitdiff
path: root/test/functional/lua/vim_spec.lua
diff options
context:
space:
mode:
authorYi Ming <ofseed@foxmail.com>2026-05-06 04:32:20 +0800
committerGitHub <noreply@github.com>2026-05-05 16:32:20 -0400
commit264fbc0ace0b701ac6fa8fe217d42950c8fd79c3 (patch)
tree5272f66e2c2f0c70aebd7f8b113782228330b21e /test/functional/lua/vim_spec.lua
parentb1ebf45a6d251fc81446fa21d9b2bf25bcc87c5e (diff)
downloadrneovim-264fbc0ace0b701ac6fa8fe217d42950c8fd79c3.tar.gz
rneovim-264fbc0ace0b701ac6fa8fe217d42950c8fd79c3.tar.bz2
rneovim-264fbc0ace0b701ac6fa8fe217d42950c8fd79c3.zip
fix(lua): avoid `__index` when deciding if a table is a list #39556
Problem: When a table has `__index`, `vim.islist` is unreliable. Solution: Index using `rawget`.
Diffstat (limited to 'test/functional/lua/vim_spec.lua')
-rw-r--r--test/functional/lua/vim_spec.lua11
1 files changed, 11 insertions, 0 deletions
diff --git a/test/functional/lua/vim_spec.lua b/test/functional/lua/vim_spec.lua
index ce5341ad15..cdd643b80a 100644
--- a/test/functional/lua/vim_spec.lua
+++ b/test/functional/lua/vim_spec.lua
@@ -969,6 +969,17 @@ describe('lua stdlib', function()
eq(false, exec_lua('return vim.islist({1, 2, nil, 4})'))
eq(false, exec_lua('return vim.islist({nil, 2, 3, 4})'))
eq(false, exec_lua('return vim.islist({1, [1.5]=2, [3]=3})'))
+ eq(
+ false,
+ exec_lua([[
+ local t = setmetatable({ 1, [3] = 3 }, {
+ __index = function()
+ return 2
+ end,
+ })
+ return vim.islist(t)
+ ]])
+ )
end)
it('vim.tbl_isempty', function()