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