# HG changeset patch # User Christian Brabandt # Date 1498244403 -7200 # Node ID 7ad79766365af756873e9d472b0e8683a0d78cea # Parent 82b1366977697c9887086e23efc9e393117cc67e patch 8.0.0663: unexpected error message only when 'verbose' is set commit https://github.com/vim/vim/commit/f8be461d0284110b321be748fea206d4169b98bb Author: Bram Moolenaar Date: Fri Jun 23 20:52:40 2017 +0200 patch 8.0.0663: unexpected error message only when 'verbose' is set Problem: Giving an error message only when 'verbose' set is unexpected. Solution: Give a warning message instead. diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -1,4 +1,4 @@ -*eval.txt* For Vim version 8.0. Last change: 2017 Jun 22 +*eval.txt* For Vim version 8.0. Last change: 2017 Jun 23 VIM REFERENCE MANUAL by Bram Moolenaar @@ -5468,9 +5468,9 @@ line({expr}) The result is a Number, whi This autocommand jumps to the last known position in a file just after opening it, if the '" mark is set: > :au BufReadPost * - \ if line("'\"") > 1 && line("'\"") <= line("$") && &ft !~# 'commit' - \ | exe "normal! g`\"" - \ | endif + \ if line("'\"") > 1 && line("'\"") <= line("$") && &ft !~# 'commit' + \ | exe "normal! g`\"" + \ | endif line2byte({lnum}) *line2byte()* Return the byte count from the start of the buffer for line @@ -5892,7 +5892,7 @@ max({expr}) Return the maximum value of it returns the maximum of all values in the dictionary. If {expr} is neither a list nor a dictionary, or one of the items in {expr} cannot be used as a Number this results in - an error. An empty |List| or |Dictionary| results in zero. + an error. An empty |List| or |Dictionary| results in zero. *min()* min({expr}) Return the minimum value of all items in {expr}. @@ -5900,7 +5900,7 @@ min({expr}) Return the minimum value of it returns the minimum of all values in the dictionary. If {expr} is neither a list nor a dictionary, or one of the items in {expr} cannot be used as a Number this results in - an error. An empty |List| or |Dictionary| results in zero. + an error. An empty |List| or |Dictionary| results in zero. *mkdir()* *E739* mkdir({name} [, {path} [, {prot}]]) @@ -6195,8 +6195,8 @@ printf({fmt}, {expr1} ...) *printf()* zero the decimal point is omitted. When the precision is not specified 6 is used. A really big number (out of range or dividing by zero) results in "inf" - or "-inf" with %f (INF or -INF with %F). - "0.0 / 0.0" results in "nan" with %f (NAN with %F). + or "-inf" with %f (INF or -INF with %F). + "0.0 / 0.0" results in "nan" with %f (NAN with %F). Example: > echo printf("%.2f", 12.115) < 12.12 @@ -8355,8 +8355,8 @@ winwidth({nr}) *winwidth()* :if winwidth(0) <= 50 : exe "normal 50\|" :endif -< For getting the terminal or screen size, see the 'columns' - option. +< For getting the terminal or screen size, see the 'columns' + option. wordcount() *wordcount()* @@ -8374,11 +8374,11 @@ wordcount() *wordcount()* cursor_words Number of words before cursor position (not in Visual mode) visual_bytes Number of bytes visually selected - (only in Visual mode) + (only in Visual mode) visual_chars Number of chars visually selected - (only in Visual mode) + (only in Visual mode) visual_words Number of chars visually selected - (only in Visual mode) + (only in Visual mode) *writefile()* @@ -8722,6 +8722,9 @@ See |:verbose-cmd| for more information. not used an error message is given. When [!] is used, an existing function is silently replaced. Unless it is currently being executed, that is an error. + NOTE: Use ! wisely. If used without care it can cause + an existing function to be replaced unexpectedly, + which is hard to debug. For the {arguments} see |function-argument|. @@ -8771,7 +8774,7 @@ See |:verbose-cmd| for more information. implies that the effect of |:nohlsearch| is undone when the function returns. - *:endf* *:endfunction* *E126* *E193* *E946* + *:endf* *:endfunction* *E126* *E193* *W22* :endf[unction] [argument] The end of a function definition. Best is to put it on a line by its own, without [argument]. @@ -8780,12 +8783,16 @@ See |:verbose-cmd| for more information. | command command to execute next \n command command to execute next " comment always ignored - anything else ignored, unless 'verbose' is - non-zero + anything else ignored, warning given when + 'verbose' is non-zero The support for a following command was added in Vim 8.0.0654, before that any argument was silently ignored. + To be able to define a function inside an `:execute` + command, use line breaks instead of |:bar|: > + :exe "func Foo()\necho 'foo'\nendfunc" +< *:delf* *:delfunction* *E130* *E131* *E933* :delf[unction][!] {name} Delete function {name}. diff --git a/src/message.c b/src/message.c --- a/src/message.c +++ b/src/message.c @@ -3471,6 +3471,13 @@ give_warning(char_u *message, int hl) --no_wait_return; } + void +give_warning2(char_u *message, char_u *a1, int hl) +{ + vim_snprintf((char *)IObuff, IOSIZE, (char *)message, a1); + give_warning(IObuff, hl); +} + /* * Advance msg cursor to column "col". */ diff --git a/src/proto/message.pro b/src/proto/message.pro --- a/src/proto/message.pro +++ b/src/proto/message.pro @@ -75,6 +75,7 @@ void verbose_leave_scroll(void); void verbose_stop(void); int verbose_open(void); void give_warning(char_u *message, int hl); +void give_warning2(char_u *message, char_u *a1, int hl); void msg_advance(int col); int do_dialog(int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd); void display_confirm_msg(void); diff --git a/src/testdir/test_vimscript.vim b/src/testdir/test_vimscript.vim --- a/src/testdir/test_vimscript.vim +++ b/src/testdir/test_vimscript.vim @@ -1381,10 +1381,12 @@ func Test_endfunction_trailing() set verbose=1 exe "func Xtest()\necho 'hello'\nendfunc \" garbage" + call assert_notmatch('W22:', split(execute('1messages'), "\n")[0]) call assert_true(exists('*Xtest')) delfunc Xtest - call assert_fails("func Xtest()\necho 'hello'\nendfunc garbage", 'E946') + exe "func Xtest()\necho 'hello'\nendfunc garbage" + call assert_match('W22:', split(execute('1messages'), "\n")[0]) call assert_true(exists('*Xtest')) delfunc Xtest set verbose=0 diff --git a/src/userfunc.c b/src/userfunc.c --- a/src/userfunc.c +++ b/src/userfunc.c @@ -2137,7 +2137,9 @@ ex_function(exarg_T *eap) /* 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); + give_warning2( + (char_u *)_("W22: Text found after :endfunction: %s"), + p, TRUE); if (line_arg == NULL) vim_free(theline); break; diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -765,6 +765,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 663, +/**/ 662, /**/ 661,