diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-04-14 21:06:15 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2023-04-15 17:40:31 +0800 |
commit | 2cf8f01e7d0469b592bacecd5f224b4fe3149a62 (patch) | |
tree | 5199ef018c491a025ceb4b8db0331f7bfabd11e7 | |
parent | 3c16e75ae194f728c703032084a8f6dd0833a563 (diff) | |
download | rneovim-2cf8f01e7d0469b592bacecd5f224b4fe3149a62.tar.gz rneovim-2cf8f01e7d0469b592bacecd5f224b4fe3149a62.tar.bz2 rneovim-2cf8f01e7d0469b592bacecd5f224b4fe3149a62.zip |
vim-patch:8.2.4840: heredoc expression evaluated even when skipping
Problem: Heredoc expression evaluated even when skipping.
Solution: Don't evaluate when "skip" is set. (closes vim/vim#10306)
https://github.com/vim/vim/commit/05c7f5d3d03440da6f69604f8c06c4e3d90d2a26
Co-authored-by: Bram Moolenaar <Bram@vim.org>
-rw-r--r-- | src/nvim/eval/vars.c | 2 | ||||
-rw-r--r-- | test/old/testdir/test_let.vim | 13 |
2 files changed, 14 insertions, 1 deletions
diff --git a/src/nvim/eval/vars.c b/src/nvim/eval/vars.c index 048b5ee2aa..a8d1e01152 100644 --- a/src/nvim/eval/vars.c +++ b/src/nvim/eval/vars.c @@ -227,7 +227,7 @@ static list_T *heredoc_get(exarg_T *eap, char *cmd) } char *str = theline + ti; - if (evalstr) { + if (evalstr && !eap->skip) { str = eval_all_expr_in_str(str); if (str == NULL) { // expression evaluation failed diff --git a/test/old/testdir/test_let.vim b/test/old/testdir/test_let.vim index fe14709e71..915bba2314 100644 --- a/test/old/testdir/test_let.vim +++ b/test/old/testdir/test_let.vim @@ -507,20 +507,24 @@ func Test_let_heredoc_eval() let c = "abc`=str`d" END call assert_equal(['let a = 15', 'let b = 6 + 6', '', 'let c = "abcd"'], code) + let $TESTVAR = "Hello" let code =<< eval trim END let s = "`=$TESTVAR`" END call assert_equal(['let s = "Hello"'], code) + let code =<< eval END let s = "`=$TESTVAR`" END call assert_equal([' let s = "Hello"'], code) + let a = 10 let data =<< eval END `=a` END call assert_equal(['10'], data) + let x = 'X' let code =<< eval trim END let a = `abc` @@ -528,12 +532,14 @@ END let c = ` END call assert_equal(['let a = `abc`', 'let b = X', 'let c = `'], code) + let code = 'xxx' let code =<< eval trim END let n = `=5 + 6` END call assert_equal('xxx', code) + let code =<< eval trim END let n = `=min([1, 2]` + `=max([3, 4])` END @@ -560,6 +566,13 @@ END LINES call CheckScriptFailure(lines, 'E15:') + " skipped heredoc + if 0 + let msg =<< trim eval END + n is: `=n` + END + endif + " Test for sourcing a script containing a heredoc with invalid expression. " Variable assignment should fail, if expression evaluation fails new |