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