-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path.ycm_extra_conf.py
79 lines (61 loc) · 2.19 KB
/
.ycm_extra_conf.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import os
CPP_FLAGS = [
'-Wextra',
'-DDEBUG',
'-DUSE_LOG4CPLUS_LOGGER',
'-std=c++11',
# ...and the same thing goes for the magic -x option which specifies the
# language that the files to be compiled are written in. This is mostly
# relevant for c++ headers.
# For a C project, you would set this to 'c' instead of 'c++'.
'-x',
'c++',
'-I/usr/local/include',
'-Isrc',
'-Itest',
'-Ithirdparty/gtest',
'-Ithirdparty',
'-I.',
'-I${BOOST_HOME}/include',
'-I${LOG4CPLUS_HOME}/include']
SOURCE_EXTENSIONS = ['.cpp', '.cxx', '.cc', '.c', '.m', '.mm']
def directory_of_this_script():
return os.path.dirname(os.path.abspath(__file__))
def expand_rel_path(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):]
# expand env vars if present
if '$' in path:
new_flag = path_flag + os.path.expandvars(path)
else:
new_flag = path_flag + os.path.join(working_directory, path)
break
if new_flag:
new_flags.append(new_flag)
return new_flags
def is_header_file(filename):
extension = os.path.splitext(filename)[1]
return extension in ['.h', '.hxx', '.hpp', '.hh']
def FlagsForFile(filename, **kwargs): # pylint: disable=invalid-name
''' This method is called by YCM to get compilation flags for each file '''
_ = filename, kwargs
relative_to = directory_of_this_script()
final_flags = expand_rel_path(CPP_FLAGS, relative_to)
return {'flags': final_flags, 'do_cache': True}
# "Test flags"
# print flags_for_file("test.cpp")