sammccall added a comment.

Going to leave awkward comments suggesting we expand the scope a bit.
Full disclosure: file dependency information is something that's come up as 
useful in lots of contexts.



================
Comment at: clangd/index/Serialization.cpp:469
 
+  // There's no point in putting headers without digest of the source file.
+  // Because they will only be needed whenever we have an up-to-date index 
file.
----------------
This seems like unneccesary coupling between layers. On the contrary, I think 
it's going to be really useful to have file and dependency information in the 
index data and in the in-memory index.
(e.g. for #include completion, more accurately guessing compile commands for 
headers, deciding which CC file corresponds to a .h file and vice versa...)


================
Comment at: clangd/index/Serialization.h:46
+  // URIs of headers directly included in the source file.
+  llvm::Optional<std::vector<std::string>> DirectIncludes;
 };
----------------
This seems a little off to me conceptually: an index contains symbols that 
might be from many files. (Also true of Digest, which I missed).

I'd suggest a richer structure which can represent one or many files:
```
std::unordered_map</*uri*/string, SourceFile>; // keys are URIs
struct SourceFile {
  bool IsTU;
  StringRef URI; // points back into key
  FileDigest Digest;
  vector<StringRef> Headers; // points back into keys
  // maybe later: compile command
}
```
(though probably wrap the map into a class to ensure the string ownership 
doesn't get messed up)

For auto-index shards we could include full SourceFile info for the main file 
(with IsTU = true, and headers) and each of the headers would have a skeletal 
entry with IsTU = false and no headers stored.

But clangd-indexer could spit out an index that contains full information for 
all the transitive include of all indexed TUs.


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D54817



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

Reply via email to