diff options
Diffstat (limited to 'indent')
-rw-r--r-- | indent/julia.vim | 22 | ||||
-rw-r--r-- | indent/mlir.vim | 79 | ||||
-rw-r--r-- | indent/svelte.vim | 25 |
3 files changed, 109 insertions, 17 deletions
diff --git a/indent/julia.vim b/indent/julia.vim index c4c17245..b40823c0 100644 --- a/indent/julia.vim +++ b/indent/julia.vim @@ -53,8 +53,8 @@ function GetJuliaNestingStruct(lnum, ...) let blocks_stack = [] let num_closed_blocks = 0 while 1 - let fb = JuliaMatch(a:lnum, line, '@\@<!\<\%(if\|else\%(if\)\?\|while\|for\|try\|catch\|finally\|\%(staged\)\?function\|macro\|begin\|mutable\s\+struct\|\%(mutable\s\+\)\@<!struct\|\%(abstract\|primitive\)\s\+type\|let\|\%(bare\)\?module\|quote\|do\)\>', s, e) - let fe = JuliaMatch(a:lnum, line, '@\@<!\<end\>', s, e) + let fb = JuliaMatch(a:lnum, line, '[@.]\@<!\<\%(if\|else\%(if\)\?\|while\|for\|try\|catch\|finally\|\%(staged\)\?function\|macro\|begin\|mutable\s\+struct\|\%(mutable\s\+\)\@<!struct\|\%(abstract\|primitive\)\s\+type\|let\|\%(bare\)\?module\|quote\|do\)\>', s, e) + let fe = JuliaMatch(a:lnum, line, '[@.]\@<!\<end\>', s, e) if fb < 0 && fe < 0 " No blocks found @@ -66,13 +66,13 @@ function GetJuliaNestingStruct(lnum, ...) " Note: some keywords (elseif,else,catch,finally) are both " closing blocks and opening new ones - let i = JuliaMatch(a:lnum, line, '@\@<!\<if\>', s) + let i = JuliaMatch(a:lnum, line, '[@.]\@<!\<if\>', s) if i >= 0 && i == fb let s = i+1 call add(blocks_stack, 'if') continue endif - let i = JuliaMatch(a:lnum, line, '@\@<!\<elseif\>', s) + let i = JuliaMatch(a:lnum, line, '[@.]\@<!\<elseif\>', s) if i >= 0 && i == fb let s = i+1 if len(blocks_stack) > 0 && blocks_stack[-1] == 'if' @@ -83,7 +83,7 @@ function GetJuliaNestingStruct(lnum, ...) endif continue endif - let i = JuliaMatch(a:lnum, line, '@\@<!\<else\>', s) + let i = JuliaMatch(a:lnum, line, '[@.]\@<!\<else\>', s) if i >= 0 && i == fb let s = i+1 if len(blocks_stack) > 0 && blocks_stack[-1] =~# '\<\%(else\)\=if\>' @@ -95,13 +95,13 @@ function GetJuliaNestingStruct(lnum, ...) continue endif - let i = JuliaMatch(a:lnum, line, '@\@<!\<try\>', s) + let i = JuliaMatch(a:lnum, line, '[@.]\@<!\<try\>', s) if i >= 0 && i == fb let s = i+1 call add(blocks_stack, 'try') continue endif - let i = JuliaMatch(a:lnum, line, '@\@<!\<catch\>', s) + let i = JuliaMatch(a:lnum, line, '[@.]\@<!\<catch\>', s) if i >= 0 && i == fb let s = i+1 if len(blocks_stack) > 0 && blocks_stack[-1] == 'try' @@ -112,7 +112,7 @@ function GetJuliaNestingStruct(lnum, ...) endif continue endif - let i = JuliaMatch(a:lnum, line, '@\@<!\<finally\>', s) + let i = JuliaMatch(a:lnum, line, '[@.]\@<!\<finally\>', s) if i >= 0 && i == fb let s = i+1 if len(blocks_stack) > 0 && (blocks_stack[-1] == 'try' || blocks_stack[-1] == 'catch') @@ -124,7 +124,7 @@ function GetJuliaNestingStruct(lnum, ...) continue endif - let i = JuliaMatch(a:lnum, line, '@\@<!\<\%(bare\)\?module\>', s) + let i = JuliaMatch(a:lnum, line, '[@.]\@<!\<\%(bare\)\?module\>', s) if i >= 0 && i == fb let s = i+1 if i == 0 @@ -135,7 +135,7 @@ function GetJuliaNestingStruct(lnum, ...) continue endif - let i = JuliaMatch(a:lnum, line, '@\@<!\<\%(while\|for\|\%(staged\)\?function\|macro\|begin\|\%(mutable\s\+\)\?struct\|\%(abstract\|primitive\)\s\+type\|immutable\|let\|quote\|do\)\>', s) + let i = JuliaMatch(a:lnum, line, '[@.]\@<!\<\%(while\|for\|\%(staged\)\?function\|macro\|begin\|\%(mutable\s\+\)\?struct\|\%(abstract\|primitive\)\s\+type\|immutable\|let\|quote\|do\)\>', s) if i >= 0 && i == fb if match(line, '\C\<\%(mutable\|abstract\|primitive\)', i) != -1 let s = i+11 @@ -278,7 +278,7 @@ endfunction function IsInDocString(lnum) let stack = map(synstack(a:lnum, 1), 'synIDattr(v:val, "name")') - call filter(stack, 'v:val =~# "\\<juliaDocString\\(Delim\\)\\?\\>"') + call filter(stack, 'v:val =~# "\\<juliaDocString\\(Delim\\|M\\)\\?\\>"') return len(stack) > 0 endfunction diff --git a/indent/mlir.vim b/indent/mlir.vim new file mode 100644 index 00000000..a74c3506 --- /dev/null +++ b/indent/mlir.vim @@ -0,0 +1,79 @@ +if polyglot#init#is_disabled(expand('<sfile>:p'), 'llvm', 'indent/mlir.vim') + finish +endif + +" Vim indent file +" Language: mlir +" Maintainer: The MLIR team +" Adapted from the LLVM vim indent file +" What this indent plugin currently does: +" - If no other rule matches copy indent from previous non-empty, +" non-commented line. +" - On '}' align the same as the line containing the matching '{'. +" - If previous line starts with a block label, increase indentation. +" - If the current line is a block label and ends with ':' indent at the same +" level as the enclosing '{'/'}' block. +" Stuff that would be nice to add: +" - Continue comments on next line. +" - If there is an opening+unclosed parenthesis on previous line indent to +" that. +if exists("b:did_indent") + finish +endif +let b:did_indent = 1 + +setlocal shiftwidth=2 expandtab + +setlocal indentkeys=0{,0},<:>,!^F,o,O,e +setlocal indentexpr=GetMLIRIndent() + +if exists("*GetMLIRIndent") + finish +endif + +function! FindOpenBrace(lnum) + call cursor(a:lnum, 1) + return searchpair('{', '', '}', 'bW') +endfun + +function! GetMLIRIndent() + " On '}' align the same as the line containing the matching '{' + let thisline = getline(v:lnum) + if thisline =~ '^\s*}' + call cursor(v:lnum, 1) + silent normal % + let opening_lnum = line('.') + if opening_lnum != v:lnum + return indent(opening_lnum) + endif + endif + + " Indent labels the same as the current opening block + if thisline =~ '\^\h\+.*:\s*$' + let blockbegin = FindOpenBrace(v:lnum) + if blockbegin > 0 + return indent(blockbegin) + endif + endif + + " Find a non-blank not-completely commented line above the current line. + let prev_lnum = prevnonblank(v:lnum - 1) + while prev_lnum > 0 && synIDattr(synID(prev_lnum, 1 + indent(prev_lnum), 0), "name") == "mlirComment" + let prev_lnum = prevnonblank(prev_lnum-1) + endwhile + " Hit the start of the file, use zero indent. + if prev_lnum == 0 + return 0 + endif + + let ind = indent(prev_lnum) + let prevline = getline(prev_lnum) + + " Add a 'shiftwidth' after lines that start a function, block/labels, or a + " region. + if prevline =~ '{\s*$' || prevline =~ '\^\h\+.*:\s*$' + let ind = ind + &shiftwidth + endif + + return ind +endfunction diff --git a/indent/svelte.vim b/indent/svelte.vim index fa01f563..cb01c424 100644 --- a/indent/svelte.vim +++ b/indent/svelte.vim @@ -12,12 +12,6 @@ if exists("b:did_indent") finish endif -runtime! indent/html.vim -unlet! b:did_indent - -let s:html_indent = &l:indentexpr -let b:did_indent = 1 - if !exists('g:svelte_indent_script') let g:svelte_indent_script = 1 endif @@ -26,6 +20,25 @@ if !exists('g:svelte_indent_style') let g:svelte_indent_style = 1 endif +" Try to mirror Svelte's indent settings so the HTML indenting scripts match. +if g:svelte_indent_script + let b:html_indent_script1 = "inc" +else + let b:html_indent_script1 = "zero" +endif + +if g:svelte_indent_style + let b:html_indent_style1 = "inc" +else + let b:html_indent_style1 = "zero" +endif + +runtime! indent/html.vim +unlet! b:did_indent + +let s:html_indent = &l:indentexpr +let b:did_indent = 1 + setlocal indentexpr=GetSvelteIndent() setlocal indentkeys=o,O,*<Return>,<>>,{,},0),0],!^F,;,=:else,=:then,=:catch,=/if,=/each,=/await |