+def flags_for_compilation_database(root, filename):
+ try:
+ compilation_db_path = find_nearest_compilation_database(root)
+ compilation_db_dir = os.path.dirname(compilation_db_path)
+ logging.info("Set compilation database directory to " + compilation_db_dir)
+ compilation_db = ycm_core.CompilationDatabase(compilation_db_dir)
+ if not compilation_db:
+ logging.info("Compilation database file found but unable to load")
+ return None
+ compilation_info = get_compilation_info_for_file(
+ compilation_db_path, compilation_db, filename)
+ if not compilation_info:
+ logging.info("No compilation info for " + filename + " in compilation database")
+ return None
+ return make_relative_paths_in_flags_absolute(
+ compilation_info.compiler_flags_,
+ compilation_info.compiler_working_dir_)
+ except Exception as err:
+ logging.info("Error while trying to get flags for " + filename + " in compilation database")
+ logging.error(err)
+ return None
+
+
+def FlagsForFile(filename, **kwargs):
+ client_data = kwargs['client_data']
+ root = client_data['getcwd()']
+
+ compilation_db_flags = flags_for_compilation_database(root, filename)
+ if compilation_db_flags:
+ final_flags = compilation_db_flags
+ else:
+ final_flags = BASE_FLAGS
+ include_flags = flags_for_include(root)
+ if include_flags:
+ final_flags = final_flags + include_flags
+
+ final_flags += generate_qt_flags()
+ final_flags += [
+ '-I', root,
+ '-I', root + '/include',
+ ]
+ return {
+ 'flags': final_flags + EXTRA_FLAGS,
+ 'do_cache': True
+ }