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