[clang-tools-extra] added option `google-readability-namespace-comments.AllowNoNamespaceComments` (PR #124265)
Thorsten Klein via cfe-commits
cfe-commits at lists.llvm.org
Thu Jun 5 03:55:13 PDT 2025
https://github.com/thorsten-klein updated https://github.com/llvm/llvm-project/pull/124265
>From 9a2171658093b791e08f0f2b93e132be3a4419f5 Mon Sep 17 00:00:00 2001
From: "Klein, Thorsten (GDE-EDSI1)" <Thorsten.Klein at 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 +
.../checks/llvm/namespace-comment.rst | 7 +++++
...ace-comments-missing-nested-namespaces.cpp | 23 ++++++++++++++++
...readability-namespace-comments-missing.cpp | 27 +++++++++++++++++++
5 files changed, 69 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/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..e7a481ffcb3e9
--- /dev/null
+++ b/clang-tools-extra/test/clang-tidy/checkers/google/readability-namespace-comments-missing-nested-namespaces.cpp
@@ -0,0 +1,23 @@
+// 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: }}'
+
+namespace n1::n2 {
+namespace /*comment1*/n3/*comment2*/::/*comment3*/inline/*comment4*/n4/*comment5*/ {
+void f();
+}}
+
+namespace n7::inline n8 {
+void f();
+}
+
+namespace n9::inline n10 {
+void f();
+}
+
+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..905523e241080
--- /dev/null
+++ b/clang-tools-extra/test/clang-tidy/checkers/google/readability-namespace-comments-missing.cpp
@@ -0,0 +1,27 @@
+// 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: }}'
+
+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 g();
+}
+}
+
+namespace [[]] {
+void hh();
+}
+
+
More information about the cfe-commits
mailing list