[PATCH] D92663: [clangd] Add hot-reload of compile_commands.json and compile_flags.txt
Kadir Cetinkaya via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 9 07:40:29 PST 2020
kadircet added a comment.
this mostly LGTM. there are some changes to the existing behavior; like discovery order and not looking for other plugins under `build/`, but they seem like non-harmful changes to me.
my biggest question is, have we considered updating `CompilationDatabasePlugin` interface to provide a `loadFromBuffer` and `relativeFileName` virtual methods. I think loading logic could've been a lot simpler and more uniform that way.
i think we discussed this option but i don't remember the outcome, sorry :(.
================
Comment at: clang-tools-extra/clangd/GlobalCompilationDatabase.cpp:185
+ bool MayCache = load(*TFS.view(/*CWD=*/llvm::None));
+ if (MayCache) {
+ // Use new timestamp, as loading may be slow.
----------------
nit: inline `MayCache`
================
Comment at: clang-tools-extra/clangd/GlobalCompilationDatabase.cpp:205
+ auto Stat = FS.status(Path);
+ if (!Stat || !Stat->isRegularFile()) {
+ Size = NoFileCached;
----------------
what about symlinks ? i think users usually have `cc.json -> obscure_build_dir/cc.json` as a symlink.
================
Comment at: clang-tools-extra/clangd/GlobalCompilationDatabase.cpp:224
+ if (HasOldData && NewContentHash == ContentHash)
+ // mtime changed but data is the same: avoid rebuilding the CDB.
+ return {LoadResult::FoundSameData, nullptr};
----------------
also update cached mtime ?
================
Comment at: clang-tools-extra/clangd/GlobalCompilationDatabase.cpp:267
+ // Wrapper for {Fixed,JSON}CompilationDatabase::loadFromBuffer.
+ std::unique_ptr<tooling::CompilationDatabase> (*Parser)(
+ PathRef,
----------------
nit: can we have a functor(probably llvm::function_ref) rather than a function pointer?
================
Comment at: clang-tools-extra/clangd/GlobalCompilationDatabase.cpp:322
+ auto Plugin = Entry.instantiate();
+ if (auto CDB = Plugin->loadFromDirectory(Path, Error)) {
+ log("Loaded compilation database from {0} with plugin {1}", Path,
----------------
it is not crucial but we used to try to load these from `Path + "/build"` as well
================
Comment at: clang-tools-extra/clangd/GlobalCompilationDatabase.cpp:456
CDBLookupResult Result) const {
+ vlog("Broadcasting compilation database from {0}", Result.PI.SourceRoot);
assert(Result.CDB && "Trying to broadcast an invalid CDB!");
----------------
why not `log` instead of `vlog`? this shouldn't be too noisy anyway.
================
Comment at: clang-tools-extra/clangd/GlobalCompilationDatabase.h:133
+
+ std::chrono::steady_clock::duration RevalidateAfter;
+ std::chrono::steady_clock::duration RevalidateMissingAfter;
----------------
why not directly store `Options` ?
================
Comment at: clang-tools-extra/clangd/unittests/GlobalCompilationDatabaseTests.cpp:393
+
+auto HasFlag(llvm::StringRef Flag) { return HasFlag(Flag, "dummy.cc"); }
+
----------------
nit: maybe a `MATCHER_P` instead ?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D92663/new/
https://reviews.llvm.org/D92663
More information about the cfe-commits
mailing list