From: Bram Moolenaar Date: Thu, 8 Jul 2021 14:40:13 +0000 (+0200) Subject: patch 8.2.3123: Vim9: confusing error when using white space after option X-Git-Tag: v8.2.3123 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1594f313452cf6ca88375d9c8f68605a9c3c8ab5;p=vim 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) --- diff --git a/src/errors.h b/src/errors.h index 7524b8046..3a76d9e95 100644 --- a/src/errors.h +++ b/src/errors.h @@ -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")); diff --git a/src/option.c b/src/option.c index ae303106a..90e3e6d53 100644 --- a/src/option.c +++ b/src/option.c @@ -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; } diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim index 60f51a48c..f78eace21 100644 --- a/src/testdir/test_vim9_script.vim +++ b/src/testdir/test_vim9_script.vim @@ -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) + set hlsearch + set hlsearch! + assert_equal(false, &hlsearch) + + set hlsearch + set hlsearch& + assert_equal(false, &hlsearch) + lines =<< trim END - vim9script set hlsearch & END - CheckScriptFailure(lines, 'E518:') + CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: &') lines =<< trim END - vim9script - set hlsearch & hlsearch ! + set hlsearch ! END - CheckScriptFailure(lines, 'E518:') + CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: !') + + set hlsearch& enddef " Keep this last, it messes up highlighting. diff --git a/src/version.c b/src/version.c index 518844f35..56c9f90ab 100644 --- a/src/version.c +++ b/src/version.c @@ -755,6 +755,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 3123, /**/ 3122, /**/