vim9script
# vim: set ft=vim sw=4 :

# START_INDENT
# INDENT_EXE let g:vim_indent = {'searchpair_timeout': 8192}
# INDENT_EXE runtime autoload/dist/vimindent.vim
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 let g:vim_indent = {'searchpair_timeout': 8192}
# 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

# START_INDENT
def ToggleBoolOpt(opt: string)
exe $"&{opt} = !&{opt}"
$"&{opt}"
->eval()
->( (v) => v ? "ON" : "OFF" )()
->printf($"{opt} %s")
->popup_notification({})
enddef
# END_INDENT
