aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-04-14 21:06:15 +0800
committerzeertzjq <zeertzjq@outlook.com>2023-04-15 17:40:31 +0800
commit2cf8f01e7d0469b592bacecd5f224b4fe3149a62 (patch)
tree5199ef018c491a025ceb4b8db0331f7bfabd11e7
parent3c16e75ae194f728c703032084a8f6dd0833a563 (diff)
downloadrneovim-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.c2
-rw-r--r--test/old/testdir/test_let.vim13
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