summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-04-12 12:54:11 +0100
committerBram Moolenaar <Bram@vim.org>2022-04-12 12:54:11 +0100
commit575445200bd35283191ecd7a0d596b37c5b477a4 (patch)
tree2188e3f108e7337222c859bc3ca2ab51227cd61b
parentd58862d18f091d3c14fa3647e724ef7eea1ecefa (diff)
patch 8.2.4740: when expand() fails there is no error messagev8.2.4740
Problem: When expand() fails there is no error message. Solution: When 'verbose' is set give an error message.
-rw-r--r--runtime/doc/builtin.txt3
-rw-r--r--src/evalfunc.c11
-rw-r--r--src/testdir/test_expand.vim12
-rw-r--r--src/version.c2
4 files changed, 23 insertions, 5 deletions
diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt
index 4fb12ff865..f6a791d9fa 100644
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -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.
diff --git a/src/evalfunc.c b/src/evalfunc.c
index e56b505d2b..e30186b034 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -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)
diff --git a/src/testdir/test_expand.vim b/src/testdir/test_expand.vim
index fee5f2fe86..32c3b429ab 100644
--- a/src/testdir/test_expand.vim
+++ b/src/testdir/test_expand.vim
@@ -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')
diff --git a/src/version.c b/src/version.c
index 84c669b181..5ef4e74972 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4740,
+/**/
4739,
/**/
4738,