From: Bram Moolenaar Date: Thu, 23 Jul 2020 13:38:03 +0000 (+0200) Subject: patch 8.2.1278: Vim9: line break after "->" only allowed in :def function X-Git-Tag: v8.2.1278 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dd1a9af00f6954b176c5875af0a91acde72572c8;p=vim 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 5e2306bab..77c3641ec 100644 --- a/src/globals.h +++ b/src/globals.h @@ -1730,6 +1730,7 @@ EXTERN char e_longname[] INIT(= N_("E75: Name too long")); 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 d6cbd037d..b0a83f49a 100644 --- a/src/testdir/test_vim9_expr.vim +++ b/src/testdir/test_vim9_expr.vim @@ -1460,7 +1460,8 @@ enddef 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 @@ func Test_expr7_fails() 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 @@ enddef 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 45714aa55..1e78c015e 100644 --- a/src/version.c +++ b/src/version.c @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1278, /**/ 1277, /**/ diff --git a/src/vim9compile.c b/src/vim9compile.c index fa7171c8a..394433a12 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -3773,8 +3773,7 @@ compile_subscript( 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 @@ compile_subscript( { // 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 @@ compile_def_function(ufunc_T *ufunc, int set_return_type, cctx_T *outer_cctx) && !(*line == '#' && (line == cctx.ctx_line_start || VIM_ISWHITE(line[-1])))) { - semsg(_("E488: Trailing characters: %s"), line); + semsg(_(e_trailing_arg), line); goto erret; } else