Skip to content

Commit

Permalink
patch 8.1.1723: heredoc assignment has no room for new features
Browse files Browse the repository at this point in the history
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)
  • Loading branch information
brammool committed Jul 21, 2019
1 parent 61343f0 commit 2458200
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 15 deletions.
6 changes: 3 additions & 3 deletions runtime/doc/eval.txt
Expand Up @@ -11386,19 +11386,19 @@ 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...
{marker}
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
Expand Down
12 changes: 10 additions & 2 deletions src/eval.c
Expand Up @@ -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);
Expand All @@ -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)
Expand Down
34 changes: 24 additions & 10 deletions src/testdir/test_let.vim
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -777,6 +777,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1723,
/**/
1722,
/**/
Expand Down

0 comments on commit 2458200

Please sign in to comment.