mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 03:05:11 -07:00
fix(source): Source giving E484 & parsing error at line 1 for lua files
It's happening because do_source is only expected to return FAIL when it was unable to open file . But `nlua_exec_file` returns fail for parsing and execution error too . Those errors are emitted through `nlua_error`. So now return value of nlua_exec_file is ignored like do_cmdline. It now only returns fail when it was unable to open file that check is done before calling nlua_exec_file or do_cmdline. Errors in nlua_exec_file are still directly emitted through nlua_error like before.
This commit is contained in:
parent
b4a216f7ed
commit
b4ac878026
@ -3011,15 +3011,15 @@ int do_source(char_u *fname, int check_other, int is_vimrc)
|
||||
current_sctx.sc_lnum = 0;
|
||||
sourcing_lnum = 0;
|
||||
// Source the file as lua
|
||||
retval = (int)nlua_exec_file((const char *)fname);
|
||||
nlua_exec_file((const char *)fname);
|
||||
current_sctx = current_sctx_backup;
|
||||
sourcing_lnum = sourcing_lnum_backup;
|
||||
} else {
|
||||
// Call do_cmdline, which will call getsourceline() to get the lines.
|
||||
do_cmdline(firstline, getsourceline, (void *)&cookie,
|
||||
DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_REPEAT);
|
||||
retval = OK;
|
||||
}
|
||||
retval = OK;
|
||||
|
||||
if (l_do_profiling == PROF_YES) {
|
||||
// Get "si" again, "script_items" may have been reallocated.
|
||||
|
@ -9,6 +9,8 @@ local feed_command = helpers.feed_command
|
||||
local write_file = helpers.write_file
|
||||
local exec = helpers.exec
|
||||
local eval = helpers.eval
|
||||
local exec_capture = helpers.exec_capture
|
||||
local neq = helpers.neq
|
||||
|
||||
describe(':source', function()
|
||||
before_each(function()
|
||||
@ -90,4 +92,27 @@ describe(':source', function()
|
||||
eq(12, eval('g:c'))
|
||||
os.remove(test_file)
|
||||
end)
|
||||
|
||||
it("doesn't throw E484 for lua parsing/runtime errors", function()
|
||||
local test_file = 'test.lua'
|
||||
|
||||
-- Does throw E484 for unreadable files
|
||||
local ok, result = pcall(exec_capture, ":source "..test_file ..'noexisting')
|
||||
eq(false, ok)
|
||||
neq(nil, result:find("E484"))
|
||||
|
||||
-- Doesn't throw for parsing error
|
||||
write_file (test_file, "vim.g.c = ")
|
||||
ok, result = pcall(exec_capture, ":source "..test_file)
|
||||
eq(false, ok)
|
||||
eq(nil, result:find("E484"))
|
||||
os.remove(test_file)
|
||||
|
||||
-- Doesn't throw for runtime error
|
||||
write_file (test_file, "error('Cause error anyway :D')")
|
||||
ok, result = pcall(exec_capture, ":source "..test_file)
|
||||
eq(false, ok)
|
||||
eq(nil, result:find("E484"))
|
||||
os.remove(test_file)
|
||||
end)
|
||||
end)
|
||||
|
Loading…
Reference in New Issue
Block a user