From f7c939fa7af9744bcb6d79100a7e126f7e9c8f5c Mon Sep 17 00:00:00 2001 From: Yochem van Rosmalen Date: Sun, 29 Jun 2025 17:19:10 +0200 Subject: fix(exrc): exrc knows its own location (#34638) fix(exrc): lua exrc files know their location Problem: 'exrc' files are inherently bound to their location / workspace and therefore require to "know" their location on the filesystem. However, currently using `debug.getinfo(1, 'S')` returns `""`. Solution: Include the filepath as chunkname in `loadstring()` and `nlua_exec()`. --- src/nvim/lua/executor.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/nvim/lua/executor.c') diff --git a/src/nvim/lua/executor.c b/src/nvim/lua/executor.c index 2f5c7566f4..856dc139af 100644 --- a/src/nvim/lua/executor.c +++ b/src/nvim/lua/executor.c @@ -1512,17 +1512,20 @@ int typval_exec_lua_callable(LuaRef lua_cb, int argcount, typval_T *argvars, typ /// Used for nvim_exec_lua() and internally to execute a lua string. /// /// @param[in] str String to execute. +/// @param[in] chunkname Chunkname, defaults to "". /// @param[in] args array of ... args /// @param[in] mode Whether and how the the return value should be converted to Object /// @param[in] arena can be NULL, then nested allocations are used /// @param[out] err Location where error will be saved. /// /// @return Return value of the execution. -Object nlua_exec(const String str, const Array args, LuaRetMode mode, Arena *arena, Error *err) +Object nlua_exec(const String str, const char *chunkname, const Array args, LuaRetMode mode, + Arena *arena, Error *err) { lua_State *const lstate = global_lstate; - if (luaL_loadbuffer(lstate, str.data, str.size, "")) { + const char *name = (chunkname && chunkname[0]) ? chunkname : ""; + if (luaL_loadbuffer(lstate, str.data, str.size, name)) { size_t len; const char *errstr = lua_tolstring(lstate, -1, &len); api_set_error(err, kErrorTypeValidation, "Lua: %.*s", (int)len, errstr); -- cgit