[PATCH] D19482: [include-fixer] Add a find-all-symbols tool for include-fixer.

Daniel Jasper via cfe-commits cfe-commits at lists.llvm.org
Wed Apr 27 04:47:46 PDT 2016


djasper added inline comments.

================
Comment at: include-fixer/find-all-symbols/FindAllSymbols.cpp:22-24
@@ +21,5 @@
+
+using SymbolInfo = clang::find_all_symbols::SymbolInfo;
+using SymbolType = clang::find_all_symbols::SymbolInfo::SymbolType;
+using ContextType = clang::find_all_symbols::SymbolInfo::ContextType;
+
----------------
Can you remove the "abc = " part?

================
Comment at: include-fixer/find-all-symbols/FindAllSymbols.cpp:29
@@ +28,3 @@
+namespace {
+void SetContext(const clang::NamedDecl *ND, SymbolInfo *Symbol) {
+  const auto *Context = ND->getDeclContext();
----------------
Remove "clang::". Here and everywhere.

================
Comment at: include-fixer/find-all-symbols/FindAllSymbols.cpp:31
@@ +30,3 @@
+  const auto *Context = ND->getDeclContext();
+  while (Context) {
+    if (llvm::isa<clang::TranslationUnitDecl>(Context) ||
----------------
I'd turn this into a for loop:

  for (const auto *Context = ND->getDeclContext; Context; Context = Context->getParent()) {
    ...

================
Comment at: include-fixer/find-all-symbols/FindAllSymbols.cpp:33
@@ +32,3 @@
+    if (llvm::isa<clang::TranslationUnitDecl>(Context) ||
+        llvm::isa<clang::LinkageSpecDecl>(Context)) {
+      return;
----------------
No braces. Here and at all the other single-statement ifs.

================
Comment at: include-fixer/find-all-symbols/FindAllSymbols.cpp:37
@@ +36,3 @@
+
+    assert(llvm::isa<clang::NamedDecl>(Context) &&
+           "Expect Context to be a NamedDecl");
----------------
nit: remove "llvm::" and "clang::"

================
Comment at: include-fixer/find-all-symbols/FindAllSymbols.cpp:40
@@ +39,3 @@
+    if (const auto *NSD = llvm::dyn_cast<clang::NamespaceDecl>(Context)) {
+      std::string Name;
+      if (!NSD->isAnonymousNamespace()) {
----------------
I'd just do:

  Symbol->Contexts.emplace_back(
      SymbolInfo::Namespace,
      NSD->isAnonymousNamespace() ? "" : NSD->getName().str());


================
Comment at: include-fixer/find-all-symbols/FindAllSymbols.cpp:47
@@ +46,3 @@
+      const auto *RD = llvm::cast<clang::RecordDecl>(Context);
+      Symbol->Contexts.emplace_back(SymbolInfo::Record, RD->getName().str());
+    }
----------------
Maybe assert that RD isn't nullptr?

================
Comment at: include-fixer/find-all-symbols/FindAllSymbols.cpp:76
@@ +75,3 @@
+
+void FindAllSymbols::registerSearcher(MatchFinder *MatchFinder) {
+  // FIXME: Handle specialization.
----------------
We traditionally call this registerMatchers ..

================
Comment at: include-fixer/find-all-symbols/FindAllSymbols.cpp:201
@@ +200,3 @@
+  const clang::FileEntry *FE = SM->getFileEntryForID(SM->getMainFileID());
+  Reporter->reportResult(FE->getName(), Symbol);
+}
----------------
Why is it useful to report with the name of the main file? I think some more comments on what this tool is supposed to do overall would help. Maybe at the top of this file or of FindAllSymbolsMain.

================
Comment at: include-fixer/find-all-symbols/SymbolInfo.h:24
@@ +23,3 @@
+struct SymbolInfo {
+  enum SymbolType {
+    Function,
----------------
Call this "Kind" so that we don't confuse it with the Type of variables and function parameters.

================
Comment at: include-fixer/find-all-symbols/SymbolInfo.h:37
@@ +36,3 @@
+  /// \brief Identifier name.
+  std::string Identifier;
+
----------------
I'd just call this name.

================
Comment at: include-fixer/find-all-symbols/SymbolInfo.h:46
@@ +45,3 @@
+  /// \brief A pair of <ContextType, ContextName>.
+  typedef std::pair<ContextType, std::string> ContextInfo;
+
----------------
Maybe just call this Context instead of ContextInfo?

================
Comment at: include-fixer/find-all-symbols/SymbolInfo.h:52
@@ +51,3 @@
+  /// For example, if a symbol 'x' is declared as:
+  ///     namespace na { namespace nb { class A { int x; } } }
+  /// The contexts would be { {RECORD, "A"}, {NAMESPACE, "nb"}, {NAMESPACE,
----------------
Can't hurt to explicitly state that unnamed namespaces are stored with the name "".

================
Comment at: include-fixer/find-all-symbols/SymbolInfo.h:76
@@ +75,3 @@
+  /// \brief The function information.
+  llvm::Optional<FunctionInfo> FunctionInfos;
+
----------------
Should we maybe just use inheritance here?


http://reviews.llvm.org/D19482





More information about the cfe-commits mailing list