Mercurial > vim
comparison src/vim9type.c @ 29780:9f8dd1b77563 v9.0.0229
patch 9.0.0229: Vim9: error message for missing type is not clear
Commit: https://github.com/vim/vim/commit/62e0e2e54b34b618500be4521ab1c33e1c378b42
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Aug 20 12:07:58 2022 +0100
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 https://github.com/vim/vim/issues/10944)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 20 Aug 2022 13:15:03 +0200 |
parents | 49d8b54802f3 |
children | d751e924cc29 |
comparison
equal
deleted
inserted
replaced
29779:90a966f5c77a | 29780:9f8dd1b77563 |
---|---|
877 } | 877 } |
878 | 878 |
879 /* | 879 /* |
880 * Parse the member type: "<type>" and return "type" with the member set. | 880 * Parse the member type: "<type>" and return "type" with the member set. |
881 * Use "type_gap" if a new type needs to be added. | 881 * Use "type_gap" if a new type needs to be added. |
882 * "info" is extra information for an error message. | |
882 * Returns NULL in case of failure. | 883 * Returns NULL in case of failure. |
883 */ | 884 */ |
884 static type_T * | 885 static type_T * |
885 parse_type_member( | 886 parse_type_member( |
886 char_u **arg, | 887 char_u **arg, |
887 type_T *type, | 888 type_T *type, |
888 garray_T *type_gap, | 889 garray_T *type_gap, |
889 int give_error) | 890 int give_error, |
890 { | 891 char *info) |
892 { | |
893 char_u *arg_start = *arg; | |
891 type_T *member_type; | 894 type_T *member_type; |
892 int prev_called_emsg = called_emsg; | 895 int prev_called_emsg = called_emsg; |
893 | 896 |
894 if (**arg != '<') | 897 if (**arg != '<') |
895 { | 898 { |
896 if (give_error) | 899 if (give_error) |
897 { | 900 { |
898 if (*skipwhite(*arg) == '<') | 901 if (*skipwhite(*arg) == '<') |
899 semsg(_(e_no_white_space_allowed_before_str_str), "<", *arg); | 902 semsg(_(e_no_white_space_allowed_before_str_str), "<", *arg); |
900 else | 903 else |
901 emsg(_(e_missing_type)); | 904 semsg(_(e_missing_type_after_str), info); |
902 } | 905 } |
903 return NULL; | 906 return NULL; |
904 } | 907 } |
905 *arg = skipwhite(*arg + 1); | 908 *arg = skipwhite(*arg + 1); |
906 | 909 |
910 | 913 |
911 *arg = skipwhite(*arg); | 914 *arg = skipwhite(*arg); |
912 if (**arg != '>' && called_emsg == prev_called_emsg) | 915 if (**arg != '>' && called_emsg == prev_called_emsg) |
913 { | 916 { |
914 if (give_error) | 917 if (give_error) |
915 emsg(_(e_missing_gt_after_type)); | 918 semsg(_(e_missing_gt_after_type_str), arg_start); |
916 return NULL; | 919 return NULL; |
917 } | 920 } |
918 ++*arg; | 921 ++*arg; |
919 | 922 |
920 if (type->tt_type == VAR_LIST) | 923 if (type->tt_type == VAR_LIST) |
969 case 'd': | 972 case 'd': |
970 if (len == 4 && STRNCMP(*arg, "dict", len) == 0) | 973 if (len == 4 && STRNCMP(*arg, "dict", len) == 0) |
971 { | 974 { |
972 *arg += len; | 975 *arg += len; |
973 return parse_type_member(arg, &t_dict_any, | 976 return parse_type_member(arg, &t_dict_any, |
974 type_gap, give_error); | 977 type_gap, give_error, "dict"); |
975 } | 978 } |
976 break; | 979 break; |
977 case 'f': | 980 case 'f': |
978 if (len == 5 && STRNCMP(*arg, "float", len) == 0) | 981 if (len == 5 && STRNCMP(*arg, "float", len) == 0) |
979 { | 982 { |
1113 case 'l': | 1116 case 'l': |
1114 if (len == 4 && STRNCMP(*arg, "list", len) == 0) | 1117 if (len == 4 && STRNCMP(*arg, "list", len) == 0) |
1115 { | 1118 { |
1116 *arg += len; | 1119 *arg += len; |
1117 return parse_type_member(arg, &t_list_any, | 1120 return parse_type_member(arg, &t_list_any, |
1118 type_gap, give_error); | 1121 type_gap, give_error, "list"); |
1119 } | 1122 } |
1120 break; | 1123 break; |
1121 case 'n': | 1124 case 'n': |
1122 if (len == 6 && STRNCMP(*arg, "number", len) == 0) | 1125 if (len == 6 && STRNCMP(*arg, "number", len) == 0) |
1123 { | 1126 { |