commit e42050f4aed5ee332cc95bacd622bfbc9a31dbe0
parent 3c4acc0f1a2ba3c54e858283cf949e28079eb379
Author: Matthieu Coudron <886074+teto@users.noreply.github.com>
Date: Tue, 21 Oct 2025 16:46:03 +0200
feat(vimscript): log function name in "fast" message #32616
Diffstat:
2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/src/nvim/lua/executor.c b/src/nvim/lua/executor.c
@@ -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;
diff --git a/test/functional/lua/vim_spec.lua b/test/functional/lua/vim_spec.lua
@@ -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',