summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-08-20 12:07:58 +0100
committerBram Moolenaar <Bram@vim.org>2022-08-20 12:07:58 +0100
commit62e0e2e54b34b618500be4521ab1c33e1c378b42 (patch)
tree850c906638653186c4d9db3d6a46656ed6ce062f
parente80086446cc20856ed8359bc8dc87c4d430da4c8 (diff)
downloadvim-git-62e0e2e54b34b618500be4521ab1c33e1c378b42.tar.gz
patch 9.0.0229: Vim9: error message for missing type is not clearv9.0.0229
Problem: Vim9: error message for missing type is not clear. Solution: Mention the context. (issue #10944)
-rw-r--r--src/errors.h8
-rw-r--r--src/testdir/test_vim9_assign.vim2
-rw-r--r--src/testdir/test_vim9_func.vim6
-rw-r--r--src/version.c2
-rw-r--r--src/vim9type.c13
5 files changed, 18 insertions, 13 deletions
diff --git a/src/errors.h b/src/errors.h
index 8aad956d9..bc1145db8 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -2634,10 +2634,10 @@ EXTERN char e_str_is_used_as_argument[]
INIT(= N_("E1006: %s is used as an argument"));
EXTERN char e_mandatory_argument_after_optional_argument[]
INIT(= N_("E1007: Mandatory argument after optional argument"));
-EXTERN char e_missing_type[]
- INIT(= N_("E1008: Missing <type>"));
-EXTERN char e_missing_gt_after_type[]
- INIT(= N_("E1009: Missing > after type"));
+EXTERN char e_missing_type_after_str[]
+ INIT(= N_("E1008: Missing <type> after %s"));
+EXTERN char e_missing_gt_after_type_str[]
+ INIT(= N_("E1009: Missing > after type: %s"));
EXTERN char e_type_not_recognized_str[]
INIT(= N_("E1010: Type not recognized: %s"));
EXTERN char e_name_too_long_str[]
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index faa4928ea..df5fc7fe6 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -1591,7 +1591,7 @@ def Test_assignment_failure()
v9.CheckDefFailure(['var name: number = feedkeys("0")'], 'expected number but got void')
v9.CheckDefFailure(['var name: dict <number>'], 'E1068:')
- v9.CheckDefFailure(['var name: dict<number'], 'E1009:')
+ v9.CheckDefFailure(['var name: dict<number'], 'E1009: Missing > after type: <number')
assert_fails('s/^/\=g:Mess()/n', 'E794:')
v9.CheckDefFailure(['var name: dict<number'], 'E1009:')
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index fd7182d50..4011d7fe1 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -2164,9 +2164,9 @@ def Test_return_type_wrong()
'defcompile'], 'E1059:')
delfunc! g:Func
- v9.CheckScriptFailure(['def Func(): list', 'return []', 'enddef'], 'E1008:')
+ v9.CheckScriptFailure(['def Func(): list', 'return []', 'enddef'], 'E1008: Missing <type> after list')
delfunc! g:Func
- v9.CheckScriptFailure(['def Func(): dict', 'return {}', 'enddef'], 'E1008:')
+ v9.CheckScriptFailure(['def Func(): dict', 'return {}', 'enddef'], 'E1008: Missing <type> after dict')
delfunc! g:Func
v9.CheckScriptFailure(['def Func()', 'return 1'], 'E1057:')
delfunc! g:Func
@@ -2183,7 +2183,7 @@ def Test_return_type_wrong()
enddef
def Test_arg_type_wrong()
- v9.CheckScriptFailure(['def Func3(items: list)', 'echo "a"', 'enddef'], 'E1008: Missing <type>')
+ v9.CheckScriptFailure(['def Func3(items: list)', 'echo "a"', 'enddef'], 'E1008: Missing <type> after list')
v9.CheckScriptFailure(['def Func4(...)', 'echo "a"', 'enddef'], 'E1055: Missing name after ...')
v9.CheckScriptFailure(['def Func5(items:string)', 'echo "a"'], 'E1069:')
v9.CheckScriptFailure(['def Func5(items)', 'echo "a"'], 'E1077:')
diff --git a/src/version.c b/src/version.c
index 86be34dba..412b3e83e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -732,6 +732,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 229,
+/**/
228,
/**/
227,
diff --git a/src/vim9type.c b/src/vim9type.c
index 28b282865..b92a7afb1 100644
--- a/src/vim9type.c
+++ b/src/vim9type.c
@@ -879,6 +879,7 @@ skip_type(char_u *start, int optional)
/*
* Parse the member type: "<type>" and return "type" with the member set.
* Use "type_gap" if a new type needs to be added.
+ * "info" is extra information for an error message.
* Returns NULL in case of failure.
*/
static type_T *
@@ -886,8 +887,10 @@ parse_type_member(
char_u **arg,
type_T *type,
garray_T *type_gap,
- int give_error)
+ int give_error,
+ char *info)
{
+ char_u *arg_start = *arg;
type_T *member_type;
int prev_called_emsg = called_emsg;
@@ -898,7 +901,7 @@ parse_type_member(
if (*skipwhite(*arg) == '<')
semsg(_(e_no_white_space_allowed_before_str_str), "<", *arg);
else
- emsg(_(e_missing_type));
+ semsg(_(e_missing_type_after_str), info);
}
return NULL;
}
@@ -912,7 +915,7 @@ parse_type_member(
if (**arg != '>' && called_emsg == prev_called_emsg)
{
if (give_error)
- emsg(_(e_missing_gt_after_type));
+ semsg(_(e_missing_gt_after_type_str), arg_start);
return NULL;
}
++*arg;
@@ -971,7 +974,7 @@ parse_type(char_u **arg, garray_T *type_gap, int give_error)
{
*arg += len;
return parse_type_member(arg, &t_dict_any,
- type_gap, give_error);
+ type_gap, give_error, "dict");
}
break;
case 'f':
@@ -1115,7 +1118,7 @@ parse_type(char_u **arg, garray_T *type_gap, int give_error)
{
*arg += len;
return parse_type_member(arg, &t_list_any,
- type_gap, give_error);
+ type_gap, give_error, "list");
}
break;
case 'n':