runtime(vim): Update base-syntax, contain let-heredocs

Limit heredoc matches to assignment statements.  Matching these at the
top level is very slow.

closes: #17473

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Doug Kearns
2025-06-10 21:02:43 +02:00
committed by Christian Brabandt
parent 138fb951e0
commit 274efcc7e6
37 changed files with 1099 additions and 221 deletions

View File

@ -0,0 +1,2 @@
highlight link vimVar Identifier

View File

@ -0,0 +1,298 @@
vim9script
# VIM_TEST_SETUP let g:vimsyn_folding = "h"
# VIM_TEST_SETUP setl fdc=2 fdl=99 fdm=syntax
var foo =<< END
line1
line2
END
var foo =<< END
line1
line2
END
var [foo, bar] =<< EOS
line1
line2
EOS
var [foo, bar] =<< EOS
line1
line2
EOS
var [foo,
\ bar] =<< EOS
line1
line2
EOS
var [foo,
\ bar] =<< EOS
line1
line2
EOS
# assignment
foo =<< END
line1
line2
END
foo =<< END
line1
line2
END
g:foo =<< END
line1
line2
END
g:foo =<< END
line1
line2
END
[foo, bar] =<< EOS
line1
line2
EOS
[foo, bar] =<< EOS
line1
line2
EOS
[foo,
\ bar] =<< EOS
line1
line2
EOS
[foo,
\ bar] =<< EOS
line1
line2
EOS
[g:foo, g:bar] =<< EOS
line1
line2
EOS
[g:foo, g:bar] =<< EOS
line1
line2
EOS
[g:foo,
\ g:bar] =<< EOS
line1
line2
EOS
[g:foo,
\ g:bar] =<< EOS
line1
line2
EOS
# typed
var foo: list<string> =<< END
line1
line2
END
var [foo: string, bar: string] =<< END
line1
line2
END
# assignment
# trim
var foo =<< trim END
line1
line2
END
var foo =<< trim END
line1
line2
END
# interpolation
var foo =<< eval END
line{1 + 0}
line{1 + 1}
END
var foo =<< eval END
line{1 + 0}
line{1 + 1}
END
var foo =<< trim eval END
line{1 + 0}
line{1 + 1}
END
var foo =<< trim eval END
line{1 + 0}
line{1 + 1}
END
# no interpolation (escaped { and })
var foo =<< eval END
line{{1 + 0}}
line{{1 + 1}}
END
var foo =<< eval END
line{{1 + 0}}
line{{1 + 1}}
END
var foo =<< trim eval END
line{{1 + 0}}
line{{1 + 1}}
END
var foo =<< trim eval END
line{{1 + 0}}
line{{1 + 1}}
END
# no interpolation
var foo =<< END
line{1 + 0}
line{1 + 1}
END
var foo =<< END
line{1 + 0}
line{1 + 1}
END
var foo =<< trim END
line{1 + 0}
line{1 + 1}
END
var foo =<< trim END
line{1 + 0}
line{1 + 1}
END
# end marker must not be followed by whitespace
# assert_equal(foo, ["END "])
var foo =<< END
END
END
# assert_equal(foo, [" END "])
var foo =<< END
END
END
# assert_equal(foo, ["END "])
var foo =<< trim END
END
END
# assert_equal(foo, ["END "])
var foo =<< trim END
END
END
# end marker must be vertically aligned with :var (if preceded by whitespace)
# assert_equal(foo, ["END"])
var foo =<< trim END
END
END
# assert_equal(foo, ["END"])
var foo =<< trim END
END
END
# assert_equal(foo, ["END "])
var foo =<< trim END
END
END
# assert_equal(foo, ["END"])
var foo =<< trim END
END
END
# assert_equal(foo, ["END "])
var foo =<< trim END
END
END
# assert_equal(foo, ["END"])
var foo =<< trim END
END
END
# assert_equal(foo, ["END "])
var foo =<< trim END
END
END
# assert_equal(foo, ["END "])
var foo =<< trim END
END
END
# assert_equal(foo, ["END"])
var foo =<< trim END
END
END
# assert_equal(foo, ["END"])
var foo =<< trim END
END
END
# end markers
var foo =<< !@#$%^&*()_+
line1
line2
!@#$%^&*()_+
var foo =<< 0!@#$%^&*()_+
line1
line2
0!@#$%^&*()_+
var foo =<< A!@#$%^&*()_+
line1
line2
A!@#$%^&*()_+
# error - leading lowercase character
var foo =<< a!@#$%^&*()_+
line1
line2
a!@#$%^&*()_+

View File

@ -13,6 +13,60 @@ line1
line2
END
let [foo, bar] =<< EOS
line1
line2
EOS
let [foo, bar] =<< EOS
line1
line2
EOS
let [foo,
\ bar] =<< EOS
line1
line2
EOS
let [foo,
\ bar] =<< EOS
line1
line2
EOS
let g:foo =<< END
line1
line2
END
let g:foo =<< END
line1
line2
END
let [g:foo, g:bar] =<< EOS
line1
line2
EOS
let [g:foo, g:bar] =<< EOS
line1
line2
EOS
let [g:foo,
\ g:bar] =<< EOS
line1
line2
EOS
let [g:foo,
\ g:bar] =<< EOS
line1
line2
EOS
" trim