# HG changeset patch # User Bram Moolenaar # Date 1625755504 -7200 # Node ID b32c8331749226e35387ef80958d95c0ec4b9ebc # Parent 74d0efab9bb4f0e7f632064d7ff9459817070e22 patch 8.2.3123: Vim9: confusing error when using white space after option Commit: https://github.com/vim/vim/commit/1594f313452cf6ca88375d9c8f68605a9c3c8ab5 Author: Bram Moolenaar Date: Thu Jul 8 16:40:13 2021 +0200 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 --- a/src/errors.h +++ b/src/errors.h @@ -490,3 +490,5 @@ EXTERN char e_dot_can_only_be_used_on_di 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 --- 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 --- 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 --- a/src/version.c +++ b/src/version.c @@ -756,6 +756,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3123, +/**/ 3122, /**/ 3121,