feat(vimscript): log function name in "fast" message #32616

This commit is contained in:
Matthieu Coudron
2025-10-21 16:46:03 +02:00
committed by GitHub
parent 3c4acc0f1a
commit e42050f4ae
2 changed files with 20 additions and 1 deletions

View File

@@ -1179,7 +1179,10 @@ int nlua_call(lua_State *lstate)
size_t name_len;
const char *name = luaL_checklstring(lstate, 1, &name_len);
if (!nlua_is_deferred_safe() && !viml_func_is_fast(name)) {
return luaL_error(lstate, e_fast_api_disabled, "Vimscript function");
size_t length = MIN(strlen(name), 100) + sizeof("Vimscript function \"\"");
vim_snprintf(IObuff, length, "Vimscript function \"%s\"", name);
int ret = luaL_error(lstate, e_fast_api_disabled, IObuff);
return ret;
}
int nargs = lua_gettop(lstate) - 1;

View File

@@ -1355,6 +1355,22 @@ describe('lua stdlib', function()
)
end)
it('vim.call fails in fast context', function()
local screen = Screen.new(120, 10)
exec_lua([[
local timer = vim.uv.new_timer()
timer:start(0, 0, function()
timer:close()
vim.call('sin', 0.0)
end)
]])
screen:expect({
any = pesc('E5560: Vimscript function "sin" must not be called in a fast event context'),
})
feed('<CR>')
assert_alive()
end)
it('vim.fn errors when calling API function', function()
matches(
'Tried to call API function with vim.fn: use vim.api.nvim_get_current_line instead',