X-Git-Url: https://git.rmz.io/dotfiles.git/blobdiff_plain/831cc30cdc00e9aaad1b95f839f585a406bbb455..4bdc61c5a84bf3525cdc4a43c24cf6c871a28680:/vim/ycm_extra_conf.py?ds=sidebyside diff --git a/vim/ycm_extra_conf.py b/vim/ycm_extra_conf.py new file mode 100644 index 0000000..391fa8c --- /dev/null +++ b/vim/ycm_extra_conf.py @@ -0,0 +1,86 @@ +import os +import shlex +import subprocess +import ycm_core + +# These are the compilation flags that will be used in case there's no +# compilation database set (by default, one is not set). +# CHANGE THIS LIST OF FLAGS. YES, THIS IS THE DROID YOU HAVE BEEN LOOKING FOR. +flags = [ +'-Wall', +# '-Wextra', +# '-Wshadow', +# '-Werror', +# '-Wc++98-compat', +# '-Wno-long-long', +# '-Wno-variadic-macros', +# '-fexceptions', +# '-DNDEBUG', +'-std=c++11', +'-stdlib=libc++', +'-x', 'c++', +'-I', '.', +'-I', './include', +'-isystem', '/usr/include/c++/4.9.0', +'-isystem', '/usr/include/c++/4.9.0/x86_64-unknown-linux-gnu', +'-isystem', '/usr/include/c++/4.9.0/backward', +'-isystem', '/usr/lib/clang/3.4.1/include' +] + +# This function makes it easy to pull in additional flags from rospack +def rospack(): + cmd = ['rospack', 'cflags-only-I'] + try: + out = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE).stdout + except: + return [] + line = out.readline()[:-1].split(" ") + includes = [] + for include in line: + if include.startswith(os.path.expanduser('~')): + includes += ['-I', include] + else: + includes += ['-isystem', include] + return filter(lambda a: a != ' ', includes) + +flags += rospack() + +def DirectoryOfThisScript(): + return os.path.dirname( os.path.abspath( __file__ ) ) + +def MakeRelativePathsInFlagsAbsolute( flags, working_directory ): + if not working_directory: + return list( flags ) + new_flags = [] + make_next_absolute = False + path_flags = [ '-isystem', '-I', '-iquote', '--sysroot=' ] + for flag in flags: + new_flag = flag + + if make_next_absolute: + make_next_absolute = False + if not flag.startswith( '/' ): + new_flag = os.path.join( working_directory, flag ) + + for path_flag in path_flags: + if flag == path_flag: + make_next_absolute = True + break + + if flag.startswith( path_flag ): + path = flag[ len( path_flag ): ] + new_flag = path_flag + os.path.join( working_directory, path ) + break + + if new_flag: + new_flags.append( new_flag ) + return new_flags + +def FlagsForFile( filename, **kwargs ): + relative_to = DirectoryOfThisScript() + final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to ) + + return { + 'flags': final_flags, + 'do_cache': True + }