vim-patch:9.0.0299: error messages for setcmdline() could be better (#20169)

Problem:    Error messages for setcmdline() could be better.
Solution:   Use more specific error messages. (Yegappan Lakshmanan,
            closes vim/vim#10995)
25f1e55562

Cherry-pick tv_check_for_opt_number_arg() from Vim.
This commit is contained in:
zeertzjq 2022-09-12 21:47:35 +08:00 committed by GitHub
parent afe01842ef
commit 5bc0964b97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 4 deletions

View File

@ -3843,6 +3843,14 @@ int tv_check_for_number_arg(const typval_T *const args, const int idx)
return OK;
}
/// Check for an optional number argument at "idx"
int tv_check_for_opt_number_arg(const typval_T *const args, const int idx)
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_PURE
{
return (args[idx].v_type == VAR_UNKNOWN
|| tv_check_for_number_arg(args, idx) != FAIL) ? OK : FAIL;
}
/// Get the string value of a "stringish" VimL object.
///
/// @param[in] tv Object to get value of.

View File

@ -4050,8 +4050,8 @@ static int set_cmdline_pos(int pos)
/// "setcmdline()" function
void f_setcmdline(typval_T *argvars, typval_T *rettv, EvalFuncData fptr)
{
if (argvars[0].v_type != VAR_STRING || argvars[0].vval.v_string == NULL) {
emsg(_(e_stringreq));
if (tv_check_for_string_arg(argvars, 0) == FAIL
|| tv_check_for_opt_number_arg(argvars, 1) == FAIL) {
return;
}

View File

@ -2226,8 +2226,8 @@ func Test_setcmdline()
call assert_equal(a:pos, getcmdpos())
call assert_fails('call setcmdline("' .. a:text .. '", -1)', 'E487:')
call assert_fails('call setcmdline({}, 0)', 'E928:')
call assert_fails('call setcmdline("' .. a:text .. '", {})', 'E728:')
call assert_fails('call setcmdline({}, 0)', 'E1174:')
call assert_fails('call setcmdline("' .. a:text .. '", {})', 'E1210:')
return ''
endfunc