diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-11-06 06:47:54 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2022-11-06 08:21:17 +0800 |
commit | 7d7208a88b2bb078c9c2727e93ef390f2a564027 (patch) | |
tree | f10a2b87f759af1ce4a147e2588f9ee30e759c6b | |
parent | fa2ed8ca1fbf98053e8273d814322018895d6b9b (diff) | |
download | rneovim-7d7208a88b2bb078c9c2727e93ef390f2a564027.tar.gz rneovim-7d7208a88b2bb078c9c2727e93ef390f2a564027.tar.bz2 rneovim-7d7208a88b2bb078c9c2727e93ef390f2a564027.zip |
vim-patch:8.2.3016: confusing error when expression is followed by comma
Problem: Confusing error when expression is followed by comma.
Solution: Give a different error for trailing text. (closes vim/vim#8395)
https://github.com/vim/vim/commit/fae55a9cb0838e4c2e634e55a3468af4a75fbdf2
Omit test_eval_stuff.vim and test_viminfo.vim: changes tests are N/A.
Co-authored-by: Bram Moolenaar <Bram@vim.org>
-rw-r--r-- | src/nvim/eval.c | 13 | ||||
-rw-r--r-- | src/nvim/testdir/test_let.vim | 1 | ||||
-rw-r--r-- | src/nvim/testdir/test_vimscript.vim | 2 |
3 files changed, 13 insertions, 3 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 62e006fd57..465d76de69 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -2277,10 +2277,15 @@ int eval0(char *arg, typval_T *rettv, char **nextcmd, int evaluate) char *p; const int did_emsg_before = did_emsg; const int called_emsg_before = called_emsg; + bool end_error = false; p = skipwhite(arg); ret = eval1(&p, rettv, evaluate); - if (ret == FAIL || !ends_excmd(*p)) { + + if (ret != FAIL) { + end_error = !ends_excmd(*p); + } + if (ret == FAIL || end_error) { if (ret != FAIL) { tv_clear(rettv); } @@ -2290,7 +2295,11 @@ int eval0(char *arg, typval_T *rettv, char **nextcmd, int evaluate) // Also check called_emsg for when using assert_fails(). if (!aborting() && did_emsg == did_emsg_before && called_emsg == called_emsg_before) { - semsg(_(e_invexpr2), arg); + if (end_error) { + semsg(_(e_trailing_arg), p); + } else { + semsg(_(e_invexpr2), arg); + } } ret = FAIL; } diff --git a/src/nvim/testdir/test_let.vim b/src/nvim/testdir/test_let.vim index 3ef3d961a7..48c5699093 100644 --- a/src/nvim/testdir/test_let.vim +++ b/src/nvim/testdir/test_let.vim @@ -297,6 +297,7 @@ func Test_let_errors() let ch = test_null_channel() call assert_fails('let ch += 1', 'E734:') endif + call assert_fails('let name = "a" .. "b",', 'E488: Trailing characters: ,') " This test works only when the language is English if v:lang == "C" || v:lang =~ '^[Ee]n' diff --git a/src/nvim/testdir/test_vimscript.vim b/src/nvim/testdir/test_vimscript.vim index 8faa9135e5..44904af160 100644 --- a/src/nvim/testdir/test_vimscript.vim +++ b/src/nvim/testdir/test_vimscript.vim @@ -5569,7 +5569,7 @@ func Test_expr_eval_error_msg() call T(19, '{(1} + CONT(19)', 'E110', "Missing ')'") call T(20, '("abc"[1) + CONT(20)', 'E111', "Missing ']'") call T(21, '(1 +) + CONT(21)', 'E15', "Invalid expression") - call T(22, '1 2 + CONT(22)', 'E15', "Invalid expression") + call T(22, '1 2 + CONT(22)', 'E488', "Trailing characters: 2 +") call T(23, '(1 ? 2) + CONT(23)', 'E109', "Missing ':' after '?'") call T(24, '("abc) + CONT(24)', 'E114', "Missing quote") call T(25, "('abc) + CONT(25)", 'E115', "Missing quote") |