mirror of
https://github.com/vim/vim.git
synced 2025-09-27 04:14:06 -04:00
patch 8.0.0654: no warning for text after :endfunction
Problem: Text found after :endfunction is silently ignored. Solution: Give a warning if 'verbose' is set. When | or \n are used, execute the text as a command.
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
*eval.txt* For Vim version 8.0. Last change: 2017 Jun 13
|
*eval.txt* For Vim version 8.0. Last change: 2017 Jun 22
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@@ -8764,18 +8764,32 @@ See |:verbose-cmd| for more information.
|
|||||||
implies that the effect of |:nohlsearch| is undone
|
implies that the effect of |:nohlsearch| is undone
|
||||||
when the function returns.
|
when the function returns.
|
||||||
|
|
||||||
*:endf* *:endfunction* *E126* *E193*
|
*:endf* *:endfunction* *E126* *E193* *E946*
|
||||||
:endf[unction] The end of a function definition. Must be on a line
|
:endf[unction] [argument]
|
||||||
by its own, without other commands.
|
The end of a function definition. Best is to put it
|
||||||
|
on a line by its own, without [argument].
|
||||||
|
|
||||||
|
[argument] can be:
|
||||||
|
| command command to execute next
|
||||||
|
\n command command to execute next
|
||||||
|
" comment always ignored
|
||||||
|
anything else ignored, unless 'verbose' is
|
||||||
|
non-zero
|
||||||
|
The support for a following command was added in Vim
|
||||||
|
8.0.0654, before that any argument was silently
|
||||||
|
ignored.
|
||||||
|
|
||||||
*:delf* *:delfunction* *E130* *E131* *E933*
|
*:delf* *:delfunction* *E130* *E131* *E933*
|
||||||
:delf[unction] {name} Delete function {name}.
|
:delf[unction][!] {name}
|
||||||
|
Delete function {name}.
|
||||||
{name} can also be a |Dictionary| entry that is a
|
{name} can also be a |Dictionary| entry that is a
|
||||||
|Funcref|: >
|
|Funcref|: >
|
||||||
:delfunc dict.init
|
:delfunc dict.init
|
||||||
< This will remove the "init" entry from "dict". The
|
< This will remove the "init" entry from "dict". The
|
||||||
function is deleted if there are no more references to
|
function is deleted if there are no more references to
|
||||||
it.
|
it.
|
||||||
|
With the ! there is no error if the function does not
|
||||||
|
exist.
|
||||||
*:retu* *:return* *E133*
|
*:retu* *:return* *E133*
|
||||||
:retu[rn] [expr] Return from a function. When "[expr]" is given, it is
|
:retu[rn] [expr] Return from a function. When "[expr]" is given, it is
|
||||||
evaluated and returned as the result of the function.
|
evaluated and returned as the result of the function.
|
||||||
|
@@ -1363,6 +1363,33 @@ func Test_bitwise_functions()
|
|||||||
call assert_fails("call invert({})", 'E728:')
|
call assert_fails("call invert({})", 'E728:')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test trailing text after :endfunction {{{1
|
||||||
|
func Test_endfunction_trailing()
|
||||||
|
call assert_false(exists('*Xtest'))
|
||||||
|
|
||||||
|
exe "func Xtest()\necho 'hello'\nendfunc\nlet done = 'yes'"
|
||||||
|
call assert_true(exists('*Xtest'))
|
||||||
|
call assert_equal('yes', done)
|
||||||
|
delfunc Xtest
|
||||||
|
unlet done
|
||||||
|
|
||||||
|
exe "func Xtest()\necho 'hello'\nendfunc|let done = 'yes'"
|
||||||
|
call assert_true(exists('*Xtest'))
|
||||||
|
call assert_equal('yes', done)
|
||||||
|
delfunc Xtest
|
||||||
|
unlet done
|
||||||
|
|
||||||
|
set verbose=1
|
||||||
|
exe "func Xtest()\necho 'hello'\nendfunc \" garbage"
|
||||||
|
call assert_true(exists('*Xtest'))
|
||||||
|
delfunc Xtest
|
||||||
|
|
||||||
|
call assert_fails("func Xtest()\necho 'hello'\nendfunc garbage", 'E946')
|
||||||
|
call assert_true(exists('*Xtest'))
|
||||||
|
delfunc Xtest
|
||||||
|
set verbose=0
|
||||||
|
endfunc
|
||||||
|
|
||||||
"-------------------------------------------------------------------------------
|
"-------------------------------------------------------------------------------
|
||||||
" Modelines {{{1
|
" Modelines {{{1
|
||||||
" vim: ts=8 sw=4 tw=80 fdm=marker
|
" vim: ts=8 sw=4 tw=80 fdm=marker
|
||||||
|
@@ -2130,6 +2130,14 @@ ex_function(exarg_T *eap)
|
|||||||
/* Check for "endfunction". */
|
/* Check for "endfunction". */
|
||||||
if (checkforcmd(&p, "endfunction", 4) && nesting-- == 0)
|
if (checkforcmd(&p, "endfunction", 4) && nesting-- == 0)
|
||||||
{
|
{
|
||||||
|
if (*p == '|')
|
||||||
|
/* Another command follows. */
|
||||||
|
eap->nextcmd = vim_strsave(p + 1);
|
||||||
|
else if (line_arg != NULL && *skipwhite(line_arg) != NUL)
|
||||||
|
/* Another command follows. */
|
||||||
|
eap->nextcmd = line_arg;
|
||||||
|
else if (*p != NUL && *p != '"' && p_verbose > 0)
|
||||||
|
EMSG2((char_u *)_("E946: Text found after :endfunction: %s"), p);
|
||||||
if (line_arg == NULL)
|
if (line_arg == NULL)
|
||||||
vim_free(theline);
|
vim_free(theline);
|
||||||
break;
|
break;
|
||||||
|
@@ -764,6 +764,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 */
|
||||||
|
/**/
|
||||||
|
654,
|
||||||
/**/
|
/**/
|
||||||
653,
|
653,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user