Merge pull request #40475 from bfredl/vim.NIL

fix(lua): give nicer error message when trying to index vim.NIL
This commit is contained in:
bfredl
2026-06-29 19:28:52 +02:00
committed by GitHub
2 changed files with 16 additions and 0 deletions

View File

@@ -676,6 +676,10 @@ static void nlua_common_vim_init(lua_State *lstate, bool is_thread)
lua_createtable(lstate, 0, 0);
lua_pushcfunction(lstate, &nlua_nil_tostring);
lua_setfield(lstate, -2, "__tostring");
lua_pushcfunction(lstate, &nlua_nil_index);
lua_setfield(lstate, -2, "__index");
lua_pushcfunction(lstate, &nlua_nil_index);
lua_setfield(lstate, -2, "__newindex");
lua_setmetatable(lstate, -2);
ref_state->nil_ref = nlua_ref(lstate, ref_state, -1);
lua_pushvalue(lstate, -1);
@@ -1395,6 +1399,11 @@ static int nlua_nil_tostring(lua_State *lstate)
return 1;
}
static int nlua_nil_index(lua_State *lstate)
{
return luaL_error(lstate, "attempt to index vim.NIL");
}
static int nlua_empty_dict_tostring(lua_State *lstate)
{
lua_pushstring(lstate, "vim.empty_dict()");

View File

@@ -178,6 +178,13 @@ describe('vim.json.decode()', function()
pcall_err(exec_lua, [[return vim.json.decode('{"a":1/*x*/0}', { skip_comments = true })]])
)
end)
it('gives nice error message when attempting to index into null value', function()
exec_lua [[ parsed = vim.json.decode('{"foo": null}') ]]
eq('attempt to index vim.NIL', pcall_err(exec_lua, [[ return parsed.foo.sub_field ]]))
eq('attempt to index vim.NIL', pcall_err(exec_lua, [[ parsed.foo.new_field = 3 ]]))
end)
end)
describe('vim.json.encode()', function()