0
0
mirror of https://github.com/vim/vim.git synced 2025-10-05 05:34:07 -04:00

patch 8.2.4804: expression in heredoc doesn't work for compiled function

Problem:    Expression in heredoc doesn't work for compiled function.
Solution:   Implement compiling the heredoc expressions. (Yegappan Lakshmanan,
            closes #10232)
This commit is contained in:
Yegappan Lakshmanan
2022-04-21 23:30:15 +01:00
committed by Bram Moolenaar
parent 66e13aedc7
commit 1fc6ea9bf3
8 changed files with 187 additions and 58 deletions

View File

@@ -1821,10 +1821,31 @@ def Test_assign_lambda()
enddef
def Test_heredoc()
var lines =<< trim END # comment
text
# simple heredoc
var lines =<< trim END
var text =<< trim TEXT # comment
abc
TEXT
assert_equal(['abc'], text)
END
assert_equal(['text'], lines)
v9.CheckDefAndScriptSuccess(lines)
# empty heredoc
lines =<< trim END
var text =<< trim TEXT
TEXT
assert_equal([], text)
END
v9.CheckDefAndScriptSuccess(lines)
# heredoc with a single empty line
lines =<< trim END
var text =<< trim TEXT
TEXT
assert_equal([''], text)
END
v9.CheckDefAndScriptSuccess(lines)
v9.CheckDefFailure(['var lines =<< trim END X', 'END'], 'E488:')
v9.CheckDefFailure(['var lines =<< trim END " comment', 'END'], 'E488:')
@@ -2642,51 +2663,68 @@ let g:someVar = 'X'
" Test for heredoc with Vim expressions.
" This messes up highlighting, keep it near the end.
def Test_heredoc_expr()
var code =<< trim eval END
var a = `=5 + 10`
var b = `=min([10, 6])` + `=max([4, 6])`
END
assert_equal(['var a = 15', 'var b = 6 + 6'], code)
var lines =<< trim CODE
var s = "local"
var a1 = "1"
var a2 = "2"
var a3 = "3"
var a4 = ""
var code =<< trim eval END
var a = `=5 + 10`
var b = `=min([10, 6])` + `=max([4, 6])`
var c = "`=s`"
var d = x`=a1`x`=a2`x`=a3`x`=a4`
END
assert_equal(['var a = 15', 'var b = 6 + 6', 'var c = "local"', 'var d = x1x2x3x'], code)
CODE
v9.CheckDefAndScriptSuccess(lines)
code =<< eval trim END
var s = "`=$SOME_ENV_VAR`"
END
assert_equal(['var s = "somemore"'], code)
lines =<< trim CODE
var code =<< eval trim END
var s = "`=$SOME_ENV_VAR`"
END
assert_equal(['var s = "somemore"'], code)
CODE
v9.CheckDefAndScriptSuccess(lines)
code =<< eval END
var s = "`=$SOME_ENV_VAR`"
END
assert_equal([' var s = "somemore"'], code)
lines =<< trim CODE
var code =<< eval END
var s = "`=$SOME_ENV_VAR`"
END
assert_equal([' var s = "somemore"'], code)
CODE
v9.CheckDefAndScriptSuccess(lines)
code =<< eval trim END
let a = `abc`
let b = `=g:someVar`
let c = `
END
assert_equal(['let a = `abc`', 'let b = X', 'let c = `'], code)
lines =<< trim CODE
var code =<< eval trim END
let a = `abc`
let b = `=g:someVar`
let c = `
END
assert_equal(['let a = `abc`', 'let b = X', 'let c = `'], code)
CODE
v9.CheckDefAndScriptSuccess(lines)
var lines =<< trim LINES
lines =<< trim LINES
var text =<< eval trim END
let b = `=
END
LINES
v9.CheckDefAndScriptFailure(lines, 'E1083:')
v9.CheckDefAndScriptFailure(lines, ['E1143: Empty expression: ""', 'E1083: Missing backtick'])
lines =<< trim LINES
var text =<< eval trim END
let b = `=abc
END
LINES
v9.CheckDefAndScriptFailure(lines, 'E1083:')
v9.CheckDefAndScriptFailure(lines, ['E1001: Variable not found: abc', 'E1083: Missing backtick'])
lines =<< trim LINES
var text =<< eval trim END
let b = `=`
END
LINES
v9.CheckDefAndScriptFailure(lines, 'E15:')
v9.CheckDefAndScriptFailure(lines, ['E1015: Name expected: `', 'E15: Invalid expression: "`"'])
enddef
" vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker