changeset 25176:af3d0198faad v8.2.3124

patch 8.2.3124: Vim9: no error for white space between option and "=9" Commit: https://github.com/vim/vim/commit/deb108ba0a8599c1307ddc1507c73e7b60f17d36 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jul 8 17:35:36 2021 +0200 patch 8.2.3124: Vim9: no error for white space between option and "=9" Problem: Vim9: no error for white space between option and "=9". Solution: Check for extraneous white space. (issue https://github.com/vim/vim/issues/8408)
author Bram Moolenaar <Bram@vim.org>
date Thu, 08 Jul 2021 17:45:03 +0200
parents e977a05e221a
children fb75b9b1bd3e
files src/option.c src/testdir/test_vim9_script.vim src/version.c
diffstat 3 files changed, 57 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/option.c
+++ b/src/option.c
@@ -1358,7 +1358,22 @@ do_set(
 	    // remember character after option name
 	    afterchar = arg[len];
 
-	    if (!in_vim9script())
+	    if (in_vim9script())
+	    {
+		char_u *p = skipwhite(arg + len);
+
+		// disallow white space before =val, +=val, -=val, ^=val
+		if (p > arg + len && (p[0] == '='
+			|| (vim_strchr((char_u *)"+-^", p[0]) != NULL
+							      && p[1] == '=')))
+		{
+		    errmsg = e_no_white_space_allowed_between_option_and;
+		    arg = p;
+		    startarg = p;
+		    goto skip;
+		}
+	    }
+	    else
 		// skip white space, allow ":set ai  ?", ":set hlsearch  !"
 		while (VIM_ISWHITE(arg[len]))
 		    ++len;
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -4075,6 +4075,45 @@ def Test_mapping_line_number()
   delfunc g:FuncA
 enddef
 
+def Test_option_set()
+  # legacy script allows for white space
+  var lines =<< trim END
+      set foldlevel  =11
+      call assert_equal(11, &foldlevel)
+  END
+  CheckScriptSuccess(lines)
+
+  set foldlevel
+  set foldlevel=12
+  assert_equal(12, &foldlevel)
+  set foldlevel+=2
+  assert_equal(14, &foldlevel)
+  set foldlevel-=3
+  assert_equal(11, &foldlevel)
+
+  lines =<< trim END
+      set foldlevel =1
+  END
+  CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: =1')
+
+  lines =<< trim END
+      set foldlevel +=1
+  END
+  CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: +=1')
+
+  lines =<< trim END
+      set foldlevel ^=1
+  END
+  CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: ^=1')
+
+  lines =<< trim END
+      set foldlevel -=1
+  END
+  CheckDefExecAndScriptFailure(lines, 'E1205: No white space allowed between option and: -=1')
+
+  set foldlevel&
+enddef
+
 def Test_option_modifier()
   # legacy script allows for white space
   var lines =<< trim END
--- 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 */
 /**/
+    3124,
+/**/
     3123,
 /**/
     3122,