summaryrefslogtreecommitdiffstats
path: root/indent
diff options
context:
space:
mode:
Diffstat (limited to 'indent')
-rw-r--r--indent/julia.vim22
-rw-r--r--indent/mlir.vim79
-rw-r--r--indent/svelte.vim25
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