vim中YouCompleteMe插件.vim_extra_conf.py配置

flags中内容自定义。

# This file is NOT licensed under the GPLv3, which is the license for the rest

# of YouCompleteMe.

#

# Here's the license text for this file:

#

# This is free and unencumbered software released into the public domain.

#

# Anyone is free to copy, modify, publish, use, compile, sell, or

# distribute this software, either in source code form or as a compiled

# binary, for any purpose, commercial or non-commercial, and by any

# means.

#

# In jurisdictions that recognize copyright laws, the author or authors

# of this software dedicate any and all copyright interest in the

# software to the public domain. We make this dedication for the benefit

# of the public at large and to the detriment of our heirs and

# successors. We intend this dedication to be an overt act of

# relinquishment in perpetuity of all present and future rights to this

# software under copyright law.

#

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,

# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF

# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.

# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR

# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,

# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR

# OTHER DEALINGS IN THE SOFTWARE.

#

# For more information, please refer to <http://unlicense.org/>

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 = [

'-x', 'c++',

'-Wall',

'-Wextra',

'-fPIE',

'-D_REENTRANT',

'-std=c++11',

'-isystem'
'/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1'
'-isystem'
'/usr/local/include'
'-isystem'
'/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.0/include'
'-isystem'
'/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include'
'-isystem'
'/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include'
'-isystem'
'/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks (framework directory)'

]

# 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. Notice that YCM itself uses that approach.

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 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 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 )

def FlagsForFile( filename, **kwargs ):

  if database:

    # Bear in mind that compilation_info.compiler_flags_ does NOT return a

    # python list, but a "list-like" StringVec object

    compilation_info = GetCompilationInfoForFile( filename )

    if not compilation_info:

      return None

    final_flags = MakeRelativePathsInFlagsAbsolute(

      compilation_info.compiler_flags_,

      compilation_info.compiler_working_dir_ )

  else:

    relative_to = DirectoryOfThisScript()

    final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to )

  return {

    'flags': final_flags,

    'do_cache': True

  }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值