1
0
forked from aniani/vim

patch 9.0.1505: error when heredoc content looks like heredoc

Problem:    Error when heredoc content looks like heredoc.
Solution:   Handle curly expressions. (closes #12325)
This commit is contained in:
zeertzjq
2023-05-02 16:25:47 +01:00
committed by Bram Moolenaar
parent 17b695190d
commit a93d9cdc74
6 changed files with 145 additions and 32 deletions

View File

@@ -1848,30 +1848,81 @@ enddef
def Test_heredoc()
# simple heredoc
var lines =<< trim END
var text =<< trim TEXT # comment
abc
TEXT
assert_equal(['abc'], text)
var text =<< trim TEXT # comment
abc
TEXT
assert_equal(['abc'], text)
END
v9.CheckDefAndScriptSuccess(lines)
# empty heredoc
lines =<< trim END
var text =<< trim TEXT
TEXT
assert_equal([], text)
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
var text =<< trim TEXT
TEXT
assert_equal([''], text)
TEXT
assert_equal([''], text)
END
v9.CheckDefAndScriptSuccess(lines)
# assign heredoc to variable with type
lines =<< trim END
var text: list<string> =<< trim TEXT
var foo =<< trim FOO
TEXT
assert_equal(['var foo =<< trim FOO'], text)
END
v9.CheckDefAndScriptSuccess(lines)
# extra whitespace before type is allowed
lines =<< trim END
var text: list<string> =<< trim TEXT
var foo =<< trim FOO
TEXT
assert_equal(['var foo =<< trim FOO'], text)
END
v9.CheckDefAndScriptSuccess(lines)
# missing whitespace before type is an error
lines =<< trim END
var text:list<string> =<< trim TEXT
var foo =<< trim FOO
TEXT
assert_equal(['var foo =<< trim FOO'], text)
END
v9.CheckDefAndScriptFailure(lines, 'E1069:')
# assign heredoc to list slice
lines =<< trim END
var text = ['']
text[ : ] =<< trim TEXT
var foo =<< trim FOO
TEXT
assert_equal(['var foo =<< trim FOO'], text)
END
v9.CheckDefAndScriptSuccess(lines)
# assign heredoc to curly braces name in legacy function in Vim9 script
lines =<< trim END
vim9script
func Func()
let foo_3_bar = ['']
let foo_{1 + 2}_bar[ : ] =<< trim TEXT
var foo =<< trim FOO
TEXT
call assert_equal(['var foo =<< trim FOO'], foo_3_bar)
endfunc
Func()
END
v9.CheckScriptSuccess(lines)
v9.CheckDefFailure(['var lines =<< trim END X', 'END'], 'E488:')
v9.CheckDefFailure(['var lines =<< trim END " comment', 'END'], 'E488:')