0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.2.3123: Vim9: confusing error when using white space after option

Problem:    Vim9: confusing error when using white space after option, before
            one of "!&<".
Solution:   Give a specific error. (issue #8408)
This commit is contained in:
Bram Moolenaar 2021-07-08 16:40:13 +02:00
parent 30441bb3d5
commit 1594f31345
4 changed files with 28 additions and 10 deletions

View File

@ -490,3 +490,5 @@ EXTERN char e_dot_can_only_be_used_on_dictionary_str[]
INIT(= N_("E1203: Dot can only be used on a dictionary: %s"));
EXTERN char e_regexp_number_after_dot_pos_search[]
INIT(= N_("E1204: No Number allowed after .: '\\%%%c'"));
EXTERN char e_no_white_space_allowed_between_option_and[]
INIT(= N_("E1205: No white space allowed between option and"));

View File

@ -1230,9 +1230,10 @@ ex_set(exarg_T *eap)
*/
int
do_set(
char_u *arg, // option string (may be written to!)
char_u *arg_start, // option string (may be written to!)
int opt_flags)
{
char_u *arg = arg_start;
int opt_idx;
char *errmsg;
char errbuf[80];
@ -1387,7 +1388,11 @@ do_set(
if (opt_idx == -1 && key == 0) // found a mismatch: skip
{
errmsg = N_("E518: Unknown option");
if (in_vim9script() && arg > arg_start
&& vim_strchr((char_u *)"!&<", *arg) != NULL)
errmsg = e_no_white_space_allowed_between_option_and;
else
errmsg = N_("E518: Unknown option");
goto skip;
}

View File

@ -4076,23 +4076,32 @@ def Test_mapping_line_number()
enddef
def Test_option_modifier()
# legacy script allows for white space
var lines =<< trim END
set hlsearch & hlsearch !
call assert_equal(1, &hlsearch)
END
CheckScriptSuccess(lines)
lines =<< trim END
vim9script
set hlsearch &
END
CheckScriptFailure(lines, 'E518:')
set hlsearch
set hlsearch!
assert_equal(false, &hlsearch)
set hlsearch
set hlsearch&
assert_equal(false, &hlsearch)
lines =<< trim END
vim9script
set hlsearch & hlsearch !
set hlsearch &
END
CheckScriptFailure(lines, 'E518:')
CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: &')
lines =<< trim END
set hlsearch !
END
CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: !')
set hlsearch&
enddef
" Keep this last, it messes up highlighting.

View File

@ -755,6 +755,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
3123,
/**/
3122,
/**/