0
0
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:
Bram Moolenaar
2017-06-22 19:12:10 +02:00
parent c768a208ca
commit 663bb23316
4 changed files with 56 additions and 5 deletions

View File

@@ -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.

View File

@@ -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

View File

@@ -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;

View File

@@ -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,
/**/ /**/