sammccall added inline comments.

================
Comment at: clang-tools-extra/clangd/GlobalCompilationDatabase.cpp:94
+
+  // It doesn't make sense to perform a traversal if user said their 
compilation
+  // database is in a different place. Return that directory for all files.
----------------
The duplication here is a bit troublesome.

And we have divergences in behavior - probably not important ones, but I can't 
say I know for sure. (e.g. here we won't create the CDB as a side-effect of 
getPathInfo() if there's a CompileCommandsDir, and will return the dir even if 
the CDB doesn't exist)

I think we might want to have some central logic parameterized by a struct, e.g.
```
struct DirectoryBasedCompilationDatabase::Lookup {
  // inputs
  PathRef File;
  bool ShouldBroadcast;

  // outputs
  tooling::CompilationDatabase *CDB;
  ProjectInfo Info;
  bool EverBroadcast;
};
lookupCDB(Lookup); // replaces getCDBInDirLocked
```


================
Comment at: clang-tools-extra/clangd/GlobalCompilationDatabase.cpp:176
+    std::vector<std::string> GovernedFiles;
+    for (llvm::StringRef File : CDB->getAllFiles()) {
+      auto PI = getProjectInfo(File);
----------------
here we're locking/unlocking the mutex maybe thousands of times, to do mostly 
redundant lookups into the cache

Seems worth doing at least one of:
 - deduplicate directories, so we lock once for each distinct directory and 
build a string->bool map. Then use that map to filter the results
 - lock around the whole loop and use getCDBInDirLocked()


================
Comment at: clang-tools-extra/clangd/index/Background.cpp:653
+    auto PI = CDB.getProjectInfo(File);
+    assert(PI && "Found CDB but no ProjectInfo!");
+
----------------
This looks like a bad assertion: it should be OK to provide compile commands 
but not project info.

(Otherwise getProjectInfo should be pure virtual, but I'm concerned about the 
raciness if we're going to insist they're consistent but not provide any way of 
synchronizing)

I'd suggest we should just not index such files (for now). Later we can start 
passing "" to the index storage factory to get the fallback storage (I think 
today we pass "", but the factory doesn't handle it - oops!)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D64247/new/

https://reviews.llvm.org/D64247



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to