Mercurial > vim
changeset 25174:b32c83317492 v8.2.3123
patch 8.2.3123: Vim9: confusing error when using white space after option
Commit: https://github.com/vim/vim/commit/1594f313452cf6ca88375d9c8f68605a9c3c8ab5
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Jul 8 16:40:13 2021 +0200
patch 8.2.3123: Vim9: confusing error when using white space after option
Problem: Vim9: confusing error when using white space after option, before
one of "!&<".
Solution: Give a specific error. (issue #8408)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 08 Jul 2021 16:45:04 +0200 |
parents | 74d0efab9bb4 |
children | e977a05e221a |
files | src/errors.h src/option.c src/testdir/test_vim9_script.vim src/version.c |
diffstat | 4 files changed, 25 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/errors.h +++ b/src/errors.h @@ -490,3 +490,5 @@ EXTERN char e_dot_can_only_be_used_on_di 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"));
--- 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; }
--- 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.