Mercurial > vim
diff src/testdir/test_vim9_assign.vim @ 32347:edea3992cb01 v9.0.1505
patch 9.0.1505: error when heredoc content looks like heredoc
Commit: https://github.com/vim/vim/commit/a93d9cdc74f70ca2c85781496ffae4ca738fcd88
Author: zeertzjq <zeertzjq@outlook.com>
Date: Tue May 2 16:25:47 2023 +0100
patch 9.0.1505: error when heredoc content looks like heredoc
Problem: Error when heredoc content looks like heredoc.
Solution: Handle curly expressions. (closes https://github.com/vim/vim/issues/12325)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 02 May 2023 17:30:05 +0200 |
parents | 7d505d77f6da |
children | 304341915488 |
line wrap: on
line diff
--- a/src/testdir/test_vim9_assign.vim +++ b/src/testdir/test_vim9_assign.vim @@ -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 - - TEXT - assert_equal([''], text) + var text =<< trim 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:')