From 62e0e2e54b34b618500be4521ab1c33e1c378b42 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 20 Aug 2022 12:07:58 +0100 Subject: [PATCH] patch 9.0.0229: Vim9: error message for missing type is not clear Problem: Vim9: error message for missing type is not clear. Solution: Mention the context. (issue #10944) --- src/errors.h | 8 ++++---- src/testdir/test_vim9_assign.vim | 2 +- src/testdir/test_vim9_func.vim | 6 +++--- src/version.c | 2 ++ src/vim9type.c | 13 ++++++++----- 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 ")); -EXTERN char e_missing_gt_after_type[] - INIT(= N_("E1009: Missing > after type")); +EXTERN char e_missing_type_after_str[] + INIT(= N_("E1008: Missing 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 '], 'E1068:') - v9.CheckDefFailure(['var name: dict after type: after list') delfunc! g:Func - v9.CheckScriptFailure(['def Func(): dict', 'return {}', 'enddef'], 'E1008:') + v9.CheckScriptFailure(['def Func(): dict', 'return {}', 'enddef'], 'E1008: Missing 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 ') + v9.CheckScriptFailure(['def Func3(items: list)', 'echo "a"', 'enddef'], 'E1008: Missing 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 @@ -731,6 +731,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 229, /**/ 228, /**/ 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: "" 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': -- 2.40.0