mirror of
https://github.com/neovim/neovim.git
synced 2025-10-08 19:06:31 +00:00
vim-patch:8.0.0623: error for invalid regexp is not very informative
Problem: The message "Invalid range" is used for multiple errors.
Solution: Add two more specific error messages. (Itchyny, Ken Hamada)
966e58e413
This commit is contained in:
@@ -479,6 +479,8 @@ static char_u *regprop(char_u *);
|
||||
#endif
|
||||
|
||||
static char_u e_missingbracket[] = N_("E769: Missing ] after %s[");
|
||||
static char_u e_reverse_range[] = N_("E944: Reverse range in character class");
|
||||
static char_u e_large_class[] = N_("E945: Range too large in character class");
|
||||
static char_u e_unmatchedpp[] = N_("E53: Unmatched %s%%(");
|
||||
static char_u e_unmatchedp[] = N_("E54: Unmatched %s(");
|
||||
static char_u e_unmatchedpar[] = N_("E55: Unmatched %s)");
|
||||
@@ -2233,12 +2235,12 @@ collection:
|
||||
endc = coll_get_char();
|
||||
|
||||
if (startc > endc)
|
||||
EMSG_RET_NULL(_(e_invrange));
|
||||
EMSG_RET_NULL(_(e_reverse_range));
|
||||
if (has_mbyte && ((*mb_char2len)(startc) > 1
|
||||
|| (*mb_char2len)(endc) > 1)) {
|
||||
/* Limit to a range of 256 chars */
|
||||
if (endc > startc + 256)
|
||||
EMSG_RET_NULL(_(e_invrange));
|
||||
EMSG_RET_NULL(_(e_large_class));
|
||||
while (++startc <= endc)
|
||||
regmbc(startc);
|
||||
} else {
|
||||
|
@@ -1712,7 +1712,7 @@ collection:
|
||||
endc = startc;
|
||||
startc = oldstartc;
|
||||
if (startc > endc)
|
||||
EMSG_RET_FAIL(_(e_invrange));
|
||||
EMSG_RET_FAIL(_(e_reverse_range));
|
||||
|
||||
if (endc > startc + 2) {
|
||||
/* Emit a range instead of the sequence of
|
||||
|
@@ -166,3 +166,20 @@ func Test_eow_with_optional()
|
||||
call assert_equal(expected, actual)
|
||||
endfor
|
||||
endfunc
|
||||
|
||||
func Test_reversed_range()
|
||||
for re in range(0, 2)
|
||||
exe 'set re=' . re
|
||||
call assert_fails('call match("abc def", "[c-a]")', 'E944:')
|
||||
endfor
|
||||
set re=0
|
||||
endfunc
|
||||
|
||||
func Test_large_class()
|
||||
set re=1
|
||||
call assert_fails('call match("abc def", "[\u3000-\u4000]")', 'E945:')
|
||||
set re=2
|
||||
call assert_equal(0, 'abc def' =~# '[\u3000-\u4000]')
|
||||
call assert_equal(1, "\u3042" =~# '[\u3000-\u4000]')
|
||||
set re=0
|
||||
endfunc
|
||||
|
Reference in New Issue
Block a user