forked from aniani/vim
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>
783 lines
9.4 KiB
Plaintext
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
|