Mercurial > vim
changeset 21455:8cc1555f2445 v8.2.1278
patch 8.2.1278: Vim9: line break after "->" only allowed in :def function
Commit: https://github.com/vim/vim/commit/dd1a9af00f6954b176c5875af0a91acde72572c8
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Jul 23 15:38:03 2020 +0200
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 https://github.com/vim/vim/issues/6492)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 23 Jul 2020 15:45:06 +0200 |
parents | c50b04b76bc2 |
children | a2bf60c69fb9 |
files | src/globals.h src/testdir/test_vim9_expr.vim src/version.c src/vim9compile.c |
diffstat | 4 files changed, 16 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/globals.h +++ b/src/globals.h @@ -1730,6 +1730,7 @@ EXTERN char e_longname[] INIT(= N_("E75: 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'"));
--- 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
--- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1278, +/**/ 1277, /**/ 1276,
--- 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 && !(*line == '#' && (line == cctx.ctx_line_start || VIM_ISWHITE(line[-1])))) { - semsg(_("E488: Trailing characters: %s"), line); + semsg(_(e_trailing_arg), line); goto erret; } else