mirror of
https://github.com/neovim/neovim.git
synced 2025-10-01 15:38:33 +00:00
Merge #6731 from ZyX-I/fix-oneline-script-skip
This commit is contained in:
@@ -5401,7 +5401,7 @@ char *script_get(exarg_T *const eap, size_t *const lenp)
|
||||
|
||||
if (cmd[0] != '<' || cmd[1] != '<' || eap->getline == NULL) {
|
||||
*lenp = STRLEN(eap->arg);
|
||||
return xmemdupz(eap->arg, *lenp);
|
||||
return eap->skip ? NULL : xmemdupz(eap->arg, *lenp);
|
||||
}
|
||||
|
||||
garray_T ga = { .ga_data = NULL, .ga_len = 0 };
|
||||
|
75
test/functional/ex_cmds/script_spec.lua
Normal file
75
test/functional/ex_cmds/script_spec.lua
Normal file
@@ -0,0 +1,75 @@
|
||||
local helpers = require('test.functional.helpers')(after_each)
|
||||
|
||||
local eq = helpers.eq
|
||||
local neq = helpers.neq
|
||||
local meths = helpers.meths
|
||||
local clear = helpers.clear
|
||||
local dedent = helpers.dedent
|
||||
local source = helpers.source
|
||||
local exc_exec = helpers.exc_exec
|
||||
local missing_provider = helpers.missing_provider
|
||||
|
||||
before_each(clear)
|
||||
|
||||
describe('script_get-based command', function()
|
||||
local garbage = ')}{+*({}]*[;(+}{&[]}{*])('
|
||||
|
||||
local function test_garbage_exec(cmd, check_neq)
|
||||
describe(cmd, function()
|
||||
it('works correctly when skipping oneline variant', function()
|
||||
eq(true, pcall(source, (dedent([[
|
||||
if 0
|
||||
%s %s
|
||||
endif
|
||||
]])):format(cmd, garbage)))
|
||||
eq('', meths.command_output('messages'))
|
||||
if check_neq then
|
||||
neq(0, exc_exec(dedent([[
|
||||
%s %s
|
||||
]])):format(cmd, garbage))
|
||||
end
|
||||
end)
|
||||
it('works correctly when skipping HEREdoc variant', function()
|
||||
eq(true, pcall(source, (dedent([[
|
||||
if 0
|
||||
%s << EOF
|
||||
%s
|
||||
EOF
|
||||
endif
|
||||
]])):format(cmd, garbage)))
|
||||
eq('', meths.command_output('messages'))
|
||||
if check_neq then
|
||||
eq(true, pcall(source, (dedent([[
|
||||
let g:exc = 0
|
||||
try
|
||||
%s << EOF
|
||||
%s
|
||||
EOF
|
||||
catch
|
||||
let g:exc = v:exception
|
||||
endtry
|
||||
]])):format(cmd, garbage)))
|
||||
neq(0, meths.get_var('exc'))
|
||||
end
|
||||
end)
|
||||
end)
|
||||
end
|
||||
|
||||
clear()
|
||||
|
||||
-- Built-in scripts
|
||||
test_garbage_exec('lua', true)
|
||||
|
||||
-- Provider-based scripts
|
||||
test_garbage_exec('ruby', not missing_provider('ruby'))
|
||||
test_garbage_exec('python', not missing_provider('python'))
|
||||
test_garbage_exec('python3', not missing_provider('python3'))
|
||||
|
||||
-- Missing scripts
|
||||
test_garbage_exec('tcl', false)
|
||||
test_garbage_exec('mzscheme', false)
|
||||
test_garbage_exec('perl', false)
|
||||
|
||||
-- Not really a script
|
||||
test_garbage_exec('xxxinvalidlanguagexxx', true)
|
||||
end)
|
@@ -566,6 +566,19 @@ local function get_pathsep()
|
||||
return funcs.fnamemodify('.', ':p'):sub(-1)
|
||||
end
|
||||
|
||||
local function missing_provider(provider)
|
||||
if provider == 'ruby' then
|
||||
local prog = funcs['provider#' .. provider .. '#Detect']()
|
||||
return prog == '' and (provider .. ' not detected') or false
|
||||
elseif provider == 'python' or provider == 'python3' then
|
||||
local py_major_version = (provider == 'python3' and 3 or 2)
|
||||
local errors = funcs['provider#pythonx#Detect'](py_major_version)[2]
|
||||
return errors ~= '' and errors or false
|
||||
else
|
||||
assert(false, 'Unknown provider: ' .. provider)
|
||||
end
|
||||
end
|
||||
|
||||
local module = {
|
||||
prepend_argv = prepend_argv,
|
||||
clear = clear,
|
||||
@@ -632,6 +645,7 @@ local module = {
|
||||
meth_pcall = meth_pcall,
|
||||
NIL = mpack.NIL,
|
||||
get_pathsep = get_pathsep,
|
||||
missing_provider = missing_provider,
|
||||
}
|
||||
|
||||
return function(after_each)
|
||||
|
@@ -3,14 +3,14 @@ local eval, command, feed = helpers.eval, helpers.command, helpers.feed
|
||||
local eq, clear, insert = helpers.eq, helpers.clear, helpers.insert
|
||||
local expect, write_file = helpers.expect, helpers.write_file
|
||||
local feed_command = helpers.feed_command
|
||||
local missing_provider = helpers.missing_provider
|
||||
|
||||
do
|
||||
clear()
|
||||
command('let [g:interp, g:errors] = provider#pythonx#Detect(3)')
|
||||
local errors = eval('g:errors')
|
||||
if errors ~= '' then
|
||||
local err = missing_provider('python3')
|
||||
if err then
|
||||
pending(
|
||||
'Python 3 (or the Python 3 neovim module) is broken or missing:\n' .. errors,
|
||||
'Python 3 (or the Python 3 neovim module) is broken or missing:\n' .. err,
|
||||
function() end)
|
||||
return
|
||||
end
|
||||
|
@@ -12,14 +12,14 @@ local command = helpers.command
|
||||
local exc_exec = helpers.exc_exec
|
||||
local write_file = helpers.write_file
|
||||
local curbufmeths = helpers.curbufmeths
|
||||
local missing_provider = helpers.missing_provider
|
||||
|
||||
do
|
||||
clear()
|
||||
command('let [g:interp, g:errors] = provider#pythonx#Detect(2)')
|
||||
local errors = meths.get_var('errors')
|
||||
if errors ~= '' then
|
||||
local err = missing_provider('python')
|
||||
if err then
|
||||
pending(
|
||||
'Python 2 (or the Python 2 neovim module) is broken or missing:\n' .. errors,
|
||||
'Python 2 (or the Python 2 neovim module) is broken or missing:\n' .. err,
|
||||
function() end)
|
||||
return
|
||||
end
|
||||
|
@@ -10,13 +10,11 @@ local expect = helpers.expect
|
||||
local command = helpers.command
|
||||
local write_file = helpers.write_file
|
||||
local curbufmeths = helpers.curbufmeths
|
||||
local missing_provider = helpers.missing_provider
|
||||
|
||||
do
|
||||
clear()
|
||||
command('let g:prog = provider#ruby#Detect()')
|
||||
local prog = meths.get_var('prog')
|
||||
|
||||
if prog == '' then
|
||||
if missing_provider('ruby') then
|
||||
pending(
|
||||
"Cannot find the neovim RubyGem. Try :CheckHealth",
|
||||
function() end)
|
||||
|
Reference in New Issue
Block a user