]> granicus.if.org Git - vim/commitdiff
patch 8.1.1723: heredoc assignment has no room for new features v8.1.1723
authorBram Moolenaar <Bram@vim.org>
Sun, 21 Jul 2019 12:14:26 +0000 (14:14 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 21 Jul 2019 12:14:26 +0000 (14:14 +0200)
Problem:    Heredoc assignment has no room for new features. (FUJIWARA Takuya)
Solution:   Require the marker does not start with a lower case character.
            (closes #4705)

runtime/doc/eval.txt
src/eval.c
src/testdir/test_let.vim
src/version.c

index 1fa42b3931564d9c8c8325e0398837a8a2c06696..6a44c9f3ab27702afafec54a038673e2ed7bea77 100644 (file)
@@ -11386,7 +11386,8 @@ This does NOT work: >
                        Like above, but append/add/subtract the value for each
                        |List| item.
 
-                                       *:let=<<* *:let-heredoc* *E990* *E991*
+                                               *:let=<<* *:let-heredoc*
+                                               *E990* *E991* *E172* *E221*
 :let {var-name} =<< [trim] {marker}
 text...
 text...
@@ -11394,11 +11395,10 @@ text...
                        Set internal variable {var-name} to a List containing
                        the lines of text bounded by the string {marker}.
                        {marker} must not contain white space.
+                       {marker} cannot start with a lower case character.
                        The last line should end only with the {marker} string
                        without any other character.  Watch out for white
                        space after {marker}!
-                       If {marker} is not supplied, then "." is used as the
-                       default marker.
 
                        Without "trim" any white space characters in the lines
                        of text are preserved.  If "trim" is specified before
index d633f4502e8eb4158c354e126d826ad085700187..5a4ed677d5ee799bdda297377df7e837bb920c8e 100644 (file)
@@ -1283,7 +1283,7 @@ heredoc_get(exarg_T *eap, char_u *cmd)
        text_indent_len = -1;
     }
 
-    // The marker is the next word.  Default marker is "."
+    // The marker is the next word.
     if (*cmd != NUL && *cmd != '"')
     {
        marker = skipwhite(cmd);
@@ -1294,9 +1294,17 @@ heredoc_get(exarg_T *eap, char_u *cmd)
            return NULL;
        }
        *p = NUL;
+       if (vim_islower(*marker))
+       {
+           emsg(_("E221: Marker cannot start with lower case letter"));
+           return NULL;
+       }
     }
     else
-       marker = (char_u *)".";
+    {
+       emsg(_("E172: Missing marker"));
+       return NULL;
+    }
 
     l = list_alloc();
     if (l == NULL)
index f9c0d0d1b5651fe929b07dac873b48329df95f14..36900821be51cf9e41efbd87ad409380886a9e10 100644 (file)
@@ -164,14 +164,28 @@ func Test_let_heredoc_fails()
   call assert_fails('source XheredocFail', 'E126:')
   call delete('XheredocFail')
 
-  let text =<< trim END
+  let text =<< trim CodeEnd
   func MissingEnd()
     let v =<< END
   endfunc
-  END
+  CodeEnd
   call writefile(text, 'XheredocWrong')
   call assert_fails('source XheredocWrong', 'E126:')
   call delete('XheredocWrong')
+
+  let text =<< trim TEXTend
+    let v =<< " comment
+  TEXTend
+  call writefile(text, 'XheredocNoMarker')
+  call assert_fails('source XheredocNoMarker', 'E172:')
+  call delete('XheredocNoMarker')
+
+  let text =<< trim TEXTend
+    let v =<< text
+  TEXTend
+  call writefile(text, 'XheredocBadMarker')
+  call assert_fails('source XheredocBadMarker', 'E221:')
+  call delete('XheredocBadMarker')
 endfunc
 
 " Test for the setting a variable using the heredoc syntax
@@ -184,9 +198,9 @@ END
 
   call assert_equal(["Some sample text", "\tText with indent", "  !@#$%^&*()-+_={}|[]\\~`:\";'<>?,./"], var1)
 
-  let var2 =<<
+  let var2 =<< XXX
 Editor
-.
+XXX
   call assert_equal(['Editor'], var2)
 
   let var3 =<<END
@@ -218,9 +232,9 @@ END
   !!!
   call assert_equal(['Line1', ' line2', "\tLine3", '!!!',], var1)
 
-  let var1 =<< trim
+  let var1 =<< trim XX
     Line1
-  .
+  XX
   call assert_equal(['Line1'], var1)
 
   " ignore "endfunc"
@@ -260,16 +274,16 @@ END
   call assert_equal(['something', 'python << xx'], var1)
 
   " ignore "append"
-  let var1 =<<
+  let var1 =<< E
 something
 app
-.
+E
   call assert_equal(['something', 'app'], var1)
 
   " ignore "append" with trim
-  let var1 =<< trim
+  let var1 =<< trim END
   something
   app
-  .
+  END
   call assert_equal(['something', 'app'], var1)
 endfunc
index 36a7779471da072ff02491e35cfd26e317399914..5dc4d0ca5c6c3ddf1830b0e2ecb1feff79d028ab 100644 (file)
@@ -777,6 +777,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1723,
 /**/
     1722,
 /**/