patch 8.2.3021: spaces allowed between option name and "!", "?", etc.
Problem: Spaces allowed between option name and "!", "?", etc.
Solution: Disallow spaces in Vim9 script, it was not documented.
(closes #8408)
diff --git a/src/option.c b/src/option.c
index dd44fe4..535213c 100644
--- a/src/option.c
+++ b/src/option.c
@@ -1306,9 +1306,10 @@
// remember character after option name
afterchar = arg[len];
- // skip white space, allow ":set ai ?"
- while (VIM_ISWHITE(arg[len]))
- ++len;
+ if (!in_vim9script())
+ // skip white space, allow ":set ai ?", ":set hlsearch !"
+ while (VIM_ISWHITE(arg[len]))
+ ++len;
adding = FALSE;
prepending = FALSE;
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index 4b0ab2b..1584f17 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -3937,6 +3937,26 @@
delfunc g:FuncA
enddef
+def Test_option_modifier()
+ var lines =<< trim END
+ set hlsearch & hlsearch !
+ call assert_equal(1, &hlsearch)
+ END
+ CheckScriptSuccess(lines)
+
+ lines =<< trim END
+ vim9script
+ set hlsearch &
+ END
+ CheckScriptFailure(lines, 'E518:')
+
+ lines =<< trim END
+ vim9script
+ set hlsearch & hlsearch !
+ END
+ CheckScriptFailure(lines, 'E518:')
+enddef
+
" Keep this last, it messes up highlighting.
def Test_substitute_cmd()
new
diff --git a/src/version.c b/src/version.c
index d1201f4..d217fe6 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 3021,
+/**/
3020,
/**/
3019,