]> granicus.if.org Git - vim/commitdiff
patch 8.2.4740: when expand() fails there is no error message v8.2.4740
authorBram Moolenaar <Bram@vim.org>
Tue, 12 Apr 2022 11:54:11 +0000 (12:54 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 12 Apr 2022 11:54:11 +0000 (12:54 +0100)
Problem:    When expand() fails there is no error message.
Solution:   When 'verbose' is set give an error message.

runtime/doc/builtin.txt
src/evalfunc.c
src/testdir/test_expand.vim
src/version.c

index 4fb12ff8659cacfc4adb7284130f87e2072fe4f6..f6a791d9fa3291e8e0be413cd1b40508ea968b6a 100644 (file)
@@ -2270,6 +2270,9 @@ expand({string} [, {nosuf} [, {list}]])                           *expand()*
                is not defined, an empty string is used.  Using "%:p" in a
                buffer with no name, results in the current directory, with a
                '/' added.
+               When 'verbose' is set then expanding '%', '#' and <> items
+               will result in an error message if the argument cannot be
+               expanded.
 
                When {string} does not start with '%', '#' or '<', it is
                expanded like a file name is expanded on the command line.
index e56b505d2be7fe900b8458178aa8cfca9623ca4e..e30186b034b6c356cae62724630143f8ca89a285 100644 (file)
@@ -4065,7 +4065,6 @@ f_expand(typval_T *argvars, typval_T *rettv)
 {
     char_u     *s;
     int                len;
-    char       *errormsg;
     int                options = WILD_SILENT|WILD_USE_NL|WILD_LIST_NOTFOUND;
     expand_T   xpc;
     int                error = FALSE;
@@ -4096,9 +4095,15 @@ f_expand(typval_T *argvars, typval_T *rettv)
     s = tv_get_string(&argvars[0]);
     if (*s == '%' || *s == '#' || *s == '<')
     {
-       ++emsg_off;
+       char    *errormsg = NULL;
+
+       if (p_verbose == 0)
+           ++emsg_off;
        result = eval_vars(s, s, &len, NULL, &errormsg, NULL);
-       --emsg_off;
+       if (p_verbose == 0)
+           --emsg_off;
+       else if (errormsg != NULL)
+           emsg(errormsg);
        if (rettv->v_type == VAR_LIST)
        {
            if (rettv_list_alloc(rettv) != FAIL && result != NULL)
index fee5f2fe860c050cc8062ebc28a55aa39d2bb465..32c3b429ab938771f042426257e12dd809c75808 100644 (file)
@@ -128,13 +128,21 @@ func Test_source_sfile()
     :call assert_equal('edit <cword>', expandcmd("edit <cword>"))
     :call assert_equal('edit <cexpr>', expandcmd("edit <cexpr>"))
     :call assert_fails('autocmd User MyCmd echo "<sfile>"', 'E498:')
+    :
+    :call assert_equal('', expand('<script>'))
+    :verbose echo expand('<script>')
+    :call add(v:errors, v:errmsg)
+    :verbose echo expand('<sfile>')
+    :call add(v:errors, v:errmsg)
     :call writefile(v:errors, 'Xresult')
     :qall!
-
   [SCRIPT]
   call writefile(lines, 'Xscript')
   if RunVim([], [], '--clean -s Xscript')
-    call assert_equal([], readfile('Xresult'))
+    call assert_equal([
+          \ 'E1274: No script file name to substitute for "<script>"',
+          \ 'E498: no :source file name to substitute for "<sfile>"'],
+          \ readfile('Xresult'))
   endif
   call delete('Xscript')
   call delete('Xresult')
index 84c669b181241542391ad6e49a2352f37686bca9..5ef4e74972a9f2647660e63a613737fb9b25a8bd 100644 (file)
@@ -746,6 +746,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4740,
 /**/
     4739,
 /**/