xref: /llvm-project/mlir/utils/vim/indent/mlir.vim (revision 0f0d0ed1c78f1a80139a1f2133fad5284691a121)
1*e8d43cafSUday Bondhugula" Vim indent file
2*e8d43cafSUday Bondhugula" Language:   mlir
3*e8d43cafSUday Bondhugula" Maintainer: The MLIR team
4*e8d43cafSUday Bondhugula" Adapted from the LLVM vim indent file
5*e8d43cafSUday Bondhugula" What this indent plugin currently does:
6*e8d43cafSUday Bondhugula"  - If no other rule matches copy indent from previous non-empty,
7*e8d43cafSUday Bondhugula"    non-commented line.
8*e8d43cafSUday Bondhugula"  - On '}' align the same as the line containing the matching '{'.
9*e8d43cafSUday Bondhugula"  - If previous line starts with a block label, increase indentation.
10*e8d43cafSUday Bondhugula"  - If the current line is a block label and ends with ':' indent at the same
11*e8d43cafSUday Bondhugula"    level as the enclosing '{'/'}' block.
12*e8d43cafSUday Bondhugula" Stuff that would be nice to add:
13*e8d43cafSUday Bondhugula"  - Continue comments on next line.
14*e8d43cafSUday Bondhugula"  - If there is an opening+unclosed parenthesis on previous line indent to
15*e8d43cafSUday Bondhugula"    that.
16*e8d43cafSUday Bondhugulaif exists("b:did_indent")
17*e8d43cafSUday Bondhugula  finish
18*e8d43cafSUday Bondhugulaendif
19*e8d43cafSUday Bondhugulalet b:did_indent = 1
20*e8d43cafSUday Bondhugula
21*e8d43cafSUday Bondhugulasetlocal shiftwidth=2 expandtab
22*e8d43cafSUday Bondhugula
23*e8d43cafSUday Bondhugulasetlocal indentkeys=0{,0},<:>,!^F,o,O,e
24*e8d43cafSUday Bondhugulasetlocal indentexpr=GetMLIRIndent()
25*e8d43cafSUday Bondhugula
26*e8d43cafSUday Bondhugulaif exists("*GetMLIRIndent")
27*e8d43cafSUday Bondhugula  finish
28*e8d43cafSUday Bondhugulaendif
29*e8d43cafSUday Bondhugula
30*e8d43cafSUday Bondhugulafunction! FindOpenBrace(lnum)
31*e8d43cafSUday Bondhugula  call cursor(a:lnum, 1)
32*e8d43cafSUday Bondhugula  return searchpair('{', '', '}', 'bW')
33*e8d43cafSUday Bondhugulaendfun
34*e8d43cafSUday Bondhugula
35*e8d43cafSUday Bondhugulafunction! GetMLIRIndent()
36*e8d43cafSUday Bondhugula  " On '}' align the same as the line containing the matching '{'
37*e8d43cafSUday Bondhugula  let thisline = getline(v:lnum)
38*e8d43cafSUday Bondhugula  if thisline =~ '^\s*}'
39*e8d43cafSUday Bondhugula    call cursor(v:lnum, 1)
40*e8d43cafSUday Bondhugula    silent normal %
41*e8d43cafSUday Bondhugula    let opening_lnum = line('.')
42*e8d43cafSUday Bondhugula    if opening_lnum != v:lnum
43*e8d43cafSUday Bondhugula      return indent(opening_lnum)
44*e8d43cafSUday Bondhugula    endif
45*e8d43cafSUday Bondhugula  endif
46*e8d43cafSUday Bondhugula
47*e8d43cafSUday Bondhugula  " Indent labels the same as the current opening block
48*e8d43cafSUday Bondhugula  if thisline =~ '\^\h\+.*:\s*$'
49*e8d43cafSUday Bondhugula    let blockbegin = FindOpenBrace(v:lnum)
50*e8d43cafSUday Bondhugula    if blockbegin > 0
51*e8d43cafSUday Bondhugula      return indent(blockbegin)
52*e8d43cafSUday Bondhugula    endif
53*e8d43cafSUday Bondhugula  endif
54*e8d43cafSUday Bondhugula
55*e8d43cafSUday Bondhugula  " Find a non-blank not-completely commented line above the current line.
56*e8d43cafSUday Bondhugula  let prev_lnum = prevnonblank(v:lnum - 1)
57*e8d43cafSUday Bondhugula  while prev_lnum > 0 && synIDattr(synID(prev_lnum, 1 + indent(prev_lnum), 0), "name") == "mlirComment"
58*e8d43cafSUday Bondhugula    let prev_lnum = prevnonblank(prev_lnum-1)
59*e8d43cafSUday Bondhugula  endwhile
60*e8d43cafSUday Bondhugula  " Hit the start of the file, use zero indent.
61*e8d43cafSUday Bondhugula  if prev_lnum == 0
62*e8d43cafSUday Bondhugula    return 0
63*e8d43cafSUday Bondhugula  endif
64*e8d43cafSUday Bondhugula
65*e8d43cafSUday Bondhugula  let ind = indent(prev_lnum)
66*e8d43cafSUday Bondhugula  let prevline = getline(prev_lnum)
67*e8d43cafSUday Bondhugula
68*e8d43cafSUday Bondhugula  " Add a 'shiftwidth' after lines that start a function, block/labels, or a
69*e8d43cafSUday Bondhugula  " region.
70*e8d43cafSUday Bondhugula  if prevline =~ '{\s*$' || prevline =~ '\^\h\+.*:\s*$'
71*e8d43cafSUday Bondhugula    let ind = ind + &shiftwidth
72*e8d43cafSUday Bondhugula  endif
73*e8d43cafSUday Bondhugula
74*e8d43cafSUday Bondhugula  return ind
75*e8d43cafSUday Bondhugulaendfunction
76