https://github.com/thorsten-klein updated 
https://github.com/llvm/llvm-project/pull/124265

>From a6556aebc4f70be5e8be805fd009589fa7e0dc22 Mon Sep 17 00:00:00 2001
From: "Klein, Thorsten (GDE-EDSI1)" <thorsten.kl...@bshg.com>
Date: Fri, 24 Jan 2025 13:46:24 +0100
Subject: [PATCH] added option AllowNoNamespaceComments for
 google-readability-namespace-comments

new option AllowOmittingNamespaceComments for
google-readability-namespace-comments is added.

When `true`, the check will accept if no namespace comment is present.
The check will only fail if the specified namespace comment is different
than expected. Defaults to `false`.
---
 .../readability/NamespaceCommentCheck.cpp     | 12 +++++-
 .../readability/NamespaceCommentCheck.h       |  1 +
 clang-tools-extra/docs/ReleaseNotes.rst       |  5 +++
 .../checks/llvm/namespace-comment.rst         |  7 ++++
 ...ace-comments-missing-nested-namespaces.cpp | 32 +++++++++++++++
 ...readability-namespace-comments-missing.cpp | 40 +++++++++++++++++++
 6 files changed, 96 insertions(+), 1 deletion(-)
 create mode 100644 
clang-tools-extra/test/clang-tidy/checkers/google/readability-namespace-comments-missing-nested-namespaces.cpp
 create mode 100644 
clang-tools-extra/test/clang-tidy/checkers/google/readability-namespace-comments-missing.cpp

diff --git a/clang-tools-extra/clang-tidy/readability/NamespaceCommentCheck.cpp 
b/clang-tools-extra/clang-tidy/readability/NamespaceCommentCheck.cpp
index 64dc941569a96..12e52d6afad56 100644
--- a/clang-tools-extra/clang-tidy/readability/NamespaceCommentCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/NamespaceCommentCheck.cpp
@@ -27,11 +27,13 @@ NamespaceCommentCheck::NamespaceCommentCheck(StringRef Name,
           "namespace( +(((inline )|([a-zA-Z0-9_:]))+))?\\.? *(\\*/)?$",
           llvm::Regex::IgnoreCase),
       ShortNamespaceLines(Options.get("ShortNamespaceLines", 1U)),
-      SpacesBeforeComments(Options.get("SpacesBeforeComments", 1U)) {}
+      SpacesBeforeComments(Options.get("SpacesBeforeComments", 1U)),
+      
AllowOmittingNamespaceComments(Options.get("AllowOmittingNamespaceComments", 
false)) {}
 
 void NamespaceCommentCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
   Options.store(Opts, "ShortNamespaceLines", ShortNamespaceLines);
   Options.store(Opts, "SpacesBeforeComments", SpacesBeforeComments);
+  Options.store(Opts, "AllowOmittingNamespaceComments", 
AllowOmittingNamespaceComments);
 }
 
 void NamespaceCommentCheck::registerMatchers(MatchFinder *Finder) {
@@ -140,6 +142,7 @@ void NamespaceCommentCheck::check(const 
MatchFinder::MatchResult &Result) {
 
   SourceRange OldCommentRange(AfterRBrace, AfterRBrace);
   std::string Message = "%0 not terminated with a closing comment";
+  bool hasComment = false;
 
   // Try to find existing namespace closing comment on the same line.
   if (Tok.is(tok::comment) && NextTokenIsOnSameLine) {
@@ -158,6 +161,8 @@ void NamespaceCommentCheck::check(const 
MatchFinder::MatchResult &Result) {
         return;
       }
 
+      hasComment = true;
+
       // Otherwise we need to fix the comment.
       NeedLineBreak = Comment.starts_with("/*");
       OldCommentRange =
@@ -183,6 +188,11 @@ void NamespaceCommentCheck::check(const 
MatchFinder::MatchResult &Result) {
       ND->isAnonymousNamespace() ? "anonymous namespace"
                                  : ("namespace '" + *NamespaceNameAsWritten + 
"'");
 
+  // If no namespace comment is allowed
+  if(!hasComment && AllowOmittingNamespaceComments) {
+    return;
+  }
+
   std::string Fix(SpacesBeforeComments, ' ');
   Fix.append("// namespace");
   if (!ND->isAnonymousNamespace())
diff --git a/clang-tools-extra/clang-tidy/readability/NamespaceCommentCheck.h 
b/clang-tools-extra/clang-tidy/readability/NamespaceCommentCheck.h
index 7607d37b1b2fd..8edd77213f779 100644
--- a/clang-tools-extra/clang-tidy/readability/NamespaceCommentCheck.h
+++ b/clang-tools-extra/clang-tidy/readability/NamespaceCommentCheck.h
@@ -34,6 +34,7 @@ class NamespaceCommentCheck : public ClangTidyCheck {
   llvm::Regex NamespaceCommentPattern;
   const unsigned ShortNamespaceLines;
   const unsigned SpacesBeforeComments;
+  const bool AllowOmittingNamespaceComments;
   llvm::SmallVector<SourceLocation, 4> Ends;
 };
 
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index e0f81a032c38d..f17b86b5de13e 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -187,6 +187,11 @@ Changes in existing checks
   <clang-tidy/checks/concurrency/mt-unsafe>` check by fixing a false positive
   where ``strerror`` was flagged as MT-unsafe.
 
+- Improved :doc:`google-readability-namespace-comments
+  <clang-tidy/checks/google/readability-namespace-comments>` check by adding
+  the option `AllowOmittingNamespaceComments` to accept if a namespace comment
+  is omitted entirely.
+
 - Improved :doc:`misc-const-correctness
   <clang-tidy/checks/misc/const-correctness>` check by adding the option
   `AllowedTypes`, that excludes specified types from const-correctness
diff --git 
a/clang-tools-extra/docs/clang-tidy/checks/llvm/namespace-comment.rst 
b/clang-tools-extra/docs/clang-tidy/checks/llvm/namespace-comment.rst
index be90260be73af..6e17eac214463 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/llvm/namespace-comment.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/llvm/namespace-comment.rst
@@ -39,3 +39,10 @@ Options
 
    An unsigned integer specifying the number of spaces before the comment
    closing a namespace definition. Default is `1U`.
+
+.. option:: AllowOmittingNamespaceComments
+
+   When `true`, the check will accept if no namespace comment is present.
+   The check will only fail if the specified namespace comment is different
+   than expected. Defaults to `false`.
+
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/google/readability-namespace-comments-missing-nested-namespaces.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/google/readability-namespace-comments-missing-nested-namespaces.cpp
new file mode 100644
index 0000000000000..de42df30cb796
--- /dev/null
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/google/readability-namespace-comments-missing-nested-namespaces.cpp
@@ -0,0 +1,32 @@
+// RUN: %check_clang_tidy %s google-readability-namespace-comments %t 
-std=c++20 \
+// RUN:   '-config={CheckOptions: { \
+// RUN:     
google-readability-namespace-comments.AllowOmittingNamespaceComments: true, \
+// RUN:     google-readability-namespace-comments.ShortNamespaceLines: 0, \
+// RUN:   }}'
+
+// accept if namespace comments are fully omitted
+namespace n1::n2 {
+namespace 
/*comment1*/n3/*comment2*/::/*comment3*/inline/*comment4*/n4/*comment5*/ {
+void f();
+}}
+
+namespace n5::inline n6 {
+void f();
+}
+
+namespace n7::inline n8 {
+void f();
+}
+
+// accept if namespace comments are partly omitted (e.g. only for nested 
namespace)
+namespace n1::n2 {
+namespace n3::n4 {
+void f();
+}
+} // namespace n1::n2
+
+// fail if namespace comment is different than expected
+namespace n9::inline n10 {
+void f();
+} // namespace n9::n10
+// CHECK-MESSAGES: :[[@LINE-1]]:2: warning: namespace 'n9::inline n10' ends 
with a comment that refers to a wrong namespace 'n9::n10' 
[google-readability-namespace-comments]
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/google/readability-namespace-comments-missing.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/google/readability-namespace-comments-missing.cpp
new file mode 100644
index 0000000000000..019add1ed06d2
--- /dev/null
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/google/readability-namespace-comments-missing.cpp
@@ -0,0 +1,40 @@
+// RUN: %check_clang_tidy %s google-readability-namespace-comments %t \
+// RUN:   -config='{CheckOptions: { \
+// RUN:     
google-readability-namespace-comments.AllowOmittingNamespaceComments: true, \
+// RUN:     google-readability-namespace-comments.ShortNamespaceLines: 0, \
+// RUN:   }}'
+
+// accept if namespace comments are fully omitted
+namespace n1 {
+namespace /* a comment */ n2 /* another comment */ {
+void f();
+}}
+
+#define MACRO macro_expansion
+namespace MACRO {
+void f();
+}
+
+namespace [[deprecated("foo")]] namespace_with_attr {
+inline namespace inline_namespace {
+void f();
+}
+}
+
+namespace [[]] {
+void f();
+}
+
+// accept if namespace comments are partly omitted (e.g. only for nested 
namespace)
+namespace n3 {
+namespace n4 {
+void f();
+} // n4
+}
+
+// fail if namespace comment is different than expected
+namespace n1 {
+void f();
+} // namespace n2
+// CHECK-MESSAGES: :[[@LINE-1]]:2: warning: namespace 'n1' ends with a comment 
that refers to a wrong namespace 'n2' [google-readability-namespace-comments]
+

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to