Ignore:
Timestamp:
Apr 19, 2011, 11:12:07 PM (14 years ago)
Author:
Yuri Dario
Message:

clamav: update trunk to 0.97.

Location:
clamav/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • clamav/trunk

  • TabularUnified clamav/trunk/libclamav/c++/llvm/utils/vim/vimrc

    r189 r319  
    9292"set incsearch
    9393"set ruler
     94
     95" Clang code-completion support. This is highly experimental!
     96
     97" A path to a clang executable.
     98let g:clang_path = "clang++"
     99
     100" A list of options to add to the clang commandline, for example to add
     101" include paths, predefined macros, and language options.
     102let g:clang_opts = [
     103  \ "-x","c++",
     104  \ "-D__STDC_LIMIT_MACROS=1","-D__STDC_CONSTANT_MACROS=1",
     105  \ "-Iinclude" ]
     106
     107function! ClangComplete(findstart, base)
     108   if a:findstart == 1
     109      " In findstart mode, look for the beginning of the current identifier.
     110      let l:line = getline('.')
     111      let l:start = col('.') - 1
     112      while l:start > 0 && l:line[l:start - 1] =~ '\i'
     113         let l:start -= 1
     114      endwhile
     115      return l:start
     116   endif
     117
     118   " Get the current line and column numbers.
     119   let l:l = line('.')
     120   let l:c = col('.')
     121
     122   " Build a clang commandline to do code completion on stdin.
     123   let l:the_command = shellescape(g:clang_path) .
     124                     \ " -cc1 -code-completion-at=-:" . l:l . ":" . l:c
     125   for l:opt in g:clang_opts
     126      let l:the_command .= " " . shellescape(l:opt)
     127   endfor
     128
     129   " Copy the contents of the current buffer into a string for stdin.
     130   " TODO: The extra space at the end is for working around clang's
     131   " apparent inability to do code completion at the very end of the
     132   " input.
     133   " TODO: Is it better to feed clang the entire file instead of truncating
     134   " it at the current line?
     135   let l:process_input = join(getline(1, l:l), "\n") . " "
     136
     137   " Run it!
     138   let l:input_lines = split(system(l:the_command, l:process_input), "\n")
     139
     140   " Parse the output.
     141   for l:input_line in l:input_lines
     142      " Vim's substring operator is annoyingly inconsistent with python's.
     143      if l:input_line[:11] == 'COMPLETION: '
     144         let l:value = l:input_line[12:]
     145
     146        " Chop off anything after " : ", if present, and move it to the menu.
     147        let l:menu = ""
     148        let l:spacecolonspace = stridx(l:value, " : ")
     149        if l:spacecolonspace != -1
     150           let l:menu = l:value[l:spacecolonspace+3:]
     151           let l:value = l:value[:l:spacecolonspace-1]
     152        endif
     153
     154        " Chop off " (Hidden)", if present, and move it to the menu.
     155        let l:hidden = stridx(l:value, " (Hidden)")
     156        if l:hidden != -1
     157           let l:menu .= " (Hidden)"
     158           let l:value = l:value[:l:hidden-1]
     159        endif
     160
     161        " Handle "Pattern". TODO: Make clang less weird.
     162        if l:value == "Pattern"
     163           let l:value = l:menu
     164           let l:pound = stridx(l:value, "#")
     165           " Truncate the at the first [#, <#, or {#.
     166           if l:pound != -1
     167              let l:value = l:value[:l:pound-2]
     168           endif
     169        endif
     170
     171         " Filter out results which don't match the base string.
     172         if a:base != ""
     173            if l:value[:strlen(a:base)-1] != a:base
     174               continue
     175            end
     176         endif
     177
     178        " TODO: Don't dump the raw input into info, though it's nice for now.
     179        " TODO: The kind string?
     180        let l:item = {
     181          \ "word": l:value,
     182          \ "menu": l:menu,
     183          \ "info": l:input_line,
     184          \ "dup": 1 }
     185
     186        " Report a result.
     187        if complete_add(l:item) == 0
     188           return []
     189        endif
     190        if complete_check()
     191           return []
     192        endif
     193
     194      elseif l:input_line[:9] == "OVERLOAD: "
     195         " An overload candidate. Use a crazy hack to get vim to
     196         " display the results. TODO: Make this better.
     197         let l:value = l:input_line[10:]
     198         let l:item = {
     199           \ "word": " ",
     200           \ "menu": l:value,
     201           \ "info": l:input_line,
     202           \ "dup": 1}
     203
     204        " Report a result.
     205        if complete_add(l:item) == 0
     206           return []
     207        endif
     208        if complete_check()
     209           return []
     210        endif
     211
     212      endif
     213   endfor
     214
     215
     216   return []
     217endfunction ClangComplete
     218
     219" Uncomment this to enable the highly-broken autocompletion support.
     220"set omnifunc=ClangComplete
Note: See TracChangeset for help on using the changeset viewer.