From e42050f4aed5ee332cc95bacd622bfbc9a31dbe0 Mon Sep 17 00:00:00 2001 From: Matthieu Coudron <886074+teto@users.noreply.github.com> Date: Tue, 21 Oct 2025 16:46:03 +0200 Subject: [PATCH] feat(vimscript): log function name in "fast" message #32616 --- src/nvim/lua/executor.c | 5 ++++- test/functional/lua/vim_spec.lua | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/nvim/lua/executor.c b/src/nvim/lua/executor.c index 54b36d06d8..124fce58b6 100644 --- 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 index 7d2db461b6..d5143cb033 100644 --- 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('') + 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',