changeset 25174:b32c83317492 v8.2.3123

patch 8.2.3123: Vim9: confusing error when using white space after option Commit: https://github.com/vim/vim/commit/1594f313452cf6ca88375d9c8f68605a9c3c8ab5 Author: Bram Moolenaar <Bram@vim.org> 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)
author Bram Moolenaar <Bram@vim.org>
date Thu, 08 Jul 2021 16:45:04 +0200
parents 74d0efab9bb4
children e977a05e221a
files src/errors.h src/option.c src/testdir/test_vim9_script.vim src/version.c
diffstat 4 files changed, 25 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- 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"));
--- 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;
 	    }
 
--- 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.
--- 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,