" vim: set ft=vim sw=4 :

" START_INDENT
func Some()
    let x = 1
endfunc

let cmd =
	    \ 'some '
	    \ 'string'

if 1
    let x = [
		\ ]
endif

for x in [
	{key: 'value'},
	]
    eval 0
endfor

let t = [
	    \ {
	    \ 'k': 'val',
	    \ },
	    \  ]

def Func()
    var d = dd
	->extend({
	})
    eval 0
enddef
" END_INDENT

" START_INDENT
" INDENT_EXE let g:vim_indent_cont = 6

let cmd =
      \ 'some '
      \ 'string'

" END_INDENT

" START_INDENT
" INDENT_EXE let g:vim_indent_cont = 5

let list = [
     \ 'one',
     \ 'two']

" END_INDENT

" START_INDENT
" INDENT_EXE unlet g:vim_indent_cont

let list = [
    'one',
    'two',
]
echo

" END_INDENT

" START_INDENT
" INDENT_AT  this-line
func Some()
    let f = x " this-line
endfunc
" END_INDENT

" START_INDENT
" INDENT_NEXT  next-line
func Some()
    " next-line
    let f = x
endfunc
" END_INDENT

" START_INDENT
" INDENT_PREV  prev-line
func Some()
    let f = x
" prev-line
endfunc
" END_INDENT

" START_INDENT
let a =<< END
nothing
END
" END_INDENT

" START_INDENT
let a =<< trim END
    nothing
END
" END_INDENT

" START_INDENT
" INDENT_AT  this-line
let a=<< trim END
   blah
      blah
      blah this-line
END
" END_INDENT

" START_INDENT
if v:true
    echo 0
end
" END_INDENT

" 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
augroup Name
    autocmd!
augroup END
" 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
substitute/pat /rep /
echo
" END_INDENT

" START_INDENT
try
    echo 1
catch /pat /  # comment
    echo 2
endtry
" END_INDENT

" START_INDENT
def Func()
    Cmd %
enddef
" END_INDENT

" START_INDENT
if end == 'xxx' || end == 'yyy'
    echo
endif
" 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
nunmap <buffer> (
nunmap <buffer> )
inoremap [ {
inoremap ] }
silent! xunmap i{
silent! xunmap a{
" 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
make_job = job_start([&shell, &shellcmdflag, make_cmd], {
    callback: function(MakeProcessOutput, [qfid]),
    close_cb: function(MakeCloseCb, [qfid]),
    exit_cb: MakeCompleted,
    in_io: 'null'
})
" 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
setlocal iskeyword+=[
cword = expand('<cword>')
" 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 winsz == 0|let winsz= ""|endif
exe "noswapfile ".winsz."wincmd s"
" 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
function Func()
    if v:true
	+
	echo
	-
    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
silent! argdel *
edit file
" 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
