[PATCH] D53433: [clangd] auto-index stores symbols per-file instead of per-TU.

Eric Liu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Oct 30 05:51:04 PDT 2018


ioeric added inline comments.


================
Comment at: clangd/index/Background.cpp:311
   SPAN_ATTACH(Tracer, "refs", int(Refs.numRefs()));
-  // FIXME: partition the symbols by file rather than TU, to avoid duplication.
-  IndexedSymbols.update(AbsolutePath,
-                        llvm::make_unique<SymbolSlab>(std::move(Symbols)),
-                        llvm::make_unique<RefSlab>(std::move(Refs)));
-  FileHash[AbsolutePath] = Hash;
+  update(AbsolutePath, std::move(Symbols), std::move(Refs), FilesToUpdate);
+  IndexedFileDigests[AbsolutePath] = Hash;
----------------
sammccall wrote:
> It looks like you never write the FilesToUpdate hashes back to the IndexedFileDigests, so we'll always update headers?
It's updated in `update` when slabs are updated.


================
Comment at: clangd/index/Background.h:55
 
+  using FileDigest = decltype(llvm::SHA1::hash({}));
+  using FileDigests = llvm::StringMap<FileDigest>;
----------------
sammccall wrote:
> private.
These are also used in some helpers in the cpp file. I can make these private and make those helper members if you think it would be better?


================
Comment at: clangd/index/FileIndex.cpp:140
+  }
+  case DuplicateHandling::PickOne: {
+    for (const auto &Slab : SymbolSlabs)
----------------
sammccall wrote:
> since we're deduplicating above, we could deduplicate here too and remove the deduplicating logic from Dex (MemIndex gets it by mistake). That would avoid duplicated deduplication (!) in the Merge + Dex case, and seems a little cleaner.
> 
> Not something for this patch, but maybe add a FIXME.
Added the duduplication for the PickOne case. 


================
Comment at: clangd/index/SymbolCollector.cpp:442
+  auto DefLoc = MI->getDefinitionLoc();
+  // FIXME: use the result to filter out symbols.
+  shouldIndexFile(SM, SM.getFileID(Loc), Opts, &FilesToIndexCache);
----------------
sammccall wrote:
> just to check - this is basically trivial to do now but would need tests etc?
> (fine to defer from this patch)
Do you mean just do this for macros for now? Yes, changes for macros should be trivial.


================
Comment at: clangd/index/SymbolCollector.h:78
+    /// `FileFilter(SM, FID)` is true. If not set, all files are indexed.
+    std::function<bool(const SourceManager &, FileID)> FileFilter = nullptr;
   };
----------------
sammccall wrote:
> I think we should explicitly test this in SymbolCollectorTests - I think it should be straightforward?
This should be trivial for macros, but we still need some refactoring to make it work for symbols (e.g. `addDeclaration` doesn't support dropping symbols). 


================
Comment at: unittests/clangd/BackgroundIndexTests.cpp:33
+      #if A
+        class A_H {};
+      #else
----------------
sammccall wrote:
> naming here seems confusing: A_H seems to refer to the header, but then what does B_H refer to?
Changed to A_CC and B_CC


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D53433





More information about the cfe-commits mailing list