#ifndef CXX_PARSER_H #define CXX_PARSER_H #include "data/parser/Parser.h" class CanonicalFilePathCache; class CxxDiagnosticConsumer; class FilePath; class FileRegister; class IndexerCommandCxxCdb; class IndexerCommandCxxEmpty; class TaskParseCxx; namespace clang { namespace tooling { class CompilationDatabase; class FixedCompilationDatabase; } } class CxxParser: public Parser { public: CxxParser(std::shared_ptr client, std::shared_ptr fileRegister); ~CxxParser(); void buildIndex(std::shared_ptr indexerCommand); void buildIndex(std::shared_ptr indexerCommand); void buildIndex(const std::string& fileName, std::shared_ptr fileContent, std::vector compilerFlags = {}); private: void runTool(clang::tooling::CompilationDatabase* compilationDatabase, const FilePath& sourceFilePath); std::vector getCommandlineArgumentsEssential( const std::vector& compilerFlags, const std::vector& systemHeaderSearchPaths, const std::vector& frameworkSearchPaths) const; std::vector getCommandlineArguments(std::shared_ptr indexerCommand) const; std::shared_ptr getDiagnostics(std::shared_ptr canonicalFilePathCache, bool logErrors) const; friend class TaskParseCxx; std::shared_ptr m_fileRegister; }; #endif // CXX_PARSER_H