~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to utils/vim/indent/llvm.vim

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

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