diff options
| author | Yi Ming <ofseed@foxmail.com> | 2026-05-06 04:32:20 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-05-05 16:32:20 -0400 |
| commit | 264fbc0ace0b701ac6fa8fe217d42950c8fd79c3 (patch) | |
| tree | 5272f66e2c2f0c70aebd7f8b113782228330b21e /test/functional/lua/vim_spec.lua | |
| parent | b1ebf45a6d251fc81446fa21d9b2bf25bcc87c5e (diff) | |
| download | rneovim-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.lua | 11 |
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() |