[PATCH] D69855: [clang-tidy] Fix llvm-namespace-comment for macro expansions

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Nov 7 12:04:17 PST 2019


aaron.ballman added a comment.

There's a design question about why it should accept the expanded macro name instead of requiring the user to write the macro. I am worried about allowing the expanded form because the presumable use of a macro is to control the name, so this invites name mismatches in other configuration modes.



================
Comment at: clang-tools-extra/clang-tidy/readability/NamespaceCommentCheck.cpp:30
+    // Record all defined macros. We store the whole token to compare names
+    // later
+
----------------
Missing full stop.


================
Comment at: clang-tools-extra/clang-tidy/readability/NamespaceCommentCheck.cpp:32
+
+    const MacroInfo *const MI = MD->getMacroInfo();
+
----------------
You can drop the latter `const` (we don't do top-level `const` qualification with any consistency).


================
Comment at: clang-tools-extra/clang-tidy/readability/NamespaceCommentCheck.cpp:50-51
+
+    Check->addMacro(MacroNameTok.getIdentifierInfo()->getName().str(),
+                    Value.str());
+  }
----------------
You only need to add the macro name in this case, not its value, which should simplify this code considerably.


================
Comment at: clang-tools-extra/clang-tidy/readability/NamespaceCommentCheck.cpp:83
+    const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) {
+  PP->addPPCallbacks(std::make_unique<NamespaceCommentPPCallbacks>(PP, this));
+}
----------------
Rather than making an entire new object for PP callbacks, why not make `NamespaceCommentCheck` inherit from `PPCallbacks`? It seems like it would simplify the interface somewhat.


================
Comment at: clang-tools-extra/clang-tidy/readability/NamespaceCommentCheck.cpp:208-215
+          std::find_if(std::begin(Macros), std::end(Macros),
+                       [&NamespaceNameInComment](const auto &Macro) {
+                         return NamespaceNameInComment == Macro.first;
+                       });
+
+      if (MacroIt != Macros.end()) {
+        return;
----------------
Rather than this, I'd suggest using `llvm::any_of()`.


================
Comment at: clang-tools-extra/clang-tidy/readability/NamespaceCommentCheck.h:43
+  // Store macros to verify that warning is not thrown when namespace name is a
+  // preprocessed define
+  std::vector<std::pair<std::string, std::string>> Macros;
----------------
Missing a full stop at the end of the sentence.


================
Comment at: clang-tools-extra/clang-tidy/readability/NamespaceCommentCheck.h:44
+  // preprocessed define
+  std::vector<std::pair<std::string, std::string>> Macros;
 };
----------------
I think a better approach is to use a set of some sort because the value of the macro is never used in the check. Probably a `SmallPtrSet` over `StringRef`.


================
Comment at: clang-tools-extra/test/clang-tidy/checkers/llvm-namespace-comment.cpp:19
+}
+// CHECK-FIXES: } // namespace macro_expansion
+
----------------
This seems unintuitive to me -- it should suggest the macro name instead.


================
Comment at: clang-tools-extra/test/clang-tidy/checkers/llvm-namespace-comment.cpp:27
+  void h();
+} // namespace macro_expansion
----------------
This also seems unintuitive to me, I would have wanted this to diagnose and provide a fixit for suggesting the macro name, not its expansion.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D69855





More information about the cfe-commits mailing list