To: vim_dev@googlegroups.com Subject: Patch 8.0.0663 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.0.0663 Problem: Giving an error message only when 'verbose' set is unexpected. Solution: Give a warning message instead. Files: src/message.c, src/proto/message.pro, src/userfunc.c, src/testdir/test_vimscript.vim, runtime/doc/eval.txt *** ../vim-8.0.0662/src/message.c 2017-03-29 17:30:23.160136913 +0200 --- src/message.c 2017-06-23 20:13:03.469558788 +0200 *************** *** 3471,3476 **** --- 3471,3483 ---- --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". */ *** ../vim-8.0.0662/src/proto/message.pro 2017-03-16 19:58:19.416253412 +0100 --- src/proto/message.pro 2017-06-23 20:18:12.499145273 +0200 *************** *** 75,80 **** --- 75,81 ---- 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); *** ../vim-8.0.0662/src/userfunc.c 2017-06-22 19:15:20.161602227 +0200 --- src/userfunc.c 2017-06-23 20:16:09.284109760 +0200 *************** *** 2137,2143 **** /* 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) vim_free(theline); break; --- 2137,2145 ---- /* Another command follows. */ eap->nextcmd = line_arg; else if (*p != NUL && *p != '"' && p_verbose > 0) ! give_warning2( ! (char_u *)_("W22: Text found after :endfunction: %s"), ! p, TRUE); if (line_arg == NULL) vim_free(theline); break; *** ../vim-8.0.0662/src/testdir/test_vimscript.vim 2017-06-22 20:39:13.393435240 +0200 --- src/testdir/test_vimscript.vim 2017-06-23 20:18:09.843166059 +0200 *************** *** 1381,1390 **** 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 --- 1381,1392 ---- 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 ! 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 *** ../vim-8.0.0662/runtime/doc/eval.txt 2017-06-22 22:00:46.410155731 +0200 --- runtime/doc/eval.txt 2017-06-23 20:28:34.850278578 +0200 *************** *** 8714,8719 **** --- 8722,8730 ---- 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|. *************** *** 8763,8769 **** implies that the effect of |:nohlsearch| is undone when the function returns. ! *:endf* *:endfunction* *E126* *E193* *E946* :endf[unction] [argument] The end of a function definition. Best is to put it on a line by its own, without [argument]. --- 8774,8780 ---- implies that the effect of |:nohlsearch| is undone when the function returns. ! *: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]. *************** *** 8772,8783 **** | 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[unction][!] {name} Delete function {name}. --- 8783,8798 ---- | command command to execute next \n command command to execute next " comment always ignored ! 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}. *** ../vim-8.0.0662/src/version.c 2017-06-22 23:03:08.492157678 +0200 --- src/version.c 2017-06-23 20:49:45.784361578 +0200 *************** *** 766,767 **** --- 766,769 ---- { /* Add new patch number below this line */ + /**/ + 663, /**/ -- "Thou shalt not follow the Null Pointer, for at its end Chaos and Madness lie." /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///