Skip to content

Instantly share code, notes, and snippets.

@jassinm
Last active April 7, 2020 04:05
Show Gist options
  • Select an option

  • Save jassinm/4950253 to your computer and use it in GitHub Desktop.

Select an option

Save jassinm/4950253 to your computer and use it in GitHub Desktop.

Revisions

  1. jassinm revised this gist Feb 18, 2013. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions .ycm_extra_conf.py
    Original file line number Diff line number Diff line change
    @@ -50,12 +50,12 @@ def MakeRelativePathsInFlagsAbsolute(flags, working_directory):
    for path_flag in path_flags:
    if flag == path_flag:
    make_next_absolute = True
    break
    break

    if flag.startswith(path_flag):
    path = flag[len(path_flag):]
    new_flag = path_flag + os.path.join(working_directory, path)
    break
    break

    if new_flag:
    new_flags.append(new_flag)
  2. jassinm renamed this gist Feb 14, 2013. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  3. jassinm revised this gist Feb 14, 2013. 1 changed file with 1 addition and 3 deletions.
    4 changes: 1 addition & 3 deletions cpp_ycm.py
    Original file line number Diff line number Diff line change
    @@ -20,9 +20,7 @@
    '-I',
    '.',
    '-isystem',
    '/usr/include/c++/4.2.1/',
    '-isystem',
    '/usr/include/c++/4.2.1/tr1/'
    '/usr/lib/c++/v1'
    ]

    if compilation_database_folder:
  4. jassinm renamed this gist Feb 14, 2013. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  5. jassinm created this gist Feb 14, 2013.
    83 changes: 83 additions & 0 deletions cpp_ycm
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,83 @@
    import os
    import ycm_core
    from clang_helpers import PrepareClangFlags

    # 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 = ''

    # These are the compilation flags that will be used in case there's no
    # compilation database set.
    flags = [
    '-Wall',
    '-std=c++11',
    '-stdlib=libc++',
    '-x',
    'c++',
    '-I',
    '.',
    '-isystem',
    '/usr/include/c++/4.2.1/',
    '-isystem',
    '/usr/include/c++/4.2.1/tr1/'
    ]

    if compilation_database_folder:
    database = ycm_core.CompilationDatabase(compilation_database_folder)
    else:
    database = None


    def DirectoryOfThisScript():
    return os.path.dirname(os.path.abspath(__file__))


    def MakeRelativePathsInFlagsAbsolute(flags, working_directory):
    if not working_directory:
    return 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):
    if database:
    # Bear in mind that compilation_info.compiler_flags_ does NOT return a
    # python list, but a "list-like" StringVec object
    compilation_info = database.GetCompilationInfoForFile(filename)
    final_flags = PrepareClangFlags(
    MakeRelativePathsInFlagsAbsolute(
    compilation_info.compiler_flags_,
    compilation_info.compiler_working_dir_),
    filename)
    else:
    relative_to = DirectoryOfThisScript()
    final_flags = MakeRelativePathsInFlagsAbsolute(flags, relative_to)

    return {
    'flags': final_flags,
    'do_cache': True}