patch 8.1.1723: heredoc assignment has no room for new features
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)
diff --git a/src/eval.c b/src/eval.c
index d633f45..5a4ed67 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1283,7 +1283,7 @@
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 @@
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)
diff --git a/src/testdir/test_let.vim b/src/testdir/test_let.vim
index f9c0d0d..3690082 100644
--- a/src/testdir/test_let.vim
+++ b/src/testdir/test_let.vim
@@ -164,14 +164,28 @@
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 @@
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 @@
!!!
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 @@
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
diff --git a/src/version.c b/src/version.c
index 36a7779..5dc4d0c 100644
--- a/src/version.c
+++ b/src/version.c
@@ -778,6 +778,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1723,
+/**/
1722,
/**/
1721,