To: vim_dev@googlegroups.com Subject: Patch 8.2.3149 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.3149 (after 8.2.3141) Problem: Some plugins have a problem with the error check for using :command with -complete but without -nargs. Solution: In legacy script only give a warning message. Files: src/usercmd.c, src/message.c, src/proto/message.pro, src/testdir/test_usercommands.vim *** ../vim-8.2.3148/src/usercmd.c 2021-07-11 14:28:19.943563551 +0200 --- src/usercmd.c 2021-07-11 18:57:29.686993922 +0200 *************** *** 1027,1033 **** && STRNCMP(name, "Next", name_len > 4 ? 4 : name_len) == 0)) emsg(_("E841: Reserved name, cannot be used for user defined command")); else if (compl > 0 && (argt & EX_EXTRA) == 0) ! emsg(_(e_complete_used_without_nargs)); else uc_add_command(name, end - name, p, argt, def, flags, compl, compl_arg, addr_type_arg, eap->forceit); --- 1027,1041 ---- && STRNCMP(name, "Next", name_len > 4 ? 4 : name_len) == 0)) emsg(_("E841: Reserved name, cannot be used for user defined command")); else if (compl > 0 && (argt & EX_EXTRA) == 0) ! { ! // Some plugins rely on silently ignoring the mistake, only make this ! // an error in Vim9 script. ! if (in_vim9script()) ! emsg(_(e_complete_used_without_nargs)); ! else ! give_warning_with_source( ! (char_u *)_(e_complete_used_without_nargs), TRUE, TRUE); ! } else uc_add_command(name, end - name, p, argt, def, flags, compl, compl_arg, addr_type_arg, eap->forceit); *** ../vim-8.2.3148/src/message.c 2021-06-15 22:39:07.566028108 +0200 --- src/message.c 2021-07-11 19:03:23.094520449 +0200 *************** *** 3614,3619 **** --- 3614,3625 ---- void give_warning(char_u *message, int hl) { + give_warning_with_source(message, hl, FALSE); + } + + void + give_warning_with_source(char_u *message, int hl, int with_source) + { // Don't do this for ":silent". if (msg_silent != 0) return; *************** *** 3629,3636 **** keep_msg_attr = HL_ATTR(HLF_W); else keep_msg_attr = 0; ! if (msg_attr((char *)message, keep_msg_attr) && msg_scrolled == 0) set_keep_msg(message, keep_msg_attr); msg_didout = FALSE; // overwrite this message msg_nowait = TRUE; // don't wait for this message msg_col = 0; --- 3635,3655 ---- keep_msg_attr = HL_ATTR(HLF_W); else keep_msg_attr = 0; ! ! if (with_source) ! { ! // Do what msg() does, but with a column offset if the warning should ! // be after the mode message. ! msg_start(); ! msg_source(HL_ATTR(HLF_W)); ! msg_puts(" "); ! msg_puts_attr((char *)message, HL_ATTR(HLF_W) | MSG_HIST); ! msg_clr_eos(); ! (void)msg_end(); ! } ! else if (msg_attr((char *)message, keep_msg_attr) && msg_scrolled == 0) set_keep_msg(message, keep_msg_attr); + msg_didout = FALSE; // overwrite this message msg_nowait = TRUE; // don't wait for this message msg_col = 0; *** ../vim-8.2.3148/src/proto/message.pro 2020-02-29 17:38:08.862485886 +0100 --- src/proto/message.pro 2021-07-11 18:56:58.087033112 +0200 *************** *** 69,74 **** --- 69,75 ---- void verbose_stop(void); int verbose_open(void); void give_warning(char_u *message, int hl); + void give_warning_with_source(char_u *message, int hl, int with_source); 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); *** ../vim-8.2.3148/src/testdir/test_usercommands.vim 2021-07-11 14:28:19.943563551 +0200 --- src/testdir/test_usercommands.vim 2021-07-11 19:10:18.833912848 +0200 *************** *** 1,5 **** --- 1,7 ---- " Tests for user defined commands + source vim9.vim + " Test for in user defined commands function Test_cmdmods() let g:mods = '' *************** *** 270,282 **** call assert_fails('com! -complete=custom DoCmd :', 'E467:') call assert_fails('com! -complete=customlist DoCmd :', 'E467:') call assert_fails('com! -complete=behave,CustomComplete DoCmd :', 'E468:') - call assert_fails('com! -complete=file DoCmd :', 'E1208:') - call assert_fails('com! -nargs=0 -complete=file DoCmd :', 'E1208:') call assert_fails('com! -nargs=x DoCmd :', 'E176:') call assert_fails('com! -count=1 -count=2 DoCmd :', 'E177:') call assert_fails('com! -count=x DoCmd :', 'E178:') call assert_fails('com! -range=x DoCmd :', 'E178:') com! -nargs=0 DoCmd : call assert_fails('DoCmd x', 'E488:') --- 272,300 ---- call assert_fails('com! -complete=custom DoCmd :', 'E467:') call assert_fails('com! -complete=customlist DoCmd :', 'E467:') call assert_fails('com! -complete=behave,CustomComplete DoCmd :', 'E468:') call assert_fails('com! -nargs=x DoCmd :', 'E176:') call assert_fails('com! -count=1 -count=2 DoCmd :', 'E177:') call assert_fails('com! -count=x DoCmd :', 'E178:') call assert_fails('com! -range=x DoCmd :', 'E178:') + com! -complete=file DoCmd : + call assert_match('E1208:', v:warningmsg) + let v:warningmsg = '' + com! -nargs=0 -complete=file DoCmd : + call assert_match('E1208:', v:warningmsg) + + let lines =<< trim END + vim9script + com! -complete=file DoCmd : + END + call CheckScriptFailure(lines, 'E1208', 2) + + let lines =<< trim END + vim9script + com! -nargs=0 -complete=file DoCmd : + END + call CheckScriptFailure(lines, 'E1208', 2) + com! -nargs=0 DoCmd : call assert_fails('DoCmd x', 'E488:') *** ../vim-8.2.3148/src/version.c 2021-07-11 18:23:15.441471695 +0200 --- src/version.c 2021-07-11 18:46:40.651594168 +0200 *************** *** 757,758 **** --- 757,760 ---- { /* Add new patch number below this line */ + /**/ + 3149, /**/ -- An actual excerpt from a classified section of a city newspaper: "Illiterate? Write today for free help!" /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///