runtime(vim): Update base-syntax, match tuples

Tuples were introduced in commit 9cb865e.  See PR #16776.

fixes: #16965
closes: #16935

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/syntax/testdir/input/vim9_lambda.vim b/runtime/syntax/testdir/input/vim9_lambda.vim
index 4340eb0..81d9dc2 100644
--- a/runtime/syntax/testdir/input/vim9_lambda.vim
+++ b/runtime/syntax/testdir/input/vim9_lambda.vim
@@ -1,4 +1,7 @@
 vim9script
+# VIM_TEST_SETUP hi link vim9LambdaOperator Todo
+# VIM_TEST_SETUP hi link vim9LambdaParen Todo
+
 
 # Vim 9 lambda expressions
 
@@ -6,6 +9,7 @@
 var expr = 0
 
 # without return type
+
 Foo = () => expr
 Foo = (_) => expr
 Foo = (x) => expr
@@ -26,6 +30,7 @@
 Foo = (x: number, y: number) => expr
 
 # with return type
+
 Foo = (): number => expr
 Foo = (_): number => expr
 Foo = (x): number => expr
@@ -45,6 +50,27 @@
 
 Foo = (x: number, y: number): number => expr
 
+# with compound return type
+
+Foo = (): list<number> => expr
+Foo = (_): list<number> => expr
+Foo = (x): list<number> => expr
+
+Foo = (...y): list<number> => expr
+Foo = (_, ...y): list<number> => expr
+Foo = (x, ...y): list<number> => expr
+
+Foo = (x, y): list<number> => expr
+
+Foo = (_: number): list<number> => expr
+Foo = (x: number): list<number> => expr
+
+Foo = (...y: list<number>): list<number> => expr
+Foo = (_: number, ...y: list<number>): list<number> => expr
+Foo = (x: number, ...y: list<number>): list<number> => expr
+
+Foo = (x: number, y: number): list<number> => expr
+
 
 # post operator comments
 
@@ -64,13 +90,27 @@
 
 Foo = (x: string,
       \ y: number,
+      \ z: bool) => expr
+
+Foo = (x: string,
+      \ y: number,
+      \ z: bool)
+      \ => expr
+
+Foo = (x: string,
+      \ y: number,
       \ z: bool): number => expr
-# FIXME
+
 Foo = (x: string,
       \ y: number,
       \ z: bool): number
       \ => expr
 
+Foo = (x: string,
+      \ y: number,
+      \ z: bool): 
+      \ number => expr
+
 
 # funcref call
 
@@ -114,3 +154,9 @@
 	(x: number, y: Digit): number => F(x, y.value)
 enddef ####################### ^ vimCommand?
 
+
+# Issue #16965 (vim syntax: wrong highlight with lambda, autoload, and false keyword)
+
+autocmd BufRead * timer_start(0, (_) => f#a(false, false))
+autocmd
+
diff --git a/runtime/syntax/testdir/input/vim9_tuple.vim b/runtime/syntax/testdir/input/vim9_tuple.vim
new file mode 100644
index 0000000..99370a5
--- /dev/null
+++ b/runtime/syntax/testdir/input/vim9_tuple.vim
@@ -0,0 +1,26 @@
+vim9script
+
+# Vim9 tuples
+
+
+# https://github.com/vim/vim/pull/16935#issuecomment-2738310273
+
+function LegacyMakeEntry(key, value) abort
+    return (a:key, a:value)
+endfunction
+
+def MakeEntry(key: string, value: any): tuple<string, any>
+    return (key, value)
+enddef
+
+function LegacyMakeLazyList(e1, e2) abort
+    return ({e1_, e2_ -> {-> [e1_, e2_]}}(a:e1, a:e2))
+endfunction
+
+def MakeLazyList(e1: any, e2: any): func(): list<any>
+    return (((e1_: any, e2_: any) => () => [e1_, e2_])(e1, e2))
+enddef
+
+echo MakeEntry('key', 'value') == list2tuple(MakeLazyList('key', 'value')())
+echo LegacyMakeEntry('key', 'value') == list2tuple(LegacyMakeLazyList('key', 'value')())
+
diff --git a/runtime/syntax/testdir/input/vim9_variables.vim b/runtime/syntax/testdir/input/vim9_variables.vim
index 14b1d1d..3521045 100644
--- a/runtime/syntax/testdir/input/vim9_variables.vim
+++ b/runtime/syntax/testdir/input/vim9_variables.vim
@@ -47,6 +47,24 @@
 ...
 END
 
+# Typed declarations
+
+var foo: tuple<any> = expr
+var foo: tuple<number> = expr
+var foo: tuple<number, string, bool> = expr
+var foo: tuple<...list<any>> = expr
+var foo: tuple<...list<number>> = expr
+var foo: tuple<number, ...list<string>> = expr
+
+var foo: tuple<
+      #\ comment
+      \number, 
+      #\ comment
+      \string, 
+      #\ comment
+      \bool
+      \>
+
 # Assignments
 
 foo = expr
diff --git a/runtime/syntax/testdir/input/vim_expr.vim b/runtime/syntax/testdir/input/vim_expr.vim
index 9786ff8..bb7366d 100644
--- a/runtime/syntax/testdir/input/vim_expr.vim
+++ b/runtime/syntax/testdir/input/vim_expr.vim
@@ -173,6 +173,21 @@
 " match as keys not scope dictionaries
 echo #{ b: 42, w: 42, t: 42, g: 42, l: 42, s: 42, a: 42, v: 42  }
 
+" Tuple
+
+echo ()
+echo (42,)
+echo ((11, 12), (21, 22), (31, 32))
+echo (1,
+      \ 2,
+      \ 3,
+      \ 4
+      \)
+echo (1, 'two', 1 + 2, "fo" .. "ur")
+
+echo foo + (42, 87)
+echo (42, 87) + foo
+
 " Register
 
 echo @" 
diff --git a/runtime/syntax/testdir/input/vim_lambda.vim b/runtime/syntax/testdir/input/vim_lambda.vim
index 73a221b..d08509c 100644
--- a/runtime/syntax/testdir/input/vim_lambda.vim
+++ b/runtime/syntax/testdir/input/vim_lambda.vim
@@ -1,4 +1,7 @@
 " Vim lambda expressions
+" VIM_TEST_SETUP hi link vimLambdaOperator Todo
+" VIM_TEST_SETUP hi link vimLambdaBrace    Todo
+" VIM_TEST_SETUP hi link vimFuncParam	   Identifier
 
 
 let expr = 42
@@ -56,12 +59,17 @@
       \ z -> expr}
 
 let Foo = {
+      "\ comment
       \ x,
+      "\ comment
       \ y,
+      "\ comment
       \ z
+      "\ comment
       \ ->
       "\ comment
       \ expr
+      "\ comment
       \ }
 
 let Foo = {-> [
@@ -94,6 +102,7 @@
       \ b: 83
       \}}}
 
+
 " :help lambda
 
 :let F = {arg1, arg2 -> arg1 - arg2}