0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.2.2242: Vim9: bar line continuation does not work at script level

Problem:    Vim9: line continuation with bar does not work at script level.
Solution:   Check for Vim9 script.
This commit is contained in:
Bram Moolenaar
2020-12-29 11:15:01 +01:00
parent 864a28b6a6
commit 8242ebbdba
6 changed files with 43 additions and 27 deletions

View File

@@ -889,7 +889,8 @@ do_cmdline(
#else #else
0 0
#endif #endif
, TRUE)) == NULL) , in_vim9script() ? GETLINE_CONCAT_CONTBAR
: GETLINE_CONCAT_CONT)) == NULL)
{ {
// Don't call wait_return for aborted command line. The NULL // Don't call wait_return for aborted command line. The NULL
// returned for the end of a sourced file or executed function // returned for the end of a sourced file or executed function

View File

@@ -1741,8 +1741,8 @@ getsourceline(
char_u *p; char_u *p;
int do_vim9_all = in_vim9script() int do_vim9_all = in_vim9script()
&& options == GETLINE_CONCAT_ALL; && options == GETLINE_CONCAT_ALL;
int do_vim9_cont = do_vim9_all int do_bar_cont = do_vim9_all
|| options == GETLINE_CONCAT_CONTDEF; || options == GETLINE_CONCAT_CONTBAR;
#ifdef FEAT_EVAL #ifdef FEAT_EVAL
// If breakpoints have been added/deleted need to check for it. // If breakpoints have been added/deleted need to check for it.
@@ -1797,7 +1797,7 @@ getsourceline(
|| (p[0] == '"' && p[1] == '\\' && p[2] == ' ') || (p[0] == '"' && p[1] == '\\' && p[2] == ' ')
|| (do_vim9_all && (*p == NUL || (do_vim9_all && (*p == NUL
|| vim9_comment_start(p))) || vim9_comment_start(p)))
|| (do_vim9_cont && p[0] == '|' && p[1] != '|'))) || (do_bar_cont && p[0] == '|' && p[1] != '|')))
{ {
garray_T ga; garray_T ga;
@@ -1817,7 +1817,7 @@ getsourceline(
if (sp->nextline == NULL) if (sp->nextline == NULL)
break; break;
p = skipwhite(sp->nextline); p = skipwhite(sp->nextline);
if (*p == '\\' || (do_vim9_cont && p[0] == '|' && p[1] != '|')) if (*p == '\\' || (do_bar_cont && p[0] == '|' && p[1] != '|'))
{ {
// Adjust the growsize to the current length to speed up // Adjust the growsize to the current length to speed up
// concatenating many lines. // concatenating many lines.

View File

@@ -1565,8 +1565,8 @@ typedef void (*cfunc_free_T)(void *state);
// type of getline() last argument // type of getline() last argument
typedef enum { typedef enum {
GETLINE_NONE, // do not concatenate any lines GETLINE_NONE, // do not concatenate any lines
GETLINE_CONCAT_CONT, // concatenate continuation lines in Vim9 script GETLINE_CONCAT_CONT, // concatenate continuation lines with backslash
GETLINE_CONCAT_CONTDEF, // concatenate continuation lines always GETLINE_CONCAT_CONTBAR, // concatenate continuation lines with \ and |
GETLINE_CONCAT_ALL // concatenate continuation and Vim9 # comment lines GETLINE_CONCAT_ALL // concatenate continuation and Vim9 # comment lines
} getline_opt_T; } getline_opt_T;

View File

@@ -536,6 +536,37 @@ def Test_command_modifiers_keep()
quit! quit!
enddef enddef
def Test_bar_line_continuation()
var lines =<< trim END
au BufNewFile Xfile g:readFile = 1
| g:readExtra = 2
g:readFile = 0
g:readExtra = 0
edit Xfile
assert_equal(1, g:readFile)
assert_equal(2, g:readExtra)
bwipe!
au! BufNewFile
au BufNewFile Xfile g:readFile = 1
| g:readExtra = 2
| g:readMore = 3
g:readFile = 0
g:readExtra = 0
g:readMore = 0
edit Xfile
assert_equal(1, g:readFile)
assert_equal(2, g:readExtra)
assert_equal(3, g:readMore)
bwipe!
au! BufNewFile
unlet g:readFile
unlet g:readExtra
unlet g:readMore
END
CheckDefAndScriptSuccess(lines)
enddef
def Test_command_modifier_other() def Test_command_modifier_other()
new Xsomefile new Xsomefile
setline(1, 'changed') setline(1, 'changed')
@@ -548,33 +579,15 @@ def Test_command_modifier_other()
bwipe! bwipe!
au BufNewFile Xfile g:readFile = 1 au BufNewFile Xfile g:readFile = 1
| g:readExtra = 2
g:readFile = 0 g:readFile = 0
g:readExtra = 0
edit Xfile edit Xfile
assert_equal(1, g:readFile) assert_equal(1, g:readFile)
assert_equal(2, g:readExtra)
bwipe! bwipe!
g:readFile = 0 g:readFile = 0
noautocmd edit Xfile noautocmd edit Xfile
assert_equal(0, g:readFile) assert_equal(0, g:readFile)
au! BufNewFile au! BufNewFile
au BufNewFile Xfile g:readFile = 1
| g:readExtra = 2
| g:readMore = 3
g:readFile = 0
g:readExtra = 0
g:readMore = 0
edit Xfile
assert_equal(1, g:readFile)
assert_equal(2, g:readExtra)
assert_equal(3, g:readMore)
bwipe!
au! BufNewFile
unlet g:readFile unlet g:readFile
unlet g:readExtra
unlet g:readMore
noswapfile edit XnoSwap noswapfile edit XnoSwap
assert_equal(0, &l:swapfile) assert_equal(0, &l:swapfile)

View File

@@ -3292,7 +3292,7 @@ define_function(exarg_T *eap, char_u *name_arg)
nesting = 0; nesting = 0;
nesting_def[nesting] = (eap->cmdidx == CMD_def); nesting_def[nesting] = (eap->cmdidx == CMD_def);
getline_options = eap->cmdidx == CMD_def getline_options = eap->cmdidx == CMD_def
? GETLINE_CONCAT_CONTDEF : GETLINE_CONCAT_CONT; ? GETLINE_CONCAT_CONTBAR : GETLINE_CONCAT_CONT;
for (;;) for (;;)
{ {
if (KeyTyped) if (KeyTyped)
@@ -3368,7 +3368,7 @@ define_function(exarg_T *eap, char_u *name_arg)
VIM_CLEAR(skip_until); VIM_CLEAR(skip_until);
VIM_CLEAR(heredoc_trimmed); VIM_CLEAR(heredoc_trimmed);
getline_options = eap->cmdidx == CMD_def getline_options = eap->cmdidx == CMD_def
? GETLINE_CONCAT_CONTDEF : GETLINE_CONCAT_CONT; ? GETLINE_CONCAT_CONTBAR : GETLINE_CONCAT_CONT;
is_heredoc = FALSE; is_heredoc = FALSE;
} }
} }

View File

@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
2242,
/**/ /**/
2241, 2241,
/**/ /**/