You've already forked linux-packaging-mono
acceptance-tests
data
debian
docs
external
Newtonsoft.Json
api-doc-tools
api-snapshot
aspnetwebstack
binary-reference-assemblies
bockbuild
boringssl
cecil
cecil-legacy
corefx
corert
helix-binaries
ikdasm
ikvm
illinker-test-assets
linker
llvm
bindings
cmake
docs
examples
include
lib
projects
resources
runtimes
scripts
test
tools
unittests
utils
FileCheck
KillTheDoctor
LLVMVisualizers
Misc
PerfectShuffle
TableGen
Target
bugpoint
count
crosstool
docker
emacs
fpcmp
gdb-scripts
git
git-svn
jedit
kate
lint
lit
llvm-build
llvm-lit
not
release
sanitizers
testgen
textmate
unittest
valgrind
vim
ftdetect
ftplugin
indent
syntax
README
vimrc
vscode
yaml-bench
DSAclean.py
DSAextract.py
GenLibDeps.pl
GetRepositoryPath
GetSourceVersion
LLVMBuild.txt
UpdateCMakeLists.pl
abtest.py
bisect
bisect-skip-count
check-each-file
clang-parse-diagnostics-file
codegen-diff
countloc.sh
create_ladder_graph.py
extract_symbols.py
findmisopt
findoptdiff
findsym.pl
getsrcs.sh
lldbDataFormatters.py
llvm-compilers-check
llvm-gisel-cov.py
llvm-native-gxx
llvm.grm
llvmdo
llvmgrep
makellvm
prepare-code-coverage-artifact.py
schedcover.py
shuffle_fuzz.py
shuffle_select_fuzz_tester.py
sort_includes.py
update_llc_test_checks.py
update_mir_test_checks.py
update_test_checks.py
wciia.py
.arcconfig
.clang-format
.clang-tidy
.gitattributes
.gitignore
CMakeLists.txt
CODE_OWNERS.TXT
CREDITS.TXT
LICENSE.TXT
LLVMBuild.txt
README.txt
RELEASE_TESTERS.TXT
configure
llvm.spec.in
nuget-buildtasks
nunit-lite
roslyn-binaries
rx
xunit-binaries
how-to-bump-roslyn-binaries.md
ikvm-native
libgc
llvm
m4
man
mcs
mk
mono
msvc
netcore
po
runtime
samples
scripts
support
tools
COPYING.LIB
LICENSE
Makefile.am
Makefile.in
NEWS
README.md
acinclude.m4
aclocal.m4
autogen.sh
code_of_conduct.md
compile
config.guess
config.h.in
config.rpath
config.sub
configure.REMOVED.git-id
configure.ac.REMOVED.git-id
depcomp
install-sh
ltmain.sh.REMOVED.git-id
missing
mkinstalldirs
mono-uninstalled.pc.in
test-driver
winconfig.h
229 lines
7.0 KiB
VimL
229 lines
7.0 KiB
VimL
![]() |
" LLVM coding guidelines conformance for VIM
|
||
|
" $Revision$
|
||
|
"
|
||
|
" Maintainer: The LLVM Team, http://llvm.org
|
||
|
" WARNING: Read before you source in all these commands and macros! Some
|
||
|
" of them may change VIM behavior that you depend on.
|
||
|
"
|
||
|
" You can run VIM with these settings without changing your current setup with:
|
||
|
" $ vim -u /path/to/llvm/utils/vim/vimrc
|
||
|
|
||
|
" It's VIM, not VI
|
||
|
set nocompatible
|
||
|
|
||
|
" A tab produces a 2-space indentation
|
||
|
set softtabstop=2
|
||
|
set shiftwidth=2
|
||
|
set expandtab
|
||
|
|
||
|
" Highlight trailing whitespace and lines longer than 80 columns.
|
||
|
highlight LongLine ctermbg=DarkYellow guibg=DarkYellow
|
||
|
highlight WhitespaceEOL ctermbg=DarkYellow guibg=DarkYellow
|
||
|
if v:version >= 702
|
||
|
" Lines longer than 80 columns.
|
||
|
au BufWinEnter * let w:m0=matchadd('LongLine', '\%>80v.\+', -1)
|
||
|
|
||
|
" Whitespace at the end of a line. This little dance suppresses
|
||
|
" whitespace that has just been typed.
|
||
|
au BufWinEnter * let w:m1=matchadd('WhitespaceEOL', '\s\+$', -1)
|
||
|
au InsertEnter * call matchdelete(w:m1)
|
||
|
au InsertEnter * let w:m2=matchadd('WhitespaceEOL', '\s\+\%#\@<!$', -1)
|
||
|
au InsertLeave * call matchdelete(w:m2)
|
||
|
au InsertLeave * let w:m1=matchadd('WhitespaceEOL', '\s\+$', -1)
|
||
|
else
|
||
|
au BufRead,BufNewFile * syntax match LongLine /\%>80v.\+/
|
||
|
au InsertEnter * syntax match WhitespaceEOL /\s\+\%#\@<!$/
|
||
|
au InsertLeave * syntax match WhitespaceEOL /\s\+$/
|
||
|
endif
|
||
|
|
||
|
" Enable filetype detection
|
||
|
filetype on
|
||
|
|
||
|
" Optional
|
||
|
" C/C++ programming helpers
|
||
|
augroup csrc
|
||
|
au!
|
||
|
autocmd FileType * set nocindent smartindent
|
||
|
autocmd FileType c,cpp set cindent
|
||
|
augroup END
|
||
|
" Set a few indentation parameters. See the VIM help for cinoptions-values for
|
||
|
" details. These aren't absolute rules; they're just an approximation of
|
||
|
" common style in LLVM source.
|
||
|
set cinoptions=:0,g0,(0,Ws,l1
|
||
|
" Add and delete spaces in increments of `shiftwidth' for tabs
|
||
|
set smarttab
|
||
|
|
||
|
" Highlight syntax in programming languages
|
||
|
syntax on
|
||
|
|
||
|
" LLVM Makefiles can have names such as Makefile.rules or TEST.nightly.Makefile,
|
||
|
" so it's important to categorize them as such.
|
||
|
augroup filetype
|
||
|
au! BufRead,BufNewFile *Makefile* set filetype=make
|
||
|
augroup END
|
||
|
|
||
|
" In Makefiles, don't expand tabs to spaces, since we need the actual tabs
|
||
|
autocmd FileType make set noexpandtab
|
||
|
|
||
|
" Useful macros for cleaning up code to conform to LLVM coding guidelines
|
||
|
|
||
|
" Delete trailing whitespace and tabs at the end of each line
|
||
|
command! DeleteTrailingWs :%s/\s\+$//
|
||
|
|
||
|
" Convert all tab characters to two spaces
|
||
|
command! Untab :%s/\t/ /g
|
||
|
|
||
|
" Enable syntax highlighting for LLVM files. To use, copy
|
||
|
" utils/vim/syntax/llvm.vim to ~/.vim/syntax .
|
||
|
augroup filetype
|
||
|
au! BufRead,BufNewFile *.ll set filetype=llvm
|
||
|
augroup END
|
||
|
|
||
|
" Enable syntax highlighting for tablegen files. To use, copy
|
||
|
" utils/vim/syntax/tablegen.vim to ~/.vim/syntax .
|
||
|
augroup filetype
|
||
|
au! BufRead,BufNewFile *.td set filetype=tablegen
|
||
|
augroup END
|
||
|
|
||
|
" Enable syntax highlighting for reStructuredText files. To use, copy
|
||
|
" rest.vim (http://www.vim.org/scripts/script.php?script_id=973)
|
||
|
" to ~/.vim/syntax .
|
||
|
augroup filetype
|
||
|
au! BufRead,BufNewFile *.rst set filetype=rest
|
||
|
augroup END
|
||
|
|
||
|
" Additional vim features to optionally uncomment.
|
||
|
"set showcmd
|
||
|
"set showmatch
|
||
|
"set showmode
|
||
|
"set incsearch
|
||
|
"set ruler
|
||
|
|
||
|
" Clang code-completion support. This is somewhat experimental!
|
||
|
|
||
|
" A path to a clang executable.
|
||
|
let g:clang_path = "clang++"
|
||
|
|
||
|
" A list of options to add to the clang commandline, for example to add
|
||
|
" include paths, predefined macros, and language options.
|
||
|
let g:clang_opts = [
|
||
|
\ "-x","c++",
|
||
|
\ "-D__STDC_LIMIT_MACROS=1","-D__STDC_CONSTANT_MACROS=1",
|
||
|
\ "-Iinclude" ]
|
||
|
|
||
|
function! ClangComplete(findstart, base)
|
||
|
if a:findstart == 1
|
||
|
" In findstart mode, look for the beginning of the current identifier.
|
||
|
let l:line = getline('.')
|
||
|
let l:start = col('.') - 1
|
||
|
while l:start > 0 && l:line[l:start - 1] =~ '\i'
|
||
|
let l:start -= 1
|
||
|
endwhile
|
||
|
return l:start
|
||
|
endif
|
||
|
|
||
|
" Get the current line and column numbers.
|
||
|
let l:l = line('.')
|
||
|
let l:c = col('.')
|
||
|
|
||
|
" Build a clang commandline to do code completion on stdin.
|
||
|
let l:the_command = shellescape(g:clang_path) .
|
||
|
\ " -cc1 -code-completion-at=-:" . l:l . ":" . l:c
|
||
|
for l:opt in g:clang_opts
|
||
|
let l:the_command .= " " . shellescape(l:opt)
|
||
|
endfor
|
||
|
|
||
|
" Copy the contents of the current buffer into a string for stdin.
|
||
|
" TODO: The extra space at the end is for working around clang's
|
||
|
" apparent inability to do code completion at the very end of the
|
||
|
" input.
|
||
|
" TODO: Is it better to feed clang the entire file instead of truncating
|
||
|
" it at the current line?
|
||
|
let l:process_input = join(getline(1, l:l), "\n") . " "
|
||
|
|
||
|
" Run it!
|
||
|
let l:input_lines = split(system(l:the_command, l:process_input), "\n")
|
||
|
|
||
|
" Parse the output.
|
||
|
for l:input_line in l:input_lines
|
||
|
" Vim's substring operator is annoyingly inconsistent with python's.
|
||
|
if l:input_line[:11] == 'COMPLETION: '
|
||
|
let l:value = l:input_line[12:]
|
||
|
|
||
|
" Chop off anything after " : ", if present, and move it to the menu.
|
||
|
let l:menu = ""
|
||
|
let l:spacecolonspace = stridx(l:value, " : ")
|
||
|
if l:spacecolonspace != -1
|
||
|
let l:menu = l:value[l:spacecolonspace+3:]
|
||
|
let l:value = l:value[:l:spacecolonspace-1]
|
||
|
endif
|
||
|
|
||
|
" Chop off " (Hidden)", if present, and move it to the menu.
|
||
|
let l:hidden = stridx(l:value, " (Hidden)")
|
||
|
if l:hidden != -1
|
||
|
let l:menu .= " (Hidden)"
|
||
|
let l:value = l:value[:l:hidden-1]
|
||
|
endif
|
||
|
|
||
|
" Handle "Pattern". TODO: Make clang less weird.
|
||
|
if l:value == "Pattern"
|
||
|
let l:value = l:menu
|
||
|
let l:pound = stridx(l:value, "#")
|
||
|
" Truncate the at the first [#, <#, or {#.
|
||
|
if l:pound != -1
|
||
|
let l:value = l:value[:l:pound-2]
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
" Filter out results which don't match the base string.
|
||
|
if a:base != ""
|
||
|
if l:value[:strlen(a:base)-1] != a:base
|
||
|
continue
|
||
|
end
|
||
|
endif
|
||
|
|
||
|
" TODO: Don't dump the raw input into info, though it's nice for now.
|
||
|
" TODO: The kind string?
|
||
|
let l:item = {
|
||
|
\ "word": l:value,
|
||
|
\ "menu": l:menu,
|
||
|
\ "info": l:input_line,
|
||
|
\ "dup": 1 }
|
||
|
|
||
|
" Report a result.
|
||
|
if complete_add(l:item) == 0
|
||
|
return []
|
||
|
endif
|
||
|
if complete_check()
|
||
|
return []
|
||
|
endif
|
||
|
|
||
|
elseif l:input_line[:9] == "OVERLOAD: "
|
||
|
" An overload candidate. Use a crazy hack to get vim to
|
||
|
" display the results. TODO: Make this better.
|
||
|
let l:value = l:input_line[10:]
|
||
|
let l:item = {
|
||
|
\ "word": " ",
|
||
|
\ "menu": l:value,
|
||
|
\ "info": l:input_line,
|
||
|
\ "dup": 1}
|
||
|
|
||
|
" Report a result.
|
||
|
if complete_add(l:item) == 0
|
||
|
return []
|
||
|
endif
|
||
|
if complete_check()
|
||
|
return []
|
||
|
endif
|
||
|
|
||
|
endif
|
||
|
endfor
|
||
|
|
||
|
|
||
|
return []
|
||
|
endfunction ClangComplete
|
||
|
|
||
|
" This to enables the somewhat-experimental clang-based
|
||
|
" autocompletion support.
|
||
|
set omnifunc=ClangComplete
|