diff --git a/runtime/indent/testdir/vim.in b/runtime/indent/testdir/vim.in index 431528ee27..6b894b5107 100644 --- a/runtime/indent/testdir/vim.in +++ b/runtime/indent/testdir/vim.in @@ -113,284 +113,12 @@ 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', -"\": '1G', -"\": 'G', -z: 'zz' -} -" END_INDENT - -" START_INDENT -export def Func( -n: number, -s: string, -...l: list -) -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 @@ -404,92 +132,12 @@ 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 -if true -var d = { -end: 0} -endif -" END_INDENT - " START_INDENT nunmap ( nunmap ) @@ -499,224 +147,6 @@ 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 = { -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]), @@ -726,109 +156,16 @@ in_io: 'null' }) " END_INDENT -" START_INDENT -var matching_abbrev: list> = copy(ABBREV) -->filter((_, v: dict): bool => -stridx(v.lhs, word_to_complete) == 0) -->map((_, v: dict) => ({ -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('') " 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 @@ -839,128 +176,11 @@ endif endfunction " END_INDENT -" START_INDENT -var matchpairs: string = &matchpairs -var pairs: dict> -for [opening: string, closing: string] -in matchpairs -->split(',') -->map((_, v: string): list => 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 - -" 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 call prop_type_add('indent_after_literal_dict', #{ foo: 'bar' }) call prop_type_delete('indent_after_literal_dict') diff --git a/runtime/indent/testdir/vim.ok b/runtime/indent/testdir/vim.ok index 03001d525c..29878294bb 100644 --- a/runtime/indent/testdir/vim.ok +++ b/runtime/indent/testdir/vim.ok @@ -113,284 +113,12 @@ if v:true 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', - "\": '1G', - "\": 'G', - z: 'zz' -} -" END_INDENT - -" START_INDENT -export def Func( - n: number, - s: string, - ...l: list - ) -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 @@ -404,92 +132,12 @@ catch /pat / # comment 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 -if true - var d = { - end: 0} -endif -" END_INDENT - " START_INDENT nunmap ( nunmap ) @@ -499,224 +147,6 @@ 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 = { - 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]), @@ -726,109 +156,16 @@ make_job = job_start([&shell, &shellcmdflag, make_cmd], { }) " END_INDENT -" START_INDENT -var matching_abbrev: list> = copy(ABBREV) - ->filter((_, v: dict): bool => - stridx(v.lhs, word_to_complete) == 0) - ->map((_, v: dict) => ({ - 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('') " 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 @@ -839,128 +176,11 @@ function Func() endfunction " END_INDENT -" START_INDENT -var matchpairs: string = &matchpairs -var pairs: dict> -for [opening: string, closing: string] - in matchpairs - ->split(',') - ->map((_, v: string): list => 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 - -" 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 call prop_type_add('indent_after_literal_dict', #{ foo: 'bar' }) call prop_type_delete('indent_after_literal_dict') diff --git a/runtime/indent/testdir/vim9.in b/runtime/indent/testdir/vim9.in new file mode 100644 index 0000000000..a14d4e7d17 --- /dev/null +++ b/runtime/indent/testdir/vim9.in @@ -0,0 +1,782 @@ +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', +"\": '1G', +"\": 'G', +z: 'zz' +} +# END_INDENT + +# START_INDENT +export def Func( +n: number, +s: string, +...l: list +) +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 = { +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> = copy(ABBREV) +->filter((_, v: dict): bool => +stridx(v.lhs, word_to_complete) == 0) +->map((_, v: dict) => ({ +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> +for [opening: string, closing: string] +in matchpairs +->split(',') +->map((_, v: string): list => 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 diff --git a/runtime/indent/testdir/vim9.ok b/runtime/indent/testdir/vim9.ok new file mode 100644 index 0000000000..e4ba72ca10 --- /dev/null +++ b/runtime/indent/testdir/vim9.ok @@ -0,0 +1,782 @@ +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', + "\": '1G', + "\": 'G', + z: 'zz' +} +# END_INDENT + +# START_INDENT +export def Func( + n: number, + s: string, + ...l: list + ) +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 = { + 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> = copy(ABBREV) + ->filter((_, v: dict): bool => + stridx(v.lhs, word_to_complete) == 0) + ->map((_, v: dict) => ({ + 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> +for [opening: string, closing: string] + in matchpairs + ->split(',') + ->map((_, v: string): list => 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