aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYunchih Chen <yunchih.cat@gmail.com>2018-12-07 22:17:14 +0800
committerYunchih Chen <yunchih.cat@gmail.com>2019-03-07 15:02:17 +0800
commit47bda70fb4cba47720e8aaca80e28985b7c7d99d (patch)
tree0e7baa944f57e2046755f0306fcb1aabd3144cb9
parent644b830057bcc29d960a89198d3709902a51b8fe (diff)
downloadnfcollect-47bda70fb4cba47720e8aaca80e28985b7c7d99d.tar
nfcollect-47bda70fb4cba47720e8aaca80e28985b7c7d99d.tar.gz
nfcollect-47bda70fb4cba47720e8aaca80e28985b7c7d99d.tar.bz2
nfcollect-47bda70fb4cba47720e8aaca80e28985b7c7d99d.tar.lz
nfcollect-47bda70fb4cba47720e8aaca80e28985b7c7d99d.tar.xz
nfcollect-47bda70fb4cba47720e8aaca80e28985b7c7d99d.tar.zst
nfcollect-47bda70fb4cba47720e8aaca80e28985b7c7d99d.zip
Add .ycm_extra_conf.py
-rw-r--r--.ycm_extra_conf.py100
1 files changed, 100 insertions, 0 deletions
diff --git a/.ycm_extra_conf.py b/.ycm_extra_conf.py
new file mode 100644
index 0000000..62acb50
--- /dev/null
+++ b/.ycm_extra_conf.py
@@ -0,0 +1,100 @@
+# Copyright (C) 2014 Google Inc.
+#
+# This file is part of ycmd.
+#
+# ycmd is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# ycmd is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with ycmd. If not, see <http://www.gnu.org/licenses/>.
+
+import os
+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',
+ '-Werror',
+ '-fexceptions',
+ '-DNDEBUG',
+ '-DPACKAGE',
+ '-std=c99',
+ '-x',
+ 'c',
+ '-isystem',
+ '/usr/include',
+ '-I./include',
+]
+
+
+# Set this to the absolute path to the folder (NOT the file!) containing the
+# compile_commands.json file to use that instead of 'flags'. See here for
+# more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html
+#
+# Most projects will NOT need to set this to anything; you can just change the
+# 'flags' list of compilation flags.
+compilation_database_folder = ''
+
+if os.path.exists( compilation_database_folder ):
+ database = ycm_core.CompilationDatabase( compilation_database_folder )
+else:
+ database = None
+
+SOURCE_EXTENSIONS = [ '.cpp', '.cxx', '.cc', '.c', '.m', '.mm' ]
+
+def DirectoryOfThisScript():
+ return os.path.dirname( os.path.abspath( __file__ ) )
+
+
+def IsHeaderFile( filename ):
+ extension = os.path.splitext( filename )[ 1 ]
+ return extension in [ '.h', '.hxx', '.hpp', '.hh' ]
+
+
+def GetCompilationInfoForFile( filename ):
+ # The compilation_commands.json file generated by CMake does not have entries
+ # for header files. So we do our best by asking the db for flags for a
+ # corresponding source file, if any. If one exists, the flags for that file
+ # should be good enough.
+ if IsHeaderFile( filename ):
+ basename = os.path.splitext( filename )[ 0 ]
+ for extension in SOURCE_EXTENSIONS:
+ replacement_file = basename + extension
+ if os.path.exists( replacement_file ):
+ compilation_info = database.GetCompilationInfoForFile(
+ replacement_file )
+ if compilation_info.compiler_flags_:
+ return compilation_info
+ return None
+ return database.GetCompilationInfoForFile( filename )
+
+
+# This is the entry point; this function is called by ycmd to produce flags for
+# a file.
+def FlagsForFile( filename, **kwargs ):
+ if not database:
+ return {
+ 'flags': flags,
+ 'include_paths_relative_to_dir': DirectoryOfThisScript()
+ }
+
+ compilation_info = GetCompilationInfoForFile( filename )
+ if not compilation_info:
+ return None
+
+ # Bear in mind that compilation_info.compiler_flags_ does NOT return a
+ # python list, but a "list-like" StringVec object.
+ return {
+ 'flags': list( compilation_info.compiler_flags_ ),
+ 'include_paths_relative_to_dir': compilation_info.compiler_working_dir_
+ }