mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
runtime(vim): Update base-syntax, improve variable matching
- Match variables after operators, including line continuations. - Match option variables without leading whitespace. - Explicitly match expression subscripts. - Match Vim9 variables in LHS of assignments and method calls. - Match option variables (&option) with a dedicated syntax group like environment variables. - Match list literals, fixes: #5830 - Match :{un}lockvar arguments. - Match registers and environment variables in :let unpack lists. - Match lambda expressions - Match Vim9 scope blocks - Match variables in :for subject - Highlight user variables with Normal - Improve this/super keyword matching, fixes: #15970 closes: #16476 Signed-off-by: Doug Kearns <dougkearns@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
54d7f18c38
commit
1aa287e048
1
runtime/syntax/testdir/input/setup/vim9_block.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim9_block.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim9_comment.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim9_comment.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim9_ex_commands.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim9_ex_commands.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim9_ex_for.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim9_ex_for.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
@@ -0,0 +1,2 @@
|
||||
highlight link vimVar Identifier
|
||||
highlight link vimFuncScope Special
|
@@ -0,0 +1,2 @@
|
||||
highlight link vimVar Identifier
|
||||
highlight link vimFuncScope Special
|
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim9_expr.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim9_expr.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim9_lambda.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim9_lambda.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim9_variables.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim9_variables.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim_comment.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim_comment.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim_ex_call.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim_ex_call.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim_ex_command.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim_ex_command.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim_ex_commands.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim_ex_commands.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
2
runtime/syntax/testdir/input/setup/vim_ex_def.vim
Normal file
2
runtime/syntax/testdir/input/setup/vim_ex_def.vim
Normal file
@@ -0,0 +1,2 @@
|
||||
highlight link vimVar Identifier
|
||||
highlight link vimFuncScope Special
|
2
runtime/syntax/testdir/input/setup/vim_ex_def_fold.vim
Normal file
2
runtime/syntax/testdir/input/setup/vim_ex_def_fold.vim
Normal file
@@ -0,0 +1,2 @@
|
||||
highlight link vimVar Identifier
|
||||
highlight link vimFuncScope Special
|
1
runtime/syntax/testdir/input/setup/vim_ex_def_nested.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim_ex_def_nested.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim_ex_echo.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim_ex_echo.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim_ex_execute.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim_ex_execute.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim_ex_for.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim_ex_for.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
2
runtime/syntax/testdir/input/setup/vim_ex_function.vim
Normal file
2
runtime/syntax/testdir/input/setup/vim_ex_function.vim
Normal file
@@ -0,0 +1,2 @@
|
||||
highlight link vimVar Identifier
|
||||
highlight link vimFuncScope Special
|
@@ -0,0 +1,2 @@
|
||||
highlight link vimVar Identifier
|
||||
highlight link vimFuncScope Special
|
@@ -0,0 +1,2 @@
|
||||
highlight link vimVar Identifier
|
||||
highlight link vimFuncScope Special
|
@@ -0,0 +1,2 @@
|
||||
highlight link vimVar Identifier
|
||||
highlight link vimFuncScope Special
|
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim_ex_loadkeymap.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim_ex_loadkeymap.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim_ex_map.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim_ex_map.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim_ex_match.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim_ex_match.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim_ex_menu.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim_ex_menu.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim_ex_substitute.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim_ex_substitute.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
2
runtime/syntax/testdir/input/setup/vim_ex_syntax.vim
Normal file
2
runtime/syntax/testdir/input/setup/vim_ex_syntax.vim
Normal file
@@ -0,0 +1,2 @@
|
||||
highlight link vimVar Identifier
|
||||
highlight link vimFuncScope Special
|
1
runtime/syntax/testdir/input/setup/vim_expr.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim_expr.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim_lambda.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim_lambda.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
1
runtime/syntax/testdir/input/setup/vim_variables.vim
Normal file
1
runtime/syntax/testdir/input/setup/vim_variables.vim
Normal file
@@ -0,0 +1 @@
|
||||
highlight link vimVar Identifier
|
33
runtime/syntax/testdir/input/vim9_block.vim
Normal file
33
runtime/syntax/testdir/input/vim9_block.vim
Normal file
@@ -0,0 +1,33 @@
|
||||
vim9script
|
||||
|
||||
# Vim9 blocks
|
||||
|
||||
|
||||
{
|
||||
var foo = 42
|
||||
}
|
||||
|
||||
{
|
||||
{
|
||||
{
|
||||
{
|
||||
var foo = 42
|
||||
}
|
||||
var foo = 42
|
||||
}
|
||||
var foo = 42
|
||||
}
|
||||
var foo = 42
|
||||
}
|
||||
|
||||
def Foo()
|
||||
{
|
||||
var foo = 42
|
||||
echo foo
|
||||
}
|
||||
enddef
|
||||
|
||||
echo "foo" | {
|
||||
var foo = 42
|
||||
}
|
||||
|
200
runtime/syntax/testdir/input/vim9_def_variables.vim
Normal file
200
runtime/syntax/testdir/input/vim9_def_variables.vim
Normal file
@@ -0,0 +1,200 @@
|
||||
vim9script
|
||||
|
||||
# Vim9 function variable highlighting
|
||||
|
||||
def Foo()
|
||||
# Declarations
|
||||
|
||||
var foo = expr
|
||||
|
||||
b:foo = expr
|
||||
g:foo = expr
|
||||
t:foo = expr
|
||||
w:foo = expr
|
||||
|
||||
v:foo = expr
|
||||
|
||||
$FOO = expr
|
||||
|
||||
var [foo, bar] = expr
|
||||
var [foo,
|
||||
\ bar] = expr
|
||||
var [$foo, $bar] = expr
|
||||
var [$foo,
|
||||
\ $bar] = expr
|
||||
|
||||
var [foo, bar; baz] = expr
|
||||
var [foo,
|
||||
\ bar;
|
||||
\ baz] = expr
|
||||
var [$foo, $bar; $baz] = expr
|
||||
var [$foo,
|
||||
\ $bar;
|
||||
\ $baz] = expr
|
||||
|
||||
var foo =<< END
|
||||
...
|
||||
END
|
||||
var foo =<< trim END
|
||||
...
|
||||
END
|
||||
var foo =<< eval END
|
||||
...
|
||||
END
|
||||
var foo =<< trim eval END
|
||||
...
|
||||
END
|
||||
var foo =<< eval trim END
|
||||
...
|
||||
END
|
||||
|
||||
# Assignments
|
||||
|
||||
foo = expr
|
||||
|
||||
foo[0] = expr
|
||||
|
||||
foo[1:2] = expr
|
||||
foo[:2] = expr
|
||||
foo[1:] = expr
|
||||
foo[:] = expr
|
||||
|
||||
foo += expr
|
||||
foo -= expr
|
||||
foo *= expr
|
||||
foo /= expr
|
||||
foo %= expr
|
||||
foo ..= expr
|
||||
|
||||
b:foo = expr
|
||||
g:foo = expr
|
||||
t:foo = expr
|
||||
w:foo = expr
|
||||
|
||||
b:foo += expr
|
||||
g:foo += expr
|
||||
t:foo += expr
|
||||
w:foo += expr
|
||||
|
||||
b:foo -= expr
|
||||
g:foo -= expr
|
||||
t:foo -= expr
|
||||
w:foo -= expr
|
||||
|
||||
b:foo *= expr
|
||||
g:foo *= expr
|
||||
t:foo *= expr
|
||||
w:foo *= expr
|
||||
|
||||
b:foo /= expr
|
||||
g:foo /= expr
|
||||
t:foo /= expr
|
||||
w:foo /= expr
|
||||
|
||||
b:foo %= expr
|
||||
g:foo %= expr
|
||||
t:foo %= expr
|
||||
w:foo %= expr
|
||||
|
||||
b:foo ..= expr
|
||||
g:foo ..= expr
|
||||
t:foo ..= expr
|
||||
w:foo ..= expr
|
||||
|
||||
$FOO = expr
|
||||
$FOO ..= expr
|
||||
|
||||
@f = expr
|
||||
@f ..= expr
|
||||
|
||||
&foo = expr
|
||||
|
||||
&t_k1 = "\<Esc>[234;"
|
||||
|
||||
&foo ..= expr
|
||||
|
||||
&foo += expr
|
||||
&foo -= expr
|
||||
|
||||
&l:foo = expr
|
||||
|
||||
&l:foo ..= expr
|
||||
&l:foo += expr
|
||||
&l:foo -= expr
|
||||
|
||||
&g:foo = expr
|
||||
|
||||
&g:foo ..= expr
|
||||
&g:foo += expr
|
||||
&g:foo -= expr
|
||||
|
||||
[foo, bar] = expr
|
||||
[foo,
|
||||
\ bar] = expr
|
||||
[v:foo, v:bar] = expr
|
||||
[v:foo,
|
||||
\ v:bar] = expr
|
||||
[&foo, &bar] = expr
|
||||
[&foo,
|
||||
\ &bar] = expr
|
||||
[$foo, $bar] = expr
|
||||
[$foo,
|
||||
\ $bar] = expr
|
||||
[@a, @b] = expr
|
||||
[@a,
|
||||
\ @a] = expr
|
||||
|
||||
[foo, bar] ..= expr
|
||||
[foo, bar] += expr
|
||||
[foo, bar] -= expr
|
||||
[foo, bar] *= expr
|
||||
[foo, bar] /= expr
|
||||
[foo, bar] %= expr
|
||||
|
||||
[foo, bar; baz] = expr
|
||||
[foo,
|
||||
\ bar;
|
||||
\ baz] = expr
|
||||
[v:foo, v:bar; v:baz] = expr
|
||||
[v:foo,
|
||||
\ v:bar;
|
||||
\ v:baz] = expr
|
||||
[$foo, $bar; $baz] = expr
|
||||
[$foo,
|
||||
\ $bar;
|
||||
\ $baz] = expr
|
||||
[&foo, &bar; &baz] = expr
|
||||
[&foo,
|
||||
\ &bar;
|
||||
\ &baz] = expr
|
||||
[@a, @b; @c] = expr
|
||||
[@a,
|
||||
\ @b;
|
||||
\ @c] = expr
|
||||
|
||||
foo =<< END
|
||||
...
|
||||
END
|
||||
foo =<< trim END
|
||||
...
|
||||
END
|
||||
foo =<< eval END
|
||||
...
|
||||
END
|
||||
foo =<< trim eval END
|
||||
...
|
||||
END
|
||||
foo =<< eval trim END
|
||||
...
|
||||
END
|
||||
|
||||
# :for
|
||||
|
||||
for foo in expr
|
||||
endfor
|
||||
|
||||
for [foo, bar] in expr
|
||||
endfor
|
||||
enddef
|
||||
|
||||
|
@@ -203,7 +203,7 @@ vim9script
|
||||
:folddoclosed
|
||||
:folddoopen
|
||||
:foldopen
|
||||
:for
|
||||
:for foo in bar | endfor
|
||||
:function
|
||||
:global/.../
|
||||
:goto
|
||||
@@ -785,7 +785,7 @@ Foo() | foldclose
|
||||
Foo() | folddoclosed
|
||||
Foo() | folddoopen
|
||||
Foo() | foldopen
|
||||
Foo() | for
|
||||
Foo() | for foo in bar | endfor
|
||||
Foo() | function
|
||||
Foo() | global/.../
|
||||
Foo() | goto
|
||||
|
68
runtime/syntax/testdir/input/vim9_ex_for.vim
Normal file
68
runtime/syntax/testdir/input/vim9_ex_for.vim
Normal file
@@ -0,0 +1,68 @@
|
||||
vim9script
|
||||
|
||||
# Vim9 :for command
|
||||
|
||||
|
||||
# :for {var} in {object}
|
||||
|
||||
var expr = [42]
|
||||
|
||||
for foo in expr
|
||||
echo foo
|
||||
endfor
|
||||
|
||||
for foo in expr # comment
|
||||
echo foo
|
||||
endfor
|
||||
|
||||
for foo in
|
||||
# comment
|
||||
expr
|
||||
echo foo
|
||||
endfor
|
||||
|
||||
for foo in expr | echo foo | endfor
|
||||
|
||||
for foo in [42]
|
||||
echo foo
|
||||
endfor
|
||||
|
||||
for foo in [42] | echo foo | endfor
|
||||
|
||||
for foo: number in [42] | echo foo | endfor
|
||||
|
||||
echo "foo" | for foo in expr
|
||||
echo foo
|
||||
endfor
|
||||
|
||||
|
||||
# :for [{var1}, {var2}, ...] in {listlist}
|
||||
|
||||
var expr2 = [[42, 83]]
|
||||
|
||||
for [foo, bar] in expr2
|
||||
echo foo bar
|
||||
endfor
|
||||
|
||||
for [foo, bar] in expr2 # comment
|
||||
echo foo bar
|
||||
endfor
|
||||
|
||||
for [foo, bar] in
|
||||
# comment
|
||||
expr2
|
||||
echo foo bar
|
||||
endfor
|
||||
|
||||
for [foo, bar] in expr2 | echo foo bar | endfor
|
||||
|
||||
for [foo, bar] in [[42, 83]]
|
||||
echo foo bar
|
||||
endfor
|
||||
|
||||
for [foo, bar] in [[42, 83]] | echo foo bar | endfor
|
||||
|
||||
for [foo: number, bar: number] in expr2
|
||||
echo foo bar
|
||||
endfor
|
||||
|
116
runtime/syntax/testdir/input/vim9_lambda.vim
Normal file
116
runtime/syntax/testdir/input/vim9_lambda.vim
Normal file
@@ -0,0 +1,116 @@
|
||||
vim9script
|
||||
|
||||
# Vim 9 lambda expressions
|
||||
|
||||
var Foo: func
|
||||
var expr = 0
|
||||
|
||||
# without return type
|
||||
Foo = () => expr
|
||||
Foo = (_) => expr
|
||||
Foo = (x) => expr
|
||||
|
||||
Foo = (...y) => expr
|
||||
Foo = (_, ...y) => expr
|
||||
Foo = (x, ...y) => expr
|
||||
|
||||
Foo = (x, y) => expr
|
||||
|
||||
Foo = (_: number) => expr
|
||||
Foo = (x: number) => expr
|
||||
|
||||
Foo = (...y: list<number>) => expr
|
||||
Foo = (_: number, ...y: list<number>) => expr
|
||||
Foo = (x: number, ...y: list<number>) => expr
|
||||
|
||||
Foo = (x: number, y: number) => expr
|
||||
|
||||
# with return type
|
||||
Foo = (): number => expr
|
||||
Foo = (_): number => expr
|
||||
Foo = (x): number => expr
|
||||
|
||||
Foo = (...y): number => expr
|
||||
Foo = (_, ...y): number => expr
|
||||
Foo = (x, ...y): number => expr
|
||||
|
||||
Foo = (x, y): number => expr
|
||||
|
||||
Foo = (_: number): number => expr
|
||||
Foo = (x: number): number => expr
|
||||
|
||||
Foo = (...y: list<number>): number => expr
|
||||
Foo = (_: number, ...y: list<number>): number => expr
|
||||
Foo = (x: number, ...y: list<number>): number => expr
|
||||
|
||||
Foo = (x: number, y: number): number => expr
|
||||
|
||||
|
||||
# post operator comments
|
||||
|
||||
Foo = () => # comment
|
||||
expr
|
||||
Foo = () =>
|
||||
# comment
|
||||
expr
|
||||
Foo = () =>
|
||||
|
||||
# comment
|
||||
|
||||
expr
|
||||
|
||||
|
||||
# line continuations
|
||||
|
||||
Foo = (x: string,
|
||||
\ y: number,
|
||||
\ z: bool): number => expr
|
||||
# FIXME
|
||||
Foo = (x: string,
|
||||
\ y: number,
|
||||
\ z: bool): number
|
||||
\ => expr
|
||||
|
||||
|
||||
# funcref call
|
||||
|
||||
echo (() => 42)()
|
||||
echo ((x: string): number => 42)("foo")
|
||||
|
||||
|
||||
# :help vim9-lambda
|
||||
|
||||
var list = [1, 2, 3]
|
||||
echo filter(list, (k, v) =>
|
||||
v > 0)
|
||||
echo filter(list, (k,
|
||||
\ v)
|
||||
\ => v > 0)
|
||||
|
||||
var Callback = (..._) => 'anything'
|
||||
echo Callback(1, 2, 3) # displays "anything"
|
||||
|
||||
var Lambda = (arg) => {
|
||||
g:was_called = 'yes'
|
||||
return expr
|
||||
}
|
||||
|
||||
var count = 0
|
||||
var timer = timer_start(500, (_) => {
|
||||
count += 1
|
||||
echom 'Handler called ' .. count
|
||||
}, {repeat: 3})
|
||||
|
||||
var dict = {}
|
||||
var d = mapnew(dict, (k, v): string => {
|
||||
return 'value'
|
||||
})
|
||||
|
||||
|
||||
# Issue #15970 (vim9: Restore and extend the recognition of Enum body items)
|
||||
|
||||
def Op(): func(func(number, number): number): func(number, Digit): number
|
||||
return (F: func(number, number): number) =>
|
||||
(x: number, y: Digit): number => F(x, y.value)
|
||||
enddef ####################### ^ vimCommand?
|
||||
|
87
runtime/syntax/testdir/input/vim9_super_this_keywords.vim
Normal file
87
runtime/syntax/testdir/input/vim9_super_this_keywords.vim
Normal file
@@ -0,0 +1,87 @@
|
||||
vim9script
|
||||
|
||||
# Vim9 this and super keywords
|
||||
# VIM_TEST_SETUP hi link vim9This Todo
|
||||
# VIM_TEST_SETUP hi link vim9Super Todo
|
||||
|
||||
def Echo(...args: list<any>)
|
||||
echo args
|
||||
enddef
|
||||
|
||||
class Foo
|
||||
var x: number = 42
|
||||
var y: number = this.x + 41
|
||||
var z: number = this.x + this.y
|
||||
|
||||
def new()
|
||||
echo this.x this.y this.z
|
||||
enddef
|
||||
|
||||
def newXY(this.x, this.y, this.z)
|
||||
enddef
|
||||
|
||||
def Def1(arg = this.x)
|
||||
this.y = arg
|
||||
this.z += arg
|
||||
enddef
|
||||
|
||||
def Def2(arg = (this.x + this.y + this.z))
|
||||
Echo(this, this.x, this.y, this.z)
|
||||
this->Echo(this.x, this.y, this.z)
|
||||
enddef
|
||||
|
||||
def Def3(): Foo
|
||||
return this
|
||||
enddef
|
||||
|
||||
def Def4(arg: Foo = this): Foo
|
||||
return arg
|
||||
enddef
|
||||
endclass
|
||||
|
||||
class Bar extends Foo
|
||||
def Def1()
|
||||
super.Def1()
|
||||
enddef
|
||||
|
||||
def Def2()
|
||||
var a = super.x * super.y * super.z
|
||||
var b = [super.x, super.y, super.z]
|
||||
var c = {super: super.x, this: super.y, true: super.z}
|
||||
var d = {super: c, this: c}
|
||||
echo c.super
|
||||
echo c.this
|
||||
echo d.super.this
|
||||
echo d.this.super
|
||||
echo a b c
|
||||
enddef
|
||||
|
||||
def Def5()
|
||||
var a = this.x * this.y
|
||||
var b = (this.x * this.y)
|
||||
var c = [this.x, this.y]
|
||||
var d = {super: this.x, this: this.y}
|
||||
echo a b c d
|
||||
enddef
|
||||
|
||||
def Def6()
|
||||
var x = this#super#x
|
||||
var y = super#this#y
|
||||
this#super#Func()
|
||||
super#this#Func()
|
||||
enddef
|
||||
|
||||
def Def7(arg = super.Def3())
|
||||
echo arg
|
||||
enddef
|
||||
|
||||
def Def8(): number
|
||||
var F = () => this.x
|
||||
var G = () => super.x
|
||||
return F() + G()
|
||||
enddef
|
||||
endclass
|
||||
|
||||
defcompile Foo
|
||||
defcompile Bar
|
||||
|
63
runtime/syntax/testdir/input/vim9_super_this_keywords2.vim
Normal file
63
runtime/syntax/testdir/input/vim9_super_this_keywords2.vim
Normal file
@@ -0,0 +1,63 @@
|
||||
vim9script
|
||||
|
||||
# VIM_TEST_SETUP hi link vim9Super Todo
|
||||
# VIM_TEST_SETUP hi link vim9This Todo
|
||||
# See: https://github.com/vim/vim/pull/16476#issuecomment-2638191110
|
||||
|
||||
|
||||
class A
|
||||
var _value: any
|
||||
|
||||
def new(value: any)
|
||||
this._BaseInit(value)
|
||||
enddef
|
||||
|
||||
def _BaseInit(value: any)
|
||||
this._value = value
|
||||
enddef
|
||||
|
||||
def Value(): any
|
||||
return this._value
|
||||
enddef
|
||||
endclass
|
||||
|
||||
class B extends A
|
||||
def new(value: number)
|
||||
super._BaseInit(value)
|
||||
enddef
|
||||
|
||||
def Value(): number
|
||||
echo this
|
||||
return super._value
|
||||
enddef
|
||||
endclass
|
||||
|
||||
class C extends A
|
||||
#### E117
|
||||
# def new(value: string)
|
||||
# super(value)
|
||||
# enddef
|
||||
|
||||
#### E1034
|
||||
# def new(super._value)
|
||||
# enddef
|
||||
|
||||
#### E1034
|
||||
# def new(value: string)
|
||||
# super._value = value
|
||||
# enddef
|
||||
|
||||
#### E1356
|
||||
# def Super(): A
|
||||
# return super
|
||||
# enddef
|
||||
|
||||
def This(): C
|
||||
return this
|
||||
enddef
|
||||
endclass
|
||||
|
||||
echo 1 == A.new(1).Value()
|
||||
echo 2 == B.new(2).Value()
|
||||
defcompile C
|
||||
|
27
runtime/syntax/testdir/input/vim9_super_this_keywords3.vim
Normal file
27
runtime/syntax/testdir/input/vim9_super_this_keywords3.vim
Normal file
@@ -0,0 +1,27 @@
|
||||
vim9script
|
||||
|
||||
# VIM_TEST_SETUP hi link vim9Super Todo
|
||||
# VIM_TEST_SETUP hi link vim9This Todo
|
||||
# See: https://github.com/vim/vim/pull/16476#issuecomment-2635119478
|
||||
|
||||
|
||||
class A
|
||||
const _value: number
|
||||
|
||||
def new(this._value)
|
||||
enddef
|
||||
|
||||
def K(): func(any): number
|
||||
return ((_: any) => this._value)
|
||||
enddef
|
||||
endclass
|
||||
|
||||
class B extends A
|
||||
def K(): func(any): number
|
||||
return ((_: any) => super._value)
|
||||
enddef
|
||||
endclass
|
||||
|
||||
echo 1 == A.new(1).K()(null)
|
||||
echo 2 == B.new(2).K()(null)
|
||||
|
197
runtime/syntax/testdir/input/vim9_variables.vim
Normal file
197
runtime/syntax/testdir/input/vim9_variables.vim
Normal file
@@ -0,0 +1,197 @@
|
||||
vim9script
|
||||
|
||||
# Vim9 variable highlighting
|
||||
|
||||
# Declarations
|
||||
|
||||
var foo = expr
|
||||
|
||||
b:foo = expr
|
||||
g:foo = expr
|
||||
t:foo = expr
|
||||
w:foo = expr
|
||||
|
||||
v:foo = expr
|
||||
|
||||
$FOO = expr
|
||||
|
||||
var [foo, bar] = expr
|
||||
var [foo,
|
||||
\ bar] = expr
|
||||
var [$foo, $bar] = expr
|
||||
var [$foo,
|
||||
\ $bar] = expr
|
||||
|
||||
var [foo, bar; baz] = expr
|
||||
var [foo,
|
||||
\ bar;
|
||||
\ baz] = expr
|
||||
var [$foo, $bar; $baz] = expr
|
||||
var [$foo,
|
||||
\ $bar;
|
||||
\ $baz] = expr
|
||||
|
||||
var foo =<< END
|
||||
...
|
||||
END
|
||||
var foo =<< trim END
|
||||
...
|
||||
END
|
||||
var foo =<< eval END
|
||||
...
|
||||
END
|
||||
var foo =<< trim eval END
|
||||
...
|
||||
END
|
||||
var foo =<< eval trim END
|
||||
...
|
||||
END
|
||||
|
||||
# Assignments
|
||||
|
||||
foo = expr
|
||||
|
||||
foo[0] = expr
|
||||
|
||||
foo[1:2] = expr
|
||||
foo[:2] = expr
|
||||
foo[1:] = expr
|
||||
foo[:] = expr
|
||||
|
||||
foo += expr
|
||||
foo -= expr
|
||||
foo *= expr
|
||||
foo /= expr
|
||||
foo %= expr
|
||||
foo ..= expr
|
||||
|
||||
b:foo = expr
|
||||
g:foo = expr
|
||||
t:foo = expr
|
||||
w:foo = expr
|
||||
|
||||
b:foo += expr
|
||||
g:foo += expr
|
||||
t:foo += expr
|
||||
w:foo += expr
|
||||
|
||||
b:foo -= expr
|
||||
g:foo -= expr
|
||||
t:foo -= expr
|
||||
w:foo -= expr
|
||||
|
||||
b:foo *= expr
|
||||
g:foo *= expr
|
||||
t:foo *= expr
|
||||
w:foo *= expr
|
||||
|
||||
b:foo /= expr
|
||||
g:foo /= expr
|
||||
t:foo /= expr
|
||||
w:foo /= expr
|
||||
|
||||
b:foo %= expr
|
||||
g:foo %= expr
|
||||
t:foo %= expr
|
||||
w:foo %= expr
|
||||
|
||||
b:foo ..= expr
|
||||
g:foo ..= expr
|
||||
t:foo ..= expr
|
||||
w:foo ..= expr
|
||||
|
||||
$FOO = expr
|
||||
$FOO ..= expr
|
||||
|
||||
@f = expr
|
||||
@f ..= expr
|
||||
|
||||
&foo = expr
|
||||
|
||||
&t_k1 = "\<Esc>[234;"
|
||||
|
||||
&foo ..= expr
|
||||
|
||||
&foo += expr
|
||||
&foo -= expr
|
||||
|
||||
&l:foo = expr
|
||||
|
||||
&l:foo ..= expr
|
||||
&l:foo += expr
|
||||
&l:foo -= expr
|
||||
|
||||
&g:foo = expr
|
||||
|
||||
&g:foo ..= expr
|
||||
&g:foo += expr
|
||||
&g:foo -= expr
|
||||
|
||||
[foo, bar] = expr
|
||||
[foo,
|
||||
\ bar] = expr
|
||||
[v:foo, v:bar] = expr
|
||||
[v:foo,
|
||||
\ v:bar] = expr
|
||||
[&foo, &bar] = expr
|
||||
[&foo,
|
||||
\ &bar] = expr
|
||||
[$foo, $bar] = expr
|
||||
[$foo,
|
||||
\ $bar] = expr
|
||||
[@a, @b] = expr
|
||||
[@a,
|
||||
\ @a] = expr
|
||||
|
||||
[foo, bar] ..= expr
|
||||
[foo, bar] += expr
|
||||
[foo, bar] -= expr
|
||||
[foo, bar] *= expr
|
||||
[foo, bar] /= expr
|
||||
[foo, bar] %= expr
|
||||
|
||||
[foo, bar; baz] = expr
|
||||
[foo,
|
||||
\ bar;
|
||||
\ baz] = expr
|
||||
[v:foo, v:bar; v:baz] = expr
|
||||
[v:foo,
|
||||
\ v:bar;
|
||||
\ v:baz] = expr
|
||||
[$foo, $bar; $baz] = expr
|
||||
[$foo,
|
||||
\ $bar;
|
||||
\ $baz] = expr
|
||||
[&foo, &bar; &baz] = expr
|
||||
[&foo,
|
||||
\ &bar;
|
||||
\ &baz] = expr
|
||||
[@a, @b; @c] = expr
|
||||
[@a,
|
||||
\ @b;
|
||||
\ @c] = expr
|
||||
|
||||
foo =<< END
|
||||
...
|
||||
END
|
||||
foo =<< trim END
|
||||
...
|
||||
END
|
||||
foo =<< eval END
|
||||
...
|
||||
END
|
||||
foo =<< trim eval END
|
||||
...
|
||||
END
|
||||
foo =<< eval trim END
|
||||
...
|
||||
END
|
||||
|
||||
# :for
|
||||
|
||||
for foo in expr
|
||||
endfor
|
||||
|
||||
for [foo, bar] in expr
|
||||
endfor
|
||||
|
@@ -198,7 +198,7 @@
|
||||
:folddoopen
|
||||
:folddoclosed
|
||||
:foldopen
|
||||
:for
|
||||
:for foo in bar | endfor
|
||||
:function
|
||||
:global/.../
|
||||
:goto
|
||||
@@ -783,7 +783,7 @@ call Foo() | foldclose
|
||||
call Foo() | folddoopen
|
||||
call Foo() | folddoclosed
|
||||
call Foo() | foldopen
|
||||
call Foo() | for
|
||||
call Foo() | for foo in bar | endfor
|
||||
call Foo() | function
|
||||
call Foo() | global/.../
|
||||
call Foo() | goto
|
||||
|
@@ -1,5 +1,6 @@
|
||||
vim9script
|
||||
# Vim9 :def command (nested)
|
||||
# VIM_TEST_SETUP hi link vim9This Todo
|
||||
|
||||
class Test
|
||||
const name: string
|
||||
|
@@ -1,7 +1,9 @@
|
||||
vim9script
|
||||
|
||||
# Vim9 :def command (nested)
|
||||
# VIM_TEST_SETUP let g:vimsyn_folding = 'f'
|
||||
# VIM_TEST_SETUP setl fdc=2 fdm=syntax
|
||||
# VIM_TEST_SETUP hi link vim9This Todo
|
||||
|
||||
class Test
|
||||
const name: string
|
||||
|
60
runtime/syntax/testdir/input/vim_ex_for.vim
Normal file
60
runtime/syntax/testdir/input/vim_ex_for.vim
Normal file
@@ -0,0 +1,60 @@
|
||||
" Vim :for command
|
||||
|
||||
|
||||
" :for {var} in {object}
|
||||
|
||||
let expr = [42]
|
||||
|
||||
for foo in expr
|
||||
echo foo
|
||||
endfor
|
||||
|
||||
for foo in expr " comment
|
||||
echo foo
|
||||
endfor
|
||||
|
||||
for foo in
|
||||
"\ comment
|
||||
\ expr
|
||||
echo foo
|
||||
endfor
|
||||
|
||||
for foo in expr | echo foo | endfor
|
||||
|
||||
for foo in [42]
|
||||
echo foo
|
||||
endfor
|
||||
|
||||
for foo in [42] | echo foo | endfor
|
||||
|
||||
echo "foo" | for foo in expr
|
||||
echo foo
|
||||
endfor
|
||||
|
||||
|
||||
" :for [{var1}, {var2}, ...] in {listlist}
|
||||
|
||||
let expr = [[42, 83]]
|
||||
|
||||
for [foo, bar] in expr
|
||||
echo foo bar
|
||||
endfor
|
||||
|
||||
for [foo, bar] in expr " comment
|
||||
echo foo bar
|
||||
endfor
|
||||
|
||||
for [foo, bar] in
|
||||
"\ comment
|
||||
\ expr
|
||||
echo foo bar
|
||||
endfor
|
||||
|
||||
for [foo, bar] in expr | echo foo bar | endfor
|
||||
|
||||
for [foo, bar] in [[42, 83]]
|
||||
echo foo bar
|
||||
endfor
|
||||
|
||||
for [foo, bar] in [[42, 83]] | echo foo bar | endfor
|
||||
|
@@ -85,6 +85,21 @@ echo 0zFF00ED015DAF
|
||||
echo 0zFF00.ED01.5DAF
|
||||
echo 0zFF.00.ED.01.5D.AF
|
||||
|
||||
" List
|
||||
|
||||
echo []
|
||||
echo [42]
|
||||
echo [[11, 12], [21, 22], [31, 32]]
|
||||
echo [1,
|
||||
\ 2,
|
||||
\ 3,
|
||||
\ 4
|
||||
\]
|
||||
echo [1, 'two', 1 + 2, "fo" .. "ur"]
|
||||
|
||||
" Issue #5830 (Incorrect syntax highlighting in Vim script when omitting space in list of string)
|
||||
let l = ['a','b','c']
|
||||
|
||||
" Operators
|
||||
|
||||
" Ternary
|
||||
@@ -169,9 +184,26 @@ echo expr !~? expr
|
||||
echo expr is? expr
|
||||
echo expr isnot? expr
|
||||
|
||||
" Unreported issue (incorrectly matches as "echo vimNumber *vimCommand* vimNumber")
|
||||
" Unreported issue ("is" incorrectly matches as "echo vimNumber *vimCommand* vimNumber")
|
||||
echo 42 is 42
|
||||
|
||||
" Line continuation
|
||||
let foo = foo +
|
||||
\
|
||||
"\ comment
|
||||
\
|
||||
"\ comment
|
||||
\ bar +
|
||||
\ "baz"
|
||||
|
||||
let foo = foo +
|
||||
"\ comment
|
||||
\
|
||||
"\ comment
|
||||
\
|
||||
\ bar +
|
||||
\ "baz"
|
||||
|
||||
|
||||
" Issue #16221 (vimString becomes vimVar when preceded by !)
|
||||
let bar = !'g:bar'->exists()
|
||||
|
384
runtime/syntax/testdir/input/vim_function_variables.vim
Normal file
384
runtime/syntax/testdir/input/vim_function_variables.vim
Normal file
@@ -0,0 +1,384 @@
|
||||
" Vim function variable highlighting
|
||||
|
||||
function Foo()
|
||||
" :let
|
||||
|
||||
let foo = expr
|
||||
|
||||
let foo[0] = expr
|
||||
|
||||
let foo[1:2] = expr
|
||||
let foo[:2] = expr
|
||||
let foo[1:] = expr
|
||||
let foo[:] = expr
|
||||
|
||||
let foo["key"] = expr
|
||||
let foo['key'] = expr
|
||||
|
||||
let foo += expr
|
||||
let foo -= expr
|
||||
let foo *= expr
|
||||
let foo /= expr
|
||||
let foo %= expr
|
||||
let foo .= expr
|
||||
let foo ..= expr
|
||||
|
||||
let b:foo = expr
|
||||
|
||||
let b:foo[0] = expr
|
||||
|
||||
let b:foo[1:2] = expr
|
||||
let b:foo[:2] = expr
|
||||
let b:foo[1:] = expr
|
||||
let b:foo[:] = expr
|
||||
|
||||
let bfoo["key"] = expr
|
||||
let bfoo['key'] = expr
|
||||
|
||||
let b:foo += expr
|
||||
let b:foo -= expr
|
||||
let b:foo *= expr
|
||||
let b:foo /= expr
|
||||
let b:foo %= expr
|
||||
let b:foo .= expr
|
||||
let b:foo ..= expr
|
||||
|
||||
let g:foo = expr
|
||||
|
||||
let g:foo[0] = expr
|
||||
|
||||
let g:foo[1:2] = expr
|
||||
let g:foo[:2] = expr
|
||||
let g:foo[1:] = expr
|
||||
let g:foo[:] = expr
|
||||
|
||||
let g:foo["key"] = expr
|
||||
let g:foo['key'] = expr
|
||||
|
||||
let g:foo += expr
|
||||
let g:foo -= expr
|
||||
let g:foo *= expr
|
||||
let g:foo /= expr
|
||||
let g:foo %= expr
|
||||
let g:foo .= expr
|
||||
let g:foo ..= expr
|
||||
|
||||
let s:foo = expr
|
||||
|
||||
let s:foo[0] = expr
|
||||
|
||||
let s:foo[1:2] = expr
|
||||
let s:foo[:2] = expr
|
||||
let s:foo[1:] = expr
|
||||
let s:foo[:] = expr
|
||||
|
||||
let s:foo["key"] = expr
|
||||
let s:foo['key'] = expr
|
||||
|
||||
let s:foo += expr
|
||||
let s:foo -= expr
|
||||
let s:foo *= expr
|
||||
let s:foo /= expr
|
||||
let s:foo %= expr
|
||||
let s:foo .= expr
|
||||
let s:foo ..= expr
|
||||
|
||||
let t:foo = expr
|
||||
|
||||
let t:foo[0] = expr
|
||||
|
||||
let t:foo[1:2] = expr
|
||||
let t:foo[:2] = expr
|
||||
let t:foo[1:] = expr
|
||||
let t:foo[:] = expr
|
||||
|
||||
let t:foo["key"] = expr
|
||||
let t:foo['key'] = expr
|
||||
|
||||
let t:foo += expr
|
||||
let t:foo -= expr
|
||||
let t:foo *= expr
|
||||
let t:foo /= expr
|
||||
let t:foo %= expr
|
||||
let t:foo .= expr
|
||||
let t:foo ..= expr
|
||||
|
||||
let v:foo = expr
|
||||
|
||||
let v:foo[0] = expr
|
||||
|
||||
let v:foo[1:2] = expr
|
||||
let v:foo[:2] = expr
|
||||
let v:foo[1:] = expr
|
||||
let v:foo[:] = expr
|
||||
|
||||
let v:foo["key"] = expr
|
||||
let v:foo['key'] = expr
|
||||
|
||||
let v:foo += expr
|
||||
let v:foo -= expr
|
||||
let v:foo *= expr
|
||||
let v:foo /= expr
|
||||
let v:foo %= expr
|
||||
let v:foo .= expr
|
||||
let v:foo ..= expr
|
||||
|
||||
let w:foo = expr
|
||||
|
||||
let w:foo[0] = expr
|
||||
|
||||
let w:foo[1:2] = expr
|
||||
let w:foo[:2] = expr
|
||||
let w:foo[1:] = expr
|
||||
let w:foo[:] = expr
|
||||
|
||||
let w:foo["key"] = expr
|
||||
let w:foo['key'] = expr
|
||||
|
||||
let w:foo += expr
|
||||
let w:foo -= expr
|
||||
let w:foo *= expr
|
||||
let w:foo /= expr
|
||||
let w:foo %= expr
|
||||
let w:foo .= expr
|
||||
let w:foo ..= expr
|
||||
|
||||
let $FOO = expr
|
||||
let $FOO .= expr
|
||||
let $FOO ..= expr
|
||||
|
||||
let @f = expr
|
||||
let @f .= expr
|
||||
let @f ..= expr
|
||||
|
||||
let &foo = expr
|
||||
|
||||
let &t_k1 = "\<Esc>[234;"
|
||||
|
||||
let &foo .= expr
|
||||
let &foo ..= expr
|
||||
let &foo += expr
|
||||
let &foo -= expr
|
||||
|
||||
let &l:foo = expr
|
||||
|
||||
let &l:foo .= expr
|
||||
let &l:foo ..= expr
|
||||
let &l:foo += expr
|
||||
let &l:foo -= expr
|
||||
|
||||
let &g:foo = expr
|
||||
|
||||
let &g:foo .= expr
|
||||
let &g:foo ..= expr
|
||||
let &g:foo += expr
|
||||
let &g:foo -= expr
|
||||
|
||||
let [foo, bar] = expr
|
||||
let [foo,
|
||||
\ bar] = expr
|
||||
let [v:foo, v:bar] = expr
|
||||
let [v:foo,
|
||||
\ v:bar] = expr
|
||||
let [&foo, &bar] = expr
|
||||
let [&foo,
|
||||
\ &bar] = expr
|
||||
let [$foo, $bar] = expr
|
||||
let [$foo,
|
||||
\ $bar] = expr
|
||||
let [@a, @b] = expr
|
||||
let [@a,
|
||||
\ @b] = expr
|
||||
|
||||
let [foo, bar] .= expr
|
||||
let [foo, bar] ..= expr
|
||||
let [foo, bar] += expr
|
||||
let [foo, bar] -= expr
|
||||
|
||||
let [foo, bar; baz] = expr
|
||||
let [foo,
|
||||
\ bar;
|
||||
\ baz] = expr
|
||||
let [v:foo, v:bar; v:baz] = expr
|
||||
let [v:foo,
|
||||
\ v:bar;
|
||||
\ v:baz] = expr
|
||||
let [$foo, $bar; $baz] = expr
|
||||
let [$foo,
|
||||
\ $bar;
|
||||
\ $baz] = expr
|
||||
let [&foo, &bar; &baz] = expr
|
||||
let [&foo,
|
||||
\ &bar;
|
||||
\ &baz] = expr
|
||||
let [@a, @b; @c] = expr
|
||||
let [@a,
|
||||
\ @b;
|
||||
\ @c] = expr
|
||||
|
||||
let foo =<< END
|
||||
...
|
||||
END
|
||||
let foo =<< trim END
|
||||
...
|
||||
END
|
||||
let foo =<< eval END
|
||||
...
|
||||
END
|
||||
let foo =<< trim eval END
|
||||
...
|
||||
END
|
||||
let foo =<< eval trim END
|
||||
...
|
||||
END
|
||||
|
||||
" :let list values
|
||||
|
||||
let foo
|
||||
let foo bar
|
||||
let foo
|
||||
"\ comment
|
||||
\ bar
|
||||
|
||||
let foo " comment
|
||||
let foo "\ comment
|
||||
let foo | echo "Foo"
|
||||
let foo bar " comment
|
||||
let foo bar | echo "Foo"
|
||||
let foo bar "\ comment
|
||||
|
||||
" :unlet
|
||||
|
||||
unlet foo
|
||||
unlet foo bar
|
||||
unlet foo
|
||||
"\ comment
|
||||
\ bar
|
||||
|
||||
unlet! foo
|
||||
unlet! foo bar
|
||||
unlet! foo
|
||||
"\ comment
|
||||
\ bar
|
||||
|
||||
unlet $FOO
|
||||
unlet! $FOO
|
||||
|
||||
unlet list[3]
|
||||
unlet list[3:]
|
||||
unlet dict['two']
|
||||
unlet dict.two
|
||||
|
||||
unlet foo " comment
|
||||
unlet foo "\ comment
|
||||
unlet foo | echo "Foo"
|
||||
unlet foo bar " comment
|
||||
unlet foo bar "\ comment
|
||||
unlet foo bar | echo "Foo"
|
||||
|
||||
" :const
|
||||
|
||||
const foo = expr
|
||||
|
||||
const [foo, bar] = expr
|
||||
|
||||
const [foo, bar; baz] = expr
|
||||
|
||||
const foo =<< END
|
||||
...
|
||||
END
|
||||
const foo =<< trim END
|
||||
...
|
||||
END
|
||||
const foo =<< eval END
|
||||
...
|
||||
END
|
||||
const foo =<< trim eval END
|
||||
...
|
||||
END
|
||||
const foo =<< eval trim END
|
||||
...
|
||||
END
|
||||
|
||||
const foo
|
||||
const foo bar
|
||||
|
||||
" :for
|
||||
|
||||
for foo in expr
|
||||
endfor
|
||||
|
||||
for [foo, bar] in expr
|
||||
endfor
|
||||
|
||||
" :lockvar
|
||||
|
||||
lockvar foo
|
||||
lockvar foo bar
|
||||
lockvar foo
|
||||
"\ comment
|
||||
\ bar
|
||||
|
||||
lockvar foo " comment
|
||||
lockvar foo | echo "Foo"
|
||||
lockvar foo bar " comment
|
||||
lockvar foo bar | echo "Foo"
|
||||
|
||||
lockvar! foo
|
||||
lockvar! foo bar
|
||||
lockvar! foo
|
||||
"\ comment
|
||||
\ bar
|
||||
|
||||
lockvar! foo " comment
|
||||
lockvar! foo | echo "Foo"
|
||||
lockvar! foo bar " comment
|
||||
lockvar! foo bar | echo "Foo"
|
||||
|
||||
lockvar 2 foo
|
||||
lockvar 2 foo bar
|
||||
lockvar 2 foo
|
||||
"\ comment
|
||||
\ bar
|
||||
|
||||
lockvar 2 foo " comment
|
||||
lockvar 2 foo | echo "Foo"
|
||||
lockvar 2 foo bar " comment
|
||||
lockvar 2 foo bar | echo "Foo"
|
||||
|
||||
" :unlockvar
|
||||
|
||||
unlockvar foo
|
||||
unlockvar foo bar
|
||||
unlockvar foo
|
||||
"\ comment
|
||||
\ bar
|
||||
|
||||
unlockvar foo " comment
|
||||
unlockvar foo | echo "Foo"
|
||||
unlockvar foo bar " comment
|
||||
unlockvar foo bar | echo "Foo"
|
||||
|
||||
unlockvar! foo
|
||||
unlockvar! foo bar
|
||||
unlockvar! foo
|
||||
"\ comment
|
||||
\ bar
|
||||
|
||||
unlockvar! foo " comment
|
||||
unlockvar! foo | echo "Foo"
|
||||
unlockvar! foo bar " comment
|
||||
unlockvar! foo bar | echo "Foo"
|
||||
|
||||
unlockvar 2 foo
|
||||
unlockvar 2 foo bar
|
||||
unlockvar 2 foo
|
||||
"\ comment
|
||||
\ bar
|
||||
|
||||
unlockvar 2 foo " comment
|
||||
unlockvar 2 foo | echo "Foo"
|
||||
unlockvar 2 foo bar " comment
|
||||
unlockvar 2 foo bar | echo "Foo"
|
||||
endfunction
|
||||
|
120
runtime/syntax/testdir/input/vim_lambda.vim
Normal file
120
runtime/syntax/testdir/input/vim_lambda.vim
Normal file
@@ -0,0 +1,120 @@
|
||||
" Vim lambda expressions
|
||||
|
||||
|
||||
let expr = 42
|
||||
|
||||
let Foo = {-> expr}
|
||||
let Foo = {_ -> expr}
|
||||
let Foo = {... -> expr}
|
||||
let Foo = {x -> expr}
|
||||
let Foo = {x, _ -> expr}
|
||||
let Foo = {x, ... -> expr}
|
||||
let Foo = {x, y -> expr}
|
||||
|
||||
|
||||
" line continuations
|
||||
|
||||
let Foo = {->
|
||||
"\ comment
|
||||
\ expr
|
||||
\ }
|
||||
let Foo = {_ ->
|
||||
"\ comment
|
||||
\ expr
|
||||
\ }
|
||||
let Foo = {... ->
|
||||
"\ comment
|
||||
\ expr
|
||||
\ }
|
||||
let Foo = {x ->
|
||||
\ expr
|
||||
"\ comment
|
||||
\ }
|
||||
let Foo = {x, y ->
|
||||
"\ comment
|
||||
\ expr
|
||||
\ }
|
||||
|
||||
let Foo = {
|
||||
\ ->
|
||||
"\ comment
|
||||
\ expr
|
||||
\ }
|
||||
let Foo = {x
|
||||
\ ->
|
||||
"\ comment
|
||||
\ expr
|
||||
\ }
|
||||
let Foo = {x, y
|
||||
\ ->
|
||||
"\ comment
|
||||
\ expr
|
||||
\ }
|
||||
|
||||
let Foo = {x,
|
||||
\ y,
|
||||
\ z -> expr}
|
||||
|
||||
let Foo = {
|
||||
\ x,
|
||||
\ y,
|
||||
\ z
|
||||
\ ->
|
||||
"\ comment
|
||||
\ expr
|
||||
\ }
|
||||
|
||||
let Foo = {-> [
|
||||
\ 42,
|
||||
\ 83
|
||||
\]}
|
||||
|
||||
let Foo = {-> {
|
||||
\ 'a': 42,
|
||||
\ 'b': 83
|
||||
\}}
|
||||
|
||||
let Foo = {-> #{
|
||||
\ a: 42,
|
||||
\ b: 83
|
||||
\}}
|
||||
|
||||
let Foo = {-> {->[
|
||||
\ 42,
|
||||
\ 83
|
||||
\]}}
|
||||
|
||||
let Foo = {-> {-> {
|
||||
\ 'a': 42,
|
||||
\ 'b': 83
|
||||
\}}}
|
||||
|
||||
let Foo = {-> {-> #{
|
||||
\ a: 42,
|
||||
\ b: 83
|
||||
\}}}
|
||||
|
||||
" :help lambda
|
||||
|
||||
:let F = {arg1, arg2 -> arg1 - arg2}
|
||||
:echo F(5, 2)
|
||||
|
||||
:let F = {-> 'error function'}
|
||||
:echo F('ignored')
|
||||
|
||||
:function Foo(arg)
|
||||
: let i = 3
|
||||
: return {x -> x + i - a:arg}
|
||||
:endfunction
|
||||
:let Bar = Foo(4)
|
||||
:echo Bar(6)
|
||||
|
||||
:echo map([1, 2, 3], {idx, val -> val + 1})
|
||||
" [2, 3, 4]
|
||||
|
||||
:echo sort([3,7,2,1,4], {a, b -> a - b})
|
||||
" [1, 2, 3, 4, 7]
|
||||
:let timer = timer_start(500,
|
||||
\ {-> execute("echo 'Handler called'", "")},
|
||||
\ {'repeat': 3})
|
||||
|
@@ -1,5 +1,7 @@
|
||||
vim9script
|
||||
# VIM_TEST_SETUP hi link vimMethodName Todo
|
||||
|
||||
# VIM_TEST_SETUP hi link vim9MethodName Special
|
||||
# VIM_TEST_SETUP hi link vim9This Todo
|
||||
|
||||
|
||||
# Vim |builtin-object-methods| and namesake builtin functions.
|
||||
|
@@ -11,6 +11,9 @@ let foo[:2] = expr
|
||||
let foo[1:] = expr
|
||||
let foo[:] = expr
|
||||
|
||||
let foo["key"] = expr
|
||||
let foo['key'] = expr
|
||||
|
||||
let foo += expr
|
||||
let foo -= expr
|
||||
let foo *= expr
|
||||
@@ -19,38 +22,175 @@ let foo %= expr
|
||||
let foo .= expr
|
||||
let foo ..= expr
|
||||
|
||||
let b:foo = expr
|
||||
|
||||
let b:foo[0] = expr
|
||||
|
||||
let b:foo[1:2] = expr
|
||||
let b:foo[:2] = expr
|
||||
let b:foo[1:] = expr
|
||||
let b:foo[:] = expr
|
||||
|
||||
let bfoo["key"] = expr
|
||||
let bfoo['key'] = expr
|
||||
|
||||
let b:foo += expr
|
||||
let b:foo -= expr
|
||||
let b:foo *= expr
|
||||
let b:foo /= expr
|
||||
let b:foo %= expr
|
||||
let b:foo .= expr
|
||||
let b:foo ..= expr
|
||||
|
||||
let g:foo = expr
|
||||
|
||||
let g:foo[0] = expr
|
||||
|
||||
let g:foo[1:2] = expr
|
||||
let g:foo[:2] = expr
|
||||
let g:foo[1:] = expr
|
||||
let g:foo[:] = expr
|
||||
|
||||
let g:foo["key"] = expr
|
||||
let g:foo['key'] = expr
|
||||
|
||||
let g:foo += expr
|
||||
let g:foo -= expr
|
||||
let g:foo *= expr
|
||||
let g:foo /= expr
|
||||
let g:foo %= expr
|
||||
let g:foo .= expr
|
||||
let g:foo ..= expr
|
||||
|
||||
let s:foo = expr
|
||||
|
||||
let s:foo[0] = expr
|
||||
|
||||
let s:foo[1:2] = expr
|
||||
let s:foo[:2] = expr
|
||||
let s:foo[1:] = expr
|
||||
let s:foo[:] = expr
|
||||
|
||||
let s:foo["key"] = expr
|
||||
let s:foo['key'] = expr
|
||||
|
||||
let s:foo += expr
|
||||
let s:foo -= expr
|
||||
let s:foo *= expr
|
||||
let s:foo /= expr
|
||||
let s:foo %= expr
|
||||
let s:foo .= expr
|
||||
let s:foo ..= expr
|
||||
|
||||
let t:foo = expr
|
||||
|
||||
let t:foo[0] = expr
|
||||
|
||||
let t:foo[1:2] = expr
|
||||
let t:foo[:2] = expr
|
||||
let t:foo[1:] = expr
|
||||
let t:foo[:] = expr
|
||||
|
||||
let t:foo["key"] = expr
|
||||
let t:foo['key'] = expr
|
||||
|
||||
let t:foo += expr
|
||||
let t:foo -= expr
|
||||
let t:foo *= expr
|
||||
let t:foo /= expr
|
||||
let t:foo %= expr
|
||||
let t:foo .= expr
|
||||
let t:foo ..= expr
|
||||
|
||||
let v:foo = expr
|
||||
|
||||
let v:foo[0] = expr
|
||||
|
||||
let v:foo[1:2] = expr
|
||||
let v:foo[:2] = expr
|
||||
let v:foo[1:] = expr
|
||||
let v:foo[:] = expr
|
||||
|
||||
let v:foo["key"] = expr
|
||||
let v:foo['key'] = expr
|
||||
|
||||
let v:foo += expr
|
||||
let v:foo -= expr
|
||||
let v:foo *= expr
|
||||
let v:foo /= expr
|
||||
let v:foo %= expr
|
||||
let v:foo .= expr
|
||||
let v:foo ..= expr
|
||||
|
||||
let w:foo = expr
|
||||
|
||||
let w:foo[0] = expr
|
||||
|
||||
let w:foo[1:2] = expr
|
||||
let w:foo[:2] = expr
|
||||
let w:foo[1:] = expr
|
||||
let w:foo[:] = expr
|
||||
|
||||
let w:foo["key"] = expr
|
||||
let w:foo['key'] = expr
|
||||
|
||||
let w:foo += expr
|
||||
let w:foo -= expr
|
||||
let w:foo *= expr
|
||||
let w:foo /= expr
|
||||
let w:foo %= expr
|
||||
let w:foo .= expr
|
||||
let w:foo ..= expr
|
||||
|
||||
let $FOO = expr
|
||||
let $FOO .= expr
|
||||
let $FOO ..= expr
|
||||
|
||||
let @f = expr
|
||||
let @f .= expr
|
||||
let @f ..= expr
|
||||
|
||||
let &foo = expr
|
||||
|
||||
let &t_k1 = "\<Esc>[234;"
|
||||
|
||||
let &foo .= expr
|
||||
|
||||
let &foo ..= expr
|
||||
let &foo += expr
|
||||
let &foo -= expr
|
||||
|
||||
let &l:foo = expr
|
||||
|
||||
let &l:foo .= expr
|
||||
let &l:foo ..= expr
|
||||
let &l:foo += expr
|
||||
let &l:foo -= expr
|
||||
|
||||
let &g:foo = expr
|
||||
|
||||
let &g:foo .= expr
|
||||
let &g:foo ..= expr
|
||||
let &g:foo += expr
|
||||
let &g:foo -= expr
|
||||
|
||||
let [foo, bar] = expr
|
||||
let [foo,
|
||||
\ bar] = expr
|
||||
let [v:foo, v:bar] = expr
|
||||
let [v:foo,
|
||||
\ v:bar] = expr
|
||||
let [&foo, &bar] = expr
|
||||
let [&foo,
|
||||
\ &bar] = expr
|
||||
let [$foo, $bar] = expr
|
||||
let [$foo,
|
||||
\ $bar] = expr
|
||||
let [@a, @b] = expr
|
||||
let [@a,
|
||||
\ @b] = expr
|
||||
|
||||
let [foo, bar] .= expr
|
||||
let [foo, bar] ..= expr
|
||||
let [foo, bar] += expr
|
||||
let [foo, bar] -= expr
|
||||
|
||||
@@ -58,10 +198,22 @@ let [foo, bar; baz] = expr
|
||||
let [foo,
|
||||
\ bar;
|
||||
\ baz] = expr
|
||||
|
||||
let [foo, bar; baz] .= expr
|
||||
let [foo, bar; baz] += expr
|
||||
let [foo, bar; baz] -= expr
|
||||
let [v:foo, v:bar; v:baz] = expr
|
||||
let [v:foo,
|
||||
\ v:bar;
|
||||
\ v:baz] = expr
|
||||
let [$foo, $bar; $baz] = expr
|
||||
let [$foo,
|
||||
\ $bar;
|
||||
\ $baz] = expr
|
||||
let [&foo, &bar; &baz] = expr
|
||||
let [&foo,
|
||||
\ &bar;
|
||||
\ &baz] = expr
|
||||
let [@a, @b; @c] = expr
|
||||
let [@a,
|
||||
\ @b;
|
||||
\ @c] = expr
|
||||
|
||||
let foo =<< END
|
||||
...
|
||||
@@ -79,19 +231,33 @@ let foo =<< eval trim END
|
||||
...
|
||||
END
|
||||
|
||||
" :let list values
|
||||
|
||||
let foo
|
||||
let foo bar
|
||||
let foo
|
||||
"\ comment
|
||||
\ bar
|
||||
|
||||
let foo " comment
|
||||
let foo "\ comment
|
||||
let foo | echo "Foo"
|
||||
let foo bar " comment
|
||||
let foo bar | echo "Foo"
|
||||
let foo bar "\ comment
|
||||
|
||||
" :unlet
|
||||
|
||||
unlet foo
|
||||
unlet foo bar
|
||||
unlet foo
|
||||
"\ comment
|
||||
\ bar
|
||||
|
||||
unlet! foo
|
||||
unlet! foo bar
|
||||
unlet! foo
|
||||
"\ comment
|
||||
\ bar
|
||||
|
||||
unlet $FOO
|
||||
@@ -102,6 +268,13 @@ unlet list[3:]
|
||||
unlet dict['two']
|
||||
unlet dict.two
|
||||
|
||||
unlet foo " comment
|
||||
unlet foo "\ comment
|
||||
unlet foo | echo "Foo"
|
||||
unlet foo bar " comment
|
||||
unlet foo bar "\ comment
|
||||
unlet foo bar | echo "Foo"
|
||||
|
||||
" :const
|
||||
|
||||
const foo = expr
|
||||
@@ -136,3 +309,74 @@ endfor
|
||||
|
||||
for [foo, bar] in expr
|
||||
endfor
|
||||
|
||||
" :lockvar
|
||||
|
||||
lockvar foo
|
||||
lockvar foo bar
|
||||
lockvar foo
|
||||
"\ comment
|
||||
\ bar
|
||||
|
||||
lockvar foo " comment
|
||||
lockvar foo | echo "Foo"
|
||||
lockvar foo bar " comment
|
||||
lockvar foo bar | echo "Foo"
|
||||
|
||||
lockvar! foo
|
||||
lockvar! foo bar
|
||||
lockvar! foo
|
||||
"\ comment
|
||||
\ bar
|
||||
|
||||
lockvar! foo " comment
|
||||
lockvar! foo | echo "Foo"
|
||||
lockvar! foo bar " comment
|
||||
lockvar! foo bar | echo "Foo"
|
||||
|
||||
lockvar 2 foo
|
||||
lockvar 2 foo bar
|
||||
lockvar 2 foo
|
||||
"\ comment
|
||||
\ bar
|
||||
|
||||
lockvar 2 foo " comment
|
||||
lockvar 2 foo | echo "Foo"
|
||||
lockvar 2 foo bar " comment
|
||||
lockvar 2 foo bar | echo "Foo"
|
||||
|
||||
" :unlockvar
|
||||
|
||||
unlockvar foo
|
||||
unlockvar foo bar
|
||||
unlockvar foo
|
||||
"\ comment
|
||||
\ bar
|
||||
|
||||
unlockvar foo " comment
|
||||
unlockvar foo | echo "Foo"
|
||||
unlockvar foo bar " comment
|
||||
unlockvar foo bar | echo "Foo"
|
||||
|
||||
unlockvar! foo
|
||||
unlockvar! foo bar
|
||||
unlockvar! foo
|
||||
"\ comment
|
||||
\ bar
|
||||
|
||||
unlockvar! foo " comment
|
||||
unlockvar! foo | echo "Foo"
|
||||
unlockvar! foo bar " comment
|
||||
unlockvar! foo bar | echo "Foo"
|
||||
|
||||
unlockvar 2 foo
|
||||
unlockvar 2 foo bar
|
||||
unlockvar 2 foo
|
||||
"\ comment
|
||||
\ bar
|
||||
|
||||
unlockvar 2 foo " comment
|
||||
unlockvar 2 foo | echo "Foo"
|
||||
unlockvar 2 foo bar " comment
|
||||
unlockvar 2 foo bar | echo "Foo"
|
||||
|
||||
|
Reference in New Issue
Block a user