summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-07-08 16:40:13 +0200
committerBram Moolenaar <Bram@vim.org>2021-07-08 16:40:13 +0200
commit1594f313452cf6ca88375d9c8f68605a9c3c8ab5 (patch)
treef21489741747b0b2882d1b985ae1d9645e02e2c5
parent30441bb3d5fa73f888b09684db3f54ff5ab48dbc (diff)
patch 8.2.3123: Vim9: confusing error when using white space after optionv8.2.3123
Problem: Vim9: confusing error when using white space after option, before one of "!&<". Solution: Give a specific error. (issue #8408)
-rw-r--r--src/errors.h2
-rw-r--r--src/option.c9
-rw-r--r--src/testdir/test_vim9_script.vim19
-rw-r--r--src/version.c2
4 files changed, 25 insertions, 7 deletions
diff --git a/src/errors.h b/src/errors.h
index 7524b80468..3a76d9e959 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -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"));
diff --git a/src/option.c b/src/option.c
index ae303106ad..90e3e6d536 100644
--- 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
index 60f51a48c1..f78eace212 100644
--- 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
index 518844f351..56c9f90ab3 100644
--- 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,