[PATCH] D54817: [clangd] Put direct headers into srcs section.
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Nov 27 04:53:28 PST 2018
sammccall added a comment.
structure and serialization stuff looks great!
still some questions around the auto-index logic and organization of the extraction code, let's chat offline. May make sense to split.
================
Comment at: clangd/index/Background.cpp:329
+llvm::StringMap<IndexFileIn::SourceFile>
+IncludeStructureToSources(llvm::StringRef MainFile,
+ const IncludeStructure &Includes,
----------------
nit: lowercase
================
Comment at: clangd/index/Background.cpp:341
+ std::string FileURI = URI::create(Dependency).toString();
+ auto Buf = FS->getBufferForFile(Dependency);
+ if (!Buf)
----------------
It looks like you're re-reading the files here. this won't reuse in-memory copies of the file, and won't respect overridden contents outside the VFS (ugh). The SourceManager would be better I think.
================
Comment at: clangd/index/Background.cpp:351
+ SF.Digest = std::move(Digest);
+ for (const auto &Include : Includes.includeDepth(Dependency)) {
+ if (Include.getValue() != 1) // Skip transitive includes.
----------------
I don't think this is going to work:
- you're outputting the non-transitive dependencies from the TU, but I think you want the *transitive* ones, which should then be partitioned by file (same as symbols). Otherwise the headers from the shard for `foo.h` aren't going to be right, are they?
- I don't think the current IncludeStructure includes all the info you want for transitive includes. e.g. for include edges A->B where there is a shorter path from Main->B, we don't record anything.
- I think we will want the include information for other forms of index too. I think this means the logic should be next to symbolcollector, or in Headers.h, where it can be shared
================
Comment at: clangd/index/Serialization.cpp:400
+ Entry->getValue() = std::move(SF);
+ Entry->getValue().FileURI = Entry->getKey();
+ for(auto &Include : Entry->getValue().DirectIncludes)
----------------
these string reassignments deserve a comment
================
Comment at: clangd/index/Serialization.h:41
using FileDigest = std::array<uint8_t, 20>;
+ // Contains information about one source file that participates in current
+ // index file.
----------------
Does this belong here, vs in Index, or SymbolCollector, or so?
================
Comment at: clangd/index/Serialization.h:53
+ // Keys are URIs of the source files.
+ llvm::Optional<llvm::StringMap<SourceFile>> Sources;
};
----------------
I think the StringMap could also use a typedef near SourceFile - that's where we could mention that FileURI and DirectIncludes point back at the keys.
Repository:
rCTE Clang Tools Extra
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D54817/new/
https://reviews.llvm.org/D54817
More information about the cfe-commits
mailing list