[PATCH] D54300: [clangd] Respect shouldIndexFile when collecting symbols.

Eric Liu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Nov 26 05:53:53 PST 2018


ioeric added inline comments.


================
Comment at: clangd/index/SymbolCollector.cpp:386
   const Symbol *BasicSymbol = Symbols.find(*ID);
-  if (!BasicSymbol) // Regardless of role, ND is the canonical declaration.
-    BasicSymbol = addDeclaration(*ND, std::move(*ID));
-  else if (isPreferredDeclaration(OriginalDecl, Roles))
-    // If OriginalDecl is preferred, replace the existing canonical
-    // declaration (e.g. a class forward declaration). There should be at most
-    // one duplicate as we expect to see only one preferred declaration per
-    // TU, because in practice they are definitions.
-    BasicSymbol = addDeclaration(OriginalDecl, std::move(*ID));
-
-  if (Roles & static_cast<unsigned>(index::SymbolRole::Definition))
-    addDefinition(OriginalDecl, *BasicSymbol);
+  auto shouldIndexSymbol = [&](SourceLocation TargetLoc) {
+    return shouldIndexFile(SM, SM.getFileID(TargetLoc), Opts,
----------------
`shouldIndexLoc` seems more accurate?


================
Comment at: clangd/index/SymbolCollector.cpp:392
+  if (!BasicSymbol) {
+    auto DeclSLoc = findNameLoc(ND);
+    if (shouldIndexSymbol(DeclSLoc))
----------------
`DeclSLoc` is a bit confusing (SLoc is used somewhere else). Maybe `DeclSymLoc` or simply `DeclLoc`?


================
Comment at: clangd/index/SymbolCollector.cpp:397
+  }
+  if (isPreferredDeclaration(OriginalDecl, Roles)) {
+    auto DeclSLoc = findNameLoc(&OriginalDecl);
----------------
We would be doing redundant work if `OriginalDecl == ND`?


================
Comment at: clangd/index/SymbolCollector.cpp:409
+    auto DefLoc = findNameLoc(&OriginalDecl);
+    if (!shouldIndexSymbol(DefLoc) && !BasicSymbol)
+      return true;
----------------
Could you document here why we are also checking `!BasicSymbol ` here? 


================
Comment at: clangd/index/SymbolCollector.cpp:571
 const Symbol *SymbolCollector::addDeclaration(const NamedDecl &ND,
+                                              SourceLocation DeclSLoc,
                                               SymbolID ID) {
----------------
nit: `s/DeclSLoc/DeclLoc`? and maybe add documentation about why we need this?


================
Comment at: unittests/clangd/SymbolCollectorTests.cpp:598
+                  Pair(findSymbol(Symbols, "Foo2").ID,
+                       RefsInFiles(Files({IndexedHeaderURI}))),
+                  Pair(findSymbol(Symbols, "Foo3").ID,
----------------
I think making `RefsInFile` take a single file and using it in combination with `anyOf`/`allOf` would be more straightforward.


Repository:
  rCTE Clang Tools Extra

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

https://reviews.llvm.org/D54300





More information about the cfe-commits mailing list