]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.0229: Vim9: error message for missing type is not clear v9.0.0229
authorBram Moolenaar <Bram@vim.org>
Sat, 20 Aug 2022 11:07:58 +0000 (12:07 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 20 Aug 2022 11:07:58 +0000 (12:07 +0100)
Problem:    Vim9: error message for missing type is not clear.
Solution:   Mention the context. (issue #10944)

src/errors.h
src/testdir/test_vim9_assign.vim
src/testdir/test_vim9_func.vim
src/version.c
src/vim9type.c

index 8aad956d9a62a1c2f83d8beca15a6b345ac522b8..bc1145db8c2780cc9180b869c74966b3a6c0a683 100644 (file)
@@ -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[]
index faa4928ea58f3f0930a83d1952cd84e4e22d9acf..df5fc7fe609f22425e6b1b8b7778c0796bcdedb0 100644 (file)
@@ -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:')
index fd7182d50e08218300d5e1caa8ade70d426e4a11..4011d7fe160facfc5423e66ba53e30613330387f 100644 (file)
@@ -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:')
index 86be34dba2d2700e39b00ffb74b80398dade0942..412b3e83eaaed7059ccf0e51e780f5c8fdb309d1 100644 (file)
@@ -731,6 +731,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    229,
 /**/
     228,
 /**/
index 28b282865448054bdafb4895f477c319f4453419..b92a7afb15f629757ba0948b1404aea6e88ac0da 100644 (file)
@@ -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':