#pragma once // FIXME: do not include clang-c outside of clang_ files. #include #include #include #include #include #include #include #include struct ClangTranslationUnit; class DiagnosticsEngine; struct FileConsumerSharedState; struct ICacheManager; struct ImportManager; struct MultiQueueWaiter; struct Project; struct QueryDatabase; struct SemanticHighlightSymbolCache; struct WorkingFiles; // Caches timestamps of cc files so we can avoid a filesystem reads. This is // important for import perf, as during dependency checking the same files are // checked over and over again if they are common headers. struct TimestampManager { std::optional GetLastCachedModificationTime(ICacheManager* cache_manager, const std::string& path); void UpdateCachedModificationTime(const std::string& path, int64_t timestamp); // TODO: use std::shared_mutex so we can have multiple readers. std::mutex mutex_; std::unordered_map timestamps_; }; struct ImportPipelineStatus { std::atomic num_active_threads; std::atomic next_progress_output; ImportPipelineStatus(); }; void IndexWithTuFromCodeCompletion( FileConsumerSharedState* file_consumer_shared, ClangTranslationUnit* tu, const std::vector& file_contents, const std::string& path, const std::vector& args); void Indexer_Main(DiagnosticsEngine* diag_engine, FileConsumerSharedState* file_consumer_shared, TimestampManager* timestamp_manager, ImportManager* import_manager, ImportPipelineStatus* status, Project* project, WorkingFiles* working_files, MultiQueueWaiter* waiter); bool QueryDb_ImportMain(QueryDatabase* db, ImportManager* import_manager, ImportPipelineStatus* status, SemanticHighlightSymbolCache* semantic_cache, WorkingFiles* working_files);