]> git.rmz.io Git - dotfiles.git/blobdiff - vim/ycm_extra_conf.py
vim: add global ycm_extra_conf
[dotfiles.git] / vim / ycm_extra_conf.py
diff --git a/vim/ycm_extra_conf.py b/vim/ycm_extra_conf.py
new file mode 100644 (file)
index 0000000..391fa8c
--- /dev/null
@@ -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
+  }