]> granicus.if.org Git - vim/commitdiff
patch 8.2.3123: Vim9: confusing error when using white space after option v8.2.3123
authorBram Moolenaar <Bram@vim.org>
Thu, 8 Jul 2021 14:40:13 +0000 (16:40 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 8 Jul 2021 14:40:13 +0000 (16:40 +0200)
Problem:    Vim9: confusing error when using white space after option, before
            one of "!&<".
Solution:   Give a specific error. (issue #8408)

src/errors.h
src/option.c
src/testdir/test_vim9_script.vim
src/version.c

index 7524b804689202abb73d889531bcf217b27ed448..3a76d9e959f056d05b489d6a464d67a42e0f7062 100644 (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"));
index ae303106ad3dd53ab6dcbf2e1cc5213ffc86c9e4..90e3e6d5369e3a208148df801fcf5f9a5bb3c3dd 100644 (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;
            }
 
index 60f51a48c1fd523ef1c3aa9bfc6e37bf7c47c11d..f78eace212badda446b8411bd2535a8bec4fe9f9 100644 (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)
 
+  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.
index 518844f3511cebbba81f1ac5912834c16935a8c8..56c9f90ab3805cedee59e703f1657b92f42ac09f 100644 (file)
@@ -755,6 +755,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3123,
 /**/
     3122,
 /**/