feat(lua): exit 1 on Lua "-l" script error

This commit is contained in:
Justin M. Keyes
2023-01-02 15:34:14 +01:00
parent 45549f031e
commit adef308a59
6 changed files with 43 additions and 23 deletions

View File

@@ -1042,7 +1042,7 @@ EXTERN int vim_ignored;
// stdio is an RPC channel (--embed).
EXTERN bool embedded_mode INIT(= false);
// Do not start a UI nor read/write to stdio (unless embedding).
// Do not start UI (--headless, -l) nor read/write to stdio (unless embedding).
EXTERN bool headless_mode INIT(= false);
// uncrustify:on

View File

@@ -325,10 +325,11 @@ static int nlua_thr_api_nvim__get_runtime(lua_State *lstate)
/// Copies args starting at `lua_arg0` into the Lua `arg` global.
///
/// Example:
/// Example (`lua_arg0` points to "--arg1"):
/// nvim -l foo.lua --arg1 --arg2
///
/// @note `lua` CLI sets _negative_ `arg` indices to the arguments upto "-e".
/// @note Lua CLI sets arguments upto "-e" as _negative_ `_G.arg` indices, but we currently don't
/// follow that convention.
///
/// @see https://www.lua.org/pil/1.4.html
/// @see https://github.com/premake/premake-core/blob/1c1304637f4f5e50ba8c57aae8d1d80ec3b7aaf2/src/host/premake.c#L563-L594
@@ -1710,10 +1711,10 @@ void ex_luafile(exarg_T *const eap)
nlua_exec_file((const char *)eap->arg);
}
/// execute lua code from a file.
/// Executes Lua code from a file.
///
/// Note: we call the lua global loadfile as opposed to calling luaL_loadfile
/// in case loadfile has been overridden in the users environment.
/// Note: we call the Lua global loadfile as opposed to calling luaL_loadfile
/// in case loadfile was overridden in the user's environment.
///
/// @param path path of the file
///

View File

@@ -608,8 +608,9 @@ int main(int argc, char **argv)
}
if (params.luaf != NULL) {
nlua_exec_file(params.luaf);
// return 0;
bool lua_ok = nlua_exec_file(params.luaf);
TIME_MSG("executing Lua -l script");
getout(lua_ok ? 0 : 1);
}
TIME_MSG("before starting main loop");
@@ -659,9 +660,8 @@ void getout(int exitval)
{
exiting = true;
// When running in Ex mode an error causes us to exit with a non-zero exit
// code. POSIX requires this, although it's not 100% clear from the
// standard.
// On error during Ex mode, exit with a non-zero code.
// POSIX requires this, although it's not 100% clear from the standard.
if (exmode_active) {
exitval += ex_exitval;
}
@@ -752,6 +752,7 @@ void getout(int exitval)
if (did_emsg) {
// give the user a chance to read the (error) message
no_wait_return = false;
// TODO(justinmk): this may call getout(0), clobbering exitval...
wait_return(false);
}
@@ -775,10 +776,9 @@ void getout(int exitval)
os_exit(exitval);
}
/// Preserve files and exit.
/// @note IObuff must contain a message.
/// @note This may be called from deadly_signal() in a signal handler, avoid
/// unsafe functions, such as allocating memory.
/// Preserve files, print contents of `IObuff`, and exit 1.
///
/// May be called from deadly_signal().
void preserve_exit(void)
FUNC_ATTR_NORETURN
{
@@ -1309,6 +1309,7 @@ static void command_line_scan(mparm_T *parmp)
break;
case 'l': // "-l" Lua script: args after "-l".
headless_mode = true;
silent_mode = true;
p_verbose = 1;
parmp->no_swap_file = true;
@@ -1403,8 +1404,8 @@ scripterror:
}
}
if (embedded_mode && silent_mode) {
mainerr(_("--embed conflicts with -es/-Es"), NULL);
if (embedded_mode && (silent_mode || parmp->luaf)) {
mainerr(_("--embed conflicts with -es/-Es/-l"), NULL);
}
// If there is a "+123" or "-c" command, set v:swapcommand to the first one.