blob: 49d88758104abd148aabbe88086cd780a1413e59 [file] [log] [blame]
//===--- 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<tooling::CompileCommand> Cached;
};
} // namespace clangd
} // namespace clang
#endif