patch 8.2.1278: Vim9: line break after "->" only allowed in :def function
Problem: Vim9: line break after "->" only allowed in :def function.
Solution: Only allow line break after "->". (closes #6492)
diff --git a/src/globals.h b/src/globals.h
index 5e2306b..77c3641 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -1730,6 +1730,7 @@
EXTERN char e_toomsbra[] INIT(= N_("E76: Too many ["));
EXTERN char e_toomany[] INIT(= N_("E77: Too many file names"));
EXTERN char e_trailing[] INIT(= N_("E488: Trailing characters"));
+EXTERN char e_trailing_arg[] INIT(= N_("E488: Trailing characters: %s"));
EXTERN char e_umark[] INIT(= N_("E78: Unknown mark"));
EXTERN char e_wildexpand[] INIT(= N_("E79: Cannot expand wildcards"));
EXTERN char e_winheight[] INIT(= N_("E591: 'winheight' cannot be smaller than 'winminheight'"));
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index d6cbd03..b0a83f4 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -1460,7 +1460,8 @@
def Test_expr7_call()
assert_equal('yes', 'yes'->Echo())
- assert_equal('yes', 'yes'->s:EchoArg())
+ assert_equal('yes', 'yes'
+ ->s:EchoArg())
assert_equal(1, !range(5)->empty())
assert_equal([0, 1, 2], --3->range())
@@ -1531,6 +1532,8 @@
call CheckDefFailure(["let x = ''", "let y = x.memb"], 'E715:')
+ call CheckDefFailure(["'yes'->", "Echo()"], 'E488:')
+
call CheckDefExecFailure(["[1, 2->len()"], 'E697:')
call CheckDefExecFailure(["#{a: 1->len()"], 'E488:')
call CheckDefExecFailure(["{'a': 1->len()"], 'E723:')
@@ -1591,8 +1594,8 @@
def Test_expr7_subscript_linebreak()
let range = range(
3)
- let l = range->
- map('string(v:key)')
+ let l = range
+ ->map('string(v:key)')
assert_equal(['0', '1', '2'], l)
l = range
diff --git a/src/version.c b/src/version.c
index 45714aa..1e78c01 100644
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1278,
+/**/
1277,
/**/
1276,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index fa7171c..394433a 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -3773,8 +3773,7 @@
p += 2;
*arg = skipwhite(p);
- if (may_get_next_line(p, arg, cctx) == FAIL)
- return FAIL;
+ // No line break supported right after "->".
if (**arg == '{')
{
// lambda call: list->{lambda}
@@ -3785,6 +3784,11 @@
{
// method call: list->method()
p = *arg;
+ if (!eval_isnamec1(*p))
+ {
+ semsg(_(e_trailing_arg), p);
+ return FAIL;
+ }
if (ASCII_ISALPHA(*p) && p[1] == ':')
p += 2;
for ( ; eval_isnamec1(*p); ++p)
@@ -7045,7 +7049,7 @@
&& !(*line == '#' && (line == cctx.ctx_line_start
|| VIM_ISWHITE(line[-1]))))
{
- semsg(_("E488: Trailing characters: %s"), line);
+ semsg(_(e_trailing_arg), line);
goto erret;
}
else