1
0
forked from aniani/vim
Doug Kearns 221c53202d
runtime(vim): Split Vim legacy and Vim9 script indent tests
The indent test file is not highlighted correctly as it's currently a
syntactically erroneous mix of legacy and Vim9 script.  This is causing
spurious indent test failures as the indent script relies on syntax ID
tests to determine the context of lines being processed.

Splitting the tests into legacy and Vim9 specific files allows for
correct syntax highlighting and indenting.

closes: #16431

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-01-13 07:54:33 +01:00

783 lines
9.4 KiB
Plaintext

vim9script
# vim: set ft=vim sw=4 :
# START_INDENT
var result = Func(
arg1,
arg2
)
# END_INDENT
# START_INDENT
var result = Func(arg1,
arg2)
# END_INDENT
# START_INDENT
filter(list, (k, v) =>
v > 0)
# END_INDENT
# START_INDENT
filter(list, (k, v) => {
const x = get(list, k, 0)
return x > 0
})
# END_INDENT
# START_INDENT
if x > 0
filter(list, (k, v) => {
const x = get(list, k, 1)
return x > 0
})
endif
# END_INDENT
# START_INDENT
{
var temp = 'temp'
}
# END_INDENT
# START_INDENT
var text = lead
.. middle
.. end
# END_INDENT
# START_INDENT
var text = lead ..
middle ..
end
# END_INDENT
# START_INDENT
var total = start +
end -
correction
# END_INDENT
# START_INDENT
var result = start
:+ print
# END_INDENT
# START_INDENT
var result = positive
? PosFunc(arg)
: NegFunc(arg)
# END_INDENT
# START_INDENT
var result = GetBuilder()
->BuilderSetWidth(333)
->BuilderSetHeight(777)
->BuilderBuild()
# END_INDENT
# START_INDENT
var result = MyDict
.member
# END_INDENT
# START_INDENT
autocmd BufNewFile *.match if condition
| echo 'match'
| endif
# END_INDENT
# START_INDENT
set cpo+=C
var lines =<< trim END
| this works
END
set cpo-=C
# END_INDENT
# START_INDENT
syn region Text
\ start='foo'
#\ comment
\ end='bar'
# END_INDENT
# START_INDENT
au CursorHold * echom 'BEFORE bar'
#\ some comment
| echom 'AFTER bar'
# END_INDENT
# START_INDENT
def MyFunc(text: string,
separator = '-'
): string
enddef
# END_INDENT
# START_INDENT
def MyFunc(
text: string,
separator = '-'
): string
enddef
# END_INDENT
# START_INDENT
[var1, var2] =
Func()
# END_INDENT
# START_INDENT
const list = ['one',
'two']
# END_INDENT
# START_INDENT
const list = [
'one',
'two',
]
# END_INDENT
# START_INDENT
const dict = {one: 1,
two: 2
}
# END_INDENT
# START_INDENT
const dict = {
one: 1,
two: 2
}
# END_INDENT
# START_INDENT
if true
const dict =
{
one: 1,
two: 2
}
endif
# END_INDENT
# START_INDENT
def Func()
return {
one: 1
}
enddef
# END_INDENT
# START_INDENT
echo {
a: 0,
# b
# c
}
# END_INDENT
# START_INDENT
echo search(
# comment
'1'
.. '2'
)
# END_INDENT
# START_INDENT
if true
var v = ( # trailing "(" starts line continuation
3 + 4 # nothing special
) # end of expression indicates continued line
var x: number # needs to align with previous "var"
endif
# END_INDENT
# START_INDENT
def Func() # {{{
# comment
if true
return
endif
enddef
# END_INDENT
# START_INDENT
echo {
key:
'value',
}
# END_INDENT
# START_INDENT
var id = time
->timer_start((_) => {
n = 0
})
# END_INDENT
# START_INDENT
var n =
# comment
1
+ 2
var s = ''
# END_INDENT
# START_INDENT
var keys = {
J: 'j',
"\<Home>": '1G',
"\<End>": 'G',
z: 'zz'
}
# END_INDENT
# START_INDENT
export def Func(
n: number,
s: string,
...l: list<bool>
)
enddef
# END_INDENT
# START_INDENT
var heredoc =<< trim ENDD
var nested_heredoc =<< trim END
END
ENDD
# END_INDENT
# START_INDENT
if true
else " comment
endif
# END_INDENT
# START_INDENT
if true | echo 'one' | endif
if true | echo 'two' | endif
if true | echo 'three' | endif
# END_INDENT
# START_INDENT
if true
:'<-1 mark <
else
echo ''
endif
# END_INDENT
# START_INDENT
def Func()
Cmd %
enddef
# END_INDENT
# START_INDENT
if true
popup_move(id, {col: 1,
line: 2})
endif
setwinvar(id, 'name', 3)
# END_INDENT
# START_INDENT
var d = [
{a: 'x',
b: 'y'},
FuncA(),
FuncB(),
]
# END_INDENT
# START_INDENT
var ll = [[
1,
2,
3], [
4,
5,
6], [
7,
8,
9]]
# END_INDENT
# START_INDENT
var ld = [{
a: 'xxx',
b: 'yyy'}, {
c: 'xxx',
d: 'yyy'}, {
e: 'xxx',
f: 'yyy'}, {
}]
# END_INDENT
# START_INDENT
var d = {
a: {
b: {
c: [{
d: 'e',
f: 'g',
h: 'i'
}],
j: 'k',
},
},
}
# END_INDENT
# START_INDENT
if true
var end: any
if true
end = 0
elseif true
echo
endif
endif
# END_INDENT
# START_INDENT
if true
var d = {
end: 0}
endif
# END_INDENT
# START_INDENT
def Func(
s: string,
n = 1,
m = 2
)
enddef
# END_INDENT
# START_INDENT
var h =<< END
text
END
def Func()
echo
enddef
# END_INDENT
# START_INDENT
def Func()
var h =<< END
text
END
echo 'test'
enddef
# END_INDENT
# START_INDENT
def Foo()
lcd -
enddef
def Bar()
echo
enddef
# END_INDENT
# START_INDENT
if true
n = Func(1, 2,
3)
endif
# END_INDENT
# START_INDENT
def Func(s: string,
n: number): bool
if true
return false
endif
enddef
# END_INDENT
# START_INDENT
def Func(
n: number)
#
echo
enddef
# END_INDENT
# START_INDENT
# INDENT_AT this-line
def Func(
n: number)
#
echo # this-line
enddef
# END_INDENT
# START_INDENT
if true
if true
normal! ==
endif
endif
# END_INDENT
# START_INDENT
var d = {
a: () => true,
b: () => true
&& true
&& Foo(),
c: () => Bar(),
e: () => Baz(),
}
# END_INDENT
# START_INDENT
def Select(Cont: func(func(any)), Pred: func(any): bool): func(func(any))
return (Emit: func(any)) => {
Cont((t: any) => {
if Pred(t)
Emit(t)
endif
})
}
enddef
# END_INDENT
# START_INDENT
# INDENT_EXE let g:vim_indent = {'more_in_bracket_block': v:true}
def Select(Cont: func(func(any)), Pred: func(any): bool): func(func(any))
return (Emit: func(any)) => {
Cont((t: any) => {
if Pred(t)
Emit(t)
endif
})
}
enddef
# END_INDENT
# START_INDENT
# INDENT_EXE unlet! g:vim_indent
# END_INDENT
# START_INDENT
g:lightline = {
'active': {
'left': [ [ 'mode', 'paste' ], [ 'readonly', 'relativepath', 'modified' ] ],
},
'inactive': {
'left': [ [ 'readonly', 'relativepath', 'modified' ] ],
}
}
# END_INDENT
# START_INDENT
if getline(1, 10)
->map((_, v: string): number => strcharlen(v))
->max() > 1'000
&l:breakindent = false
&l:linebreak = false
else
&l:breakindent = true
&l:linebreak = true
endif
# END_INDENT
# START_INDENT
var ext2cmd: dict<string> = {
doc: $'antiword {fname}',
docx: $'pandoc --from=docx --to=markdown {fname}',
epub: $'pandoc --from=epub --to=markdown {fname}',
odp: $'odt2txt {fname}',
odt: $'odt2txt {fname}',
pdf: $'pdftotext -nopgbrk -layout -q -eol unix {fname} -',
rtf: 'unrtf --text',
}
# END_INDENT
# START_INDENT
const ptybuf: number = term_start(&shell, {
hidden: true,
exit_cb: (_, _) => {
if true
close
else
help
endif
}
})
# END_INDENT
# START_INDENT
var d = {
a: 0,
# a ' quote {{{
#}}}
b: 0,
}
# END_INDENT
# START_INDENT
echo printf('%s () %s',
1,
2
)
# END_INDENT
# START_INDENT
prop_add(1, col('.'), {
length: 2,
type: 'test'
})
# END_INDENT
# START_INDENT
echo (() => " string starting with space")()
echo
# END_INDENT
# START_INDENT
var variables = deepcopy(g:)
->filter((k: string, _): bool =>
k =~ '\c\V' .. keyword->escape('\')
&& k !~ '\%(loaded\|did_plugin_\)')
->items()
->map((_, v): string => v[0] .. ' = ' .. string(v[1]))
new
# END_INDENT
# START_INDENT
var d = freq
->map((_, v) =>
v * (
1
+ 2
))
for item in d
->items()
->sort((a, b) => b[1] - a[1])
echo
endfor
# END_INDENT
# START_INDENT
var matching_abbrev: list<dict<string>> = copy(ABBREV)
->filter((_, v: dict<string>): bool =>
stridx(v.lhs, word_to_complete) == 0)
->map((_, v: dict<string>) => ({
word: v.lhs,
menu: AbbrevRhs(v.rhs)->stridx('expand_') >= 0
? AbbrevRhs(v.rhs)->matchstr('.*,\s*''\zs.*\ze'')')
: AbbrevRhs(v.rhs)
}))
# END_INDENT
# START_INDENT
def Func()
if true
vimgrep /^\C\s*\%(fu\%[nction]\|def\)\s\+/ file
endif
enddef
# END_INDENT
# START_INDENT
silent if true
echo
endif
# END_INDENT
# START_INDENT
def Func()
sort :^.*[\/]:
enddef
# END_INDENT
# START_INDENT
def Func()
d = {
}
hd =<< trim END
['
]'
END
enddef
# END_INDENT
# START_INDENT
def Func()
if true
var hd =<< trim END
if get(b:, 'current_syntax', '')
endif
END
elseif true
echo
endif
enddef
# END_INDENT
# START_INDENT
# test for control-flow keyword followed by commented fold marker {{{
if true
echo
endif #}}}
# END_INDENT
# START_INDENT
if true
if true
windo if true | echo | endif
augroup Name
autocmd WinLeave * if true | eval 1 + 2 | endif
augroup END
endif
endif
# END_INDENT
# START_INDENT
if true
echo ' =<< trim END'
->len()
endif
# END_INDENT
# START_INDENT
function Func()
if true
if true
if true | echo com | endif
if true | echo com | endif
endif
else
endif
endfunction
# END_INDENT
# START_INDENT
var matchpairs: string = &matchpairs
var pairs: dict<list<string>>
for [opening: string, closing: string]
in matchpairs
->split(',')
->map((_, v: string): list<string> => split(v, ':'))
pairs[opening] = [escape(opening, '[]'), escape(closing, '[]'), 'nW', 'w$']
pairs[closing] = [escape(opening, '[]'), escape(closing, '[]'), 'bnW', 'w0']
endfor
# END_INDENT
# START_INDENT
{
echo []
+ []
+ [{a: 1,
b: 2}]
}
# END_INDENT
# START_INDENT
def Foo()
Bar(1,
[]->filter((_, v) => {
return true
}),
() => {
echo
})
enddef
# END_INDENT
# START_INDENT
echo {
k: () => {
if true
echo
popup_setoptions(id,
{title: 'title'})
endif
}
}
# END_INDENT
# START_INDENT
if true
elseif
endif
# END_INDENT
# START_INDENT
if (
true)
&& true
echo
endif
# END_INDENT
# START_INDENT
abstract class Shape
var color = Color.Black
var thickness = 10
endclass
# END_INDENT
# START_INDENT
class OtherThing
var size: number
static var totalSize: number
static def ClearTotalSize(): number
var prev = totalSize
totalSize = 0
return prev
enddef
endclass
# END_INDENT
# START_INDENT
interface HasSurface
var size: number
def Surface(): number
endinterface
# END_INDENT
# START_INDENT
interface EnterExit
def Enter(): void
def Exit(): void
endinterface
# END_INDENT
# START_INDENT
enum Color
White,
Red,
Green,
Blue,
Black
endenum
# END_INDENT
# START_INDENT
enum Digits
INVALID(v:numbermax), # The null value.
ZERO(0 * v:numbermin), ONE(2 - 1),
TWO(1 + 1), THREE(9 / 3), FOUR(1 * 4),
FIVE(1 + 2 + 2), SIX(36 / 3 / 2), SEVEN(7), EIGHT(2 * 2 * 2),
NINE(3 + 3 + 3)
const value: number
def new(value: number)
this.value = value
enddef
endenum
# END_INDENT