#pragma once #include "language_server_api.h" #include #include #include #include #include #include using std::experimental::optional; using std::experimental::nullopt; struct Project { struct Entry { std::string filename; std::vector args; }; std::vector entries; spp::sparse_hash_map absolute_path_to_entry_index_; // Loads a project for the given |directory|. // // If |directory| contains a compile_commands.json file, that will be used to // discover all files and args. Otherwise, a recursive directory listing of // all *.cpp, *.cc, *.h, and *.hpp files will be used. clang arguments can be // specified in a clang_args file located inside of |directory|. void Load(const std::vector& extra_flags, const std::string& directory); // Lookup the CompilationEntry for |filename|. optional FindCompilationEntryForFile(const std::string& filename); // Helper that uses FindCompilationEntryForFile. optional> FindArgsForFile(const std::string& filename); void ForAllFilteredFiles(IndexerConfig* config, std::function action); };