runtime(vim): Improve Vim9 and legacy-script comment highlighting (#13104)
This is a first-pass attempt to limit matching of Vim9 and legacy-script
comments to the appropriate syntactic contexts.
Vim9-script comments are highlighted at top level in a Vim9-script file,
in all :def functions, and in all :autocmd and :commmand command blocks.
Legacy-script comments are highlighted at top level in a legacy script
file, in all :func functions and in the Vim9-script preamble before the
:vim9script marker command.
Fixes #13047, #11307 and #9587.
Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/syntax/testdir/input/vim9_keymap.vim b/runtime/syntax/testdir/input/vim9_keymap.vim
new file mode 100644
index 0000000..a69b723
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim9_keymap.vim
@@ -0,0 +1,26 @@
+vim9script
+
+# Vim Keymap file for syntax testing
+
+scriptencoding utf-8
+
+let b:keymap_name = "syntax-test"
+
+loadkeymap
+
+# Line comment
+
+ # Another line comment
+
+a A Basic mapping
+'a á More than one char in first column
+
+# Special notation
+<char-62> B Special notation allowed in LHS - decimal
+c <char-0103> Special notation allowed in RHS - octal
+<char-0x0064> <char-0x0044> Special notation allowed in LHS and RHS - hexadecimal
+
+# Vim-script comment characters
+\# <char-0x00a3> Line should not match as a Vim9-script comment
+" “ Line should not match as a legacy-script comment
+: # Line should not match as a Vim9-script comment
diff --git a/runtime/syntax/testdir/input/vim9_legacy_header.vim b/runtime/syntax/testdir/input/vim9_legacy_header.vim
new file mode 100644
index 0000000..66aeb39
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim9_legacy_header.vim
@@ -0,0 +1,16 @@
+" comment
+
+if !has('vim9script')
+ # 42 " comment
+ source foo.vim
+ finish
+endif
+
+" comment
+
+vim9script noclear
+
+# comment
+
+ # string only recognised with leading char
+ "useless string"
diff --git a/runtime/syntax/testdir/input/vim_ex_commands.vim b/runtime/syntax/testdir/input/vim_ex_commands.vim
index 571fd7b..aaa351b 100644
--- a/runtime/syntax/testdir/input/vim_ex_commands.vim
+++ b/runtime/syntax/testdir/input/vim_ex_commands.vim
@@ -558,7 +558,7 @@
:verbose
:vertical
:vim9cmd
-:vim9script
+" :vim9script
:vimgrep
:vimgrepadd
:visual
@@ -1152,7 +1152,7 @@
call Foo() | verbose
call Foo() | vertical
call Foo() | vim9cmd
-call Foo() | vim9script
+" call Foo() | vim9script
call Foo() | vimgrep
call Foo() | vimgrepadd
call Foo() | visual
diff --git a/runtime/syntax/testdir/input/vim_ex_comment-vim9.vim b/runtime/syntax/testdir/input/vim_ex_comment-vim9.vim
new file mode 100644
index 0000000..786d11b
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_comment-vim9.vim
@@ -0,0 +1,41 @@
+vim9script
+
+# Vim comments
+
+# Vim9-script comment
+
+ # string only recognised with leading char
+ "useless string"
+
+function! Foo()
+ " Legacy-script comment
+ # 42 " comment
+endfunction
+
+def! Bar()
+ # Vim9-script comment
+ "useless string" # comment
+enddef
+
+command -count FooCommand {
+ # Vim9-script comment
+ "useless string" # comment
+}
+
+autocmd BufNewFile * {
+ # Vim9-script comment
+ "useless string" # comment
+}
+
+
+# Issue: #13047
+
+if !exists(":DiffOrig")
+ command DiffOrig vert new | set bt=nofile | r ++edit %% | 0d_ | diffthis
+ \ | wincmd p | diffthis
+endif
+
+
+# Issue: #11307 and #11560
+
+# This is what we call " blah
diff --git a/runtime/syntax/testdir/input/vim_ex_comment.vim b/runtime/syntax/testdir/input/vim_ex_comment.vim
new file mode 100644
index 0000000..54e514e
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim_ex_comment.vim
@@ -0,0 +1,45 @@
+" Vim comments
+
+" Legacy-script comment
+
+# 42 " comment
+
+function! Foo()
+ " Legacy-script comment
+ # 42 " comment
+endfunction
+
+def! Bar()
+ # Vim9-script comment
+ "useless string" # comment
+enddef
+
+command -nargs=1 FooCommand {
+ # Vim9-script comment
+ "useless string" # comment
+}
+
+autocmd BufNewFile * {
+ # Vim9-script comment
+ "useless string" # comment
+}
+
+
+" Issue: #13047
+
+if !exists(":DiffOrig")
+ command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis
+ \ | wincmd p | diffthis
+endif
+
+
+" Issue: #11307 and #11560
+
+" This is what we call " blah
+
+
+" Issue # #9587
+
+def CommentTitle()
+ # Title: ...
+enddef
diff --git a/runtime/syntax/testdir/input/vim_keymap.vim b/runtime/syntax/testdir/input/vim_keymap.vim
index 983c822..424d437 100644
--- a/runtime/syntax/testdir/input/vim_keymap.vim
+++ b/runtime/syntax/testdir/input/vim_keymap.vim
@@ -23,4 +23,5 @@
" Vim-script comment characters
# <char-0x00a3> Line should not match as a Vim9-script comment
-\" “ Line should not match as a legacy-script comment
+\" “ Line should not match as a legacy-script comment
+: " Line should not match as a legacy-script comment