]> granicus.if.org Git - vim/commitdiff
patch 8.2.1278: Vim9: line break after "->" only allowed in :def function v8.2.1278
authorBram Moolenaar <Bram@vim.org>
Thu, 23 Jul 2020 13:38:03 +0000 (15:38 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 23 Jul 2020 13:38:03 +0000 (15:38 +0200)
Problem:    Vim9: line break after "->" only allowed in :def function.
Solution:   Only allow line break after "->". (closes #6492)

src/globals.h
src/testdir/test_vim9_expr.vim
src/version.c
src/vim9compile.c

index 5e2306babaf56c91ce327d5a69298e6b8dc005f2..77c3641ec7ff00dacc9a5ce71b46eef507dca79f 100644 (file)
@@ -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'"));
index d6cbd037d366f867b713c92a9b6bfe4df539eea6..b0a83f49abca8106bcb683c5d63b252c252f773f 100644 (file)
@@ -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
index 45714aa550eb8c86df784dd4421a84aad6069010..1e78c015ee3348b08405b38af0d6c2766ac82b3d 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1278,
 /**/
     1277,
 /**/
index fa7171c8a4ed6b8218e3dbd299cfd2b19f06b3b1..394433a1274c7802b956c8c8b943cd59a9a2ed2e 100644 (file)
@@ -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