#pragma once #include #include #include #include #include // TODO: // - rename indexer.h to clang_indexer.h and pull out non-clang specific code // like IndexFile // - rename this file to indexer.h struct Config; struct IndexFile; struct FileContents; struct FileConsumerSharedState; struct PerformanceImportFile; // Abstracts away the actual indexing process. Each IIndexer instance is // per-thread and constructing an instance may be extremely expensive (ie, // acquire a lock) and should be done as rarely as possible. struct IIndexer { struct TestEntry { std::string path; int num_indexes = 0; TestEntry(const std::string& path, int num_indexes); }; static std::unique_ptr MakeClangIndexer(); static std::unique_ptr MakeTestIndexer( std::initializer_list entries); virtual ~IIndexer() = default; virtual optional>> Index( Config* config, FileConsumerSharedState* file_consumer_shared, std::string file, const std::vector& args, const std::vector& file_contents, PerformanceImportFile* perf) = 0; };