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:
committed by
Bram Moolenaar
parent
66e13aedc7
commit
1fc6ea9bf3
@@ -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
|
||||
|
Reference in New Issue
Block a user