mirror of
https://github.com/neovim/neovim.git
synced 2025-09-29 06:28:35 +00:00
backport: fix(:source, nvim_exec): handle Vimscript line continuations #14809
Problem: Anonymous :source (no args) and nvim_exec() don't support Vimscript line continuations. Solution: Factor out the concat logic into concat_continued_line() and a CONCAT_CONTINUED_LINES macro for simple concatenations where lines are fetched individually. Closes #14807
This commit is contained in:
@@ -8,6 +8,8 @@ local feed = helpers.feed
|
||||
local feed_command = helpers.feed_command
|
||||
local write_file = helpers.write_file
|
||||
local exec = helpers.exec
|
||||
local exc_exec = helpers.exc_exec
|
||||
local exec_lua = helpers.exec_lua
|
||||
local eval = helpers.eval
|
||||
local exec_capture = helpers.exec_capture
|
||||
local neq = helpers.neq
|
||||
@@ -18,16 +20,30 @@ describe(':source', function()
|
||||
end)
|
||||
|
||||
it('current buffer', function()
|
||||
insert('let a = 2')
|
||||
insert([[
|
||||
let a = 2
|
||||
let b = #{
|
||||
\ k: "v"
|
||||
"\ (o_o)
|
||||
\ }]])
|
||||
|
||||
command('source')
|
||||
eq('2', meths.exec('echo a', true))
|
||||
eq("{'k': 'v'}", meths.exec('echo b', true))
|
||||
|
||||
exec('set cpoptions+=C')
|
||||
eq('Vim(let):E15: Invalid expression: #{', exc_exec('source'))
|
||||
end)
|
||||
|
||||
it('selection in current buffer', function()
|
||||
insert(
|
||||
'let a = 2\n'..
|
||||
'let a = 3\n'..
|
||||
'let a = 4\n')
|
||||
insert([[
|
||||
let a = 2
|
||||
let a = 3
|
||||
let a = 4
|
||||
let b = #{
|
||||
"\ (>_<)
|
||||
\ K: "V"
|
||||
\ }]])
|
||||
|
||||
-- Source the 2nd line only
|
||||
feed('ggjV')
|
||||
@@ -38,13 +54,17 @@ describe(':source', function()
|
||||
feed('ggjVG')
|
||||
feed_command(':source')
|
||||
eq('4', meths.exec('echo a', true))
|
||||
eq("{'K': 'V'}", meths.exec('echo b', true))
|
||||
|
||||
exec('set cpoptions+=C')
|
||||
eq('Vim(let):E15: Invalid expression: #{', exc_exec("'<,'>source"))
|
||||
end)
|
||||
|
||||
it('multiline heredoc command', function()
|
||||
insert(
|
||||
'lua << EOF\n'..
|
||||
'y = 4\n'..
|
||||
'EOF\n')
|
||||
insert([[
|
||||
lua << EOF
|
||||
y = 4
|
||||
EOF]])
|
||||
|
||||
command('source')
|
||||
eq('4', meths.exec('echo luaeval("y")', true))
|
||||
@@ -67,13 +87,21 @@ describe(':source', function()
|
||||
vim.g.b = 5
|
||||
vim.g.b = 6
|
||||
vim.g.b = 7
|
||||
a = [=[
|
||||
"\ a
|
||||
\ b]=]
|
||||
]])
|
||||
|
||||
command('edit '..test_file)
|
||||
|
||||
feed('ggjV')
|
||||
feed_command(':source')
|
||||
|
||||
eq(6, eval('g:b'))
|
||||
|
||||
feed('GVkk')
|
||||
feed_command(':source')
|
||||
eq(' "\\ a\n \\ b', exec_lua('return _G.a'))
|
||||
|
||||
os.remove(test_file)
|
||||
end)
|
||||
|
||||
@@ -84,12 +112,16 @@ describe(':source', function()
|
||||
vim.g.c = 10
|
||||
vim.g.c = 11
|
||||
vim.g.c = 12
|
||||
a = [=[
|
||||
\ 1
|
||||
"\ 2]=]
|
||||
]])
|
||||
|
||||
command('edit '..test_file)
|
||||
feed_command(':source')
|
||||
|
||||
eq(12, eval('g:c'))
|
||||
eq(' \\ 1\n "\\ 2', exec_lua('return _G.a'))
|
||||
os.remove(test_file)
|
||||
end)
|
||||
|
||||
|
Reference in New Issue
Block a user