[PATCH] D59481: [clangd] Count number of references while merging RefSlabs inside FileIndex

Ilya Biryukov via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed May 8 06:03:03 PDT 2019


ilya-biryukov added inline comments.


================
Comment at: clang-tools-extra/clangd/index/Background.cpp:482
     FileDigest Digest;
+    bool IsMainFile;
   };
----------------
NIT: maybe initialize with `=false` to avoid potential UB.
`Digest` seems uninitialized too, could also `={}` for it.

Sorry if this was discussed before and I'm repeating myself, I vaguely remember something similar but not sure what the conclusion was.


================
Comment at: clang-tools-extra/clangd/index/FileIndex.cpp:116
+      RefSlabs.push_back(FileAndRefs.second.first);
+      if (FileAndRefs.second.second)
+        MainFileRefs.push_back(RefSlabs.back().get());
----------------
Let's use a named struct here? `.second.second` is super-hard to read


================
Comment at: clang-tools-extra/clangd/index/FileIndex.cpp:125
+    // Keeps index to symbol in SymsStorage.
+    llvm::DenseMap<SymbolID, size_t> Merged;
     for (const auto &Slab : SymbolSlabs) {
----------------
Could we avoid changing the merge logic?
I.e. the proposal is to keep the merging code the same and add a loop that counts references at the end.


================
Comment at: clang-tools-extra/clangd/index/FileIndex.h:60
+///
+/// Will count Symbol::References based on number of references in the main
+/// files, while building the index with DuplicateHandling::Merge option.
----------------
NIT: this comment seems more appropriate at `buildIndex`, maybe move it there?
(It has the `DuplicateHandle` parameter, so it's closer to the context.


================
Comment at: clang-tools-extra/clangd/index/FileIndex.h:66
   /// If either is nullptr, corresponding data for \p Path will be removed.
+  /// If IsMainFile is true, Refs will be used for counting References during
+  /// merging.
----------------
Maybe call the parameter `CountReferences`?
It would narrow down what the code can do with it and make the code easier to understand


================
Comment at: clang-tools-extra/clangd/unittests/FileIndexTests.cpp:49
+MATCHER_P(NumReferences, N, "") {
+  return arg.References == static_cast<unsigned>(N);
+}
----------------
NIT: to avoid warnings, we could use the corresponding suffix at the callsite (e.g. `1u`) instead of casts
It's probably ok either way here, but having casts can lead to surprises if one passes negative numbers there


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D59481





More information about the cfe-commits mailing list