diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-07-08 16:40:13 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-07-08 16:40:13 +0200 |
commit | 1594f313452cf6ca88375d9c8f68605a9c3c8ab5 (patch) | |
tree | f21489741747b0b2882d1b985ae1d9645e02e2c5 | |
parent | 30441bb3d5fa73f888b09684db3f54ff5ab48dbc (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.h | 2 | ||||
-rw-r--r-- | src/option.c | 9 | ||||
-rw-r--r-- | src/testdir/test_vim9_script.vim | 19 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |