0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

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)
This commit is contained in:
Bram Moolenaar 2019-07-21 14:14:26 +02:00
parent 61343f0c44
commit 2458200729
4 changed files with 39 additions and 15 deletions

View 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

View 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)

View 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

View File

@ -777,6 +777,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1723,
/**/
1722,
/**/