//===--- CompileArgsCache.h -------------------------------------*- C++-*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===---------------------------------------------------------------------===// #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_COMPILEARGSCACHE_H #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_COMPILEARGSCACHE_H #include "GlobalCompilationDatabase.h" #include "Path.h" #include "clang/Tooling/CompilationDatabase.h" namespace clang { namespace clangd { /// A helper class used by ClangdServer to get compile commands from CDB. /// Also caches CompileCommands produced by compilation database on per-file /// basis. This avoids queries to CDB that can be much more expensive than a /// table lookup. class CompileArgsCache { public: CompileArgsCache(GlobalCompilationDatabase &CDB, Path ResourceDir); /// Gets compile command for \p File from cache or CDB if it's not in the /// cache. tooling::CompileCommand getCompileCommand(PathRef File); /// Removes a cache entry for \p File, if it's present in the cache. void invalidate(PathRef File); private: GlobalCompilationDatabase &CDB; const Path ResourceDir; llvm::StringMap Cached; }; } // namespace clangd } // namespace clang #endif