[clang-tools-extra] [clang-tidy] Rename 'google-build-namespaces' check to 'misc-anonymous-namespace-in-header' and keep initial as alias. (PR #170986)
Ondřej Štorc via cfe-commits
cfe-commits at lists.llvm.org
Mon Dec 8 00:35:54 PST 2025
https://github.com/ostorc updated https://github.com/llvm/llvm-project/pull/170986
>From 69583481e4bb1df710dd8596ac2eea74219ba00c Mon Sep 17 00:00:00 2001
From: Ondrej Storc <storcond at fit.cvut.cz>
Date: Sat, 6 Dec 2025 17:00:45 +0100
Subject: [PATCH 01/10] [clang-tidy] Rename 'google-build-namespaces' check to
'misc-anonymous-namespace-in-header'
---
clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp | 4 ++--
.../clang-tidy/fuchsia/FuchsiaTidyModule.cpp | 4 ++--
clang-tools-extra/clang-tidy/google/CMakeLists.txt | 1 -
.../clang-tidy/google/GoogleTidyModule.cpp | 4 ++--
clang-tools-extra/clang-tidy/misc/CMakeLists.txt | 1 +
clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp | 3 +++
.../UnnamedNamespaceInHeaderCheck.cpp | 4 ++--
.../{google => misc}/UnnamedNamespaceInHeaderCheck.h | 12 ++++++------
8 files changed, 18 insertions(+), 15 deletions(-)
rename clang-tools-extra/clang-tidy/{google => misc}/UnnamedNamespaceInHeaderCheck.cpp (94%)
rename clang-tools-extra/clang-tidy/{google => misc}/UnnamedNamespaceInHeaderCheck.h (74%)
diff --git a/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp b/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp
index 16d4be9802cc6..bc570cd59450e 100644
--- a/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp
@@ -31,12 +31,12 @@
#include "../bugprone/UnsafeFunctionsCheck.h"
#include "../bugprone/UnusedReturnValueCheck.h"
#include "../concurrency/ThreadCanceltypeAsynchronousCheck.h"
-#include "../google/UnnamedNamespaceInHeaderCheck.h"
#include "../misc/NewDeleteOverloadsCheck.h"
#include "../misc/NonCopyableObjectsCheck.h"
#include "../misc/PredictableRandCheck.h"
#include "../misc/StaticAssertCheck.h"
#include "../misc/ThrowByValueCatchByReferenceCheck.h"
+#include "../misc/UnnamedNamespaceInHeaderCheck.h"
#include "../modernize/AvoidSetjmpLongjmpCheck.h"
#include "../modernize/AvoidVariadicFunctionsCheck.h"
#include "../performance/MoveConstructorInitCheck.h"
@@ -253,7 +253,7 @@ class CERTModule : public ClangTidyModule {
"cert-dcl54-cpp");
CheckFactories.registerCheck<bugprone::StdNamespaceModificationCheck>(
"cert-dcl58-cpp");
- CheckFactories.registerCheck<google::build::UnnamedNamespaceInHeaderCheck>(
+ CheckFactories.registerCheck<misc::build::UnnamedNamespaceInHeaderCheck>(
"cert-dcl59-cpp");
// ERR
CheckFactories.registerCheck<misc::ThrowByValueCatchByReferenceCheck>(
diff --git a/clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp b/clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp
index c62c43f0c42a3..20d86b6cf38ab 100644
--- a/clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp
@@ -9,7 +9,7 @@
#include "../ClangTidy.h"
#include "../ClangTidyModule.h"
#include "../ClangTidyModuleRegistry.h"
-#include "../google/UnnamedNamespaceInHeaderCheck.h"
+#include "../misc/UnnamedNamespaceInHeaderCheck.h"
#include "DefaultArgumentsCallsCheck.h"
#include "DefaultArgumentsDeclarationsCheck.h"
#include "MultipleInheritanceCheck.h"
@@ -32,7 +32,7 @@ class FuchsiaModule : public ClangTidyModule {
"fuchsia-default-arguments-calls");
CheckFactories.registerCheck<DefaultArgumentsDeclarationsCheck>(
"fuchsia-default-arguments-declarations");
- CheckFactories.registerCheck<google::build::UnnamedNamespaceInHeaderCheck>(
+ CheckFactories.registerCheck<misc::build::UnnamedNamespaceInHeaderCheck>(
"fuchsia-header-anon-namespaces");
CheckFactories.registerCheck<MultipleInheritanceCheck>(
"fuchsia-multiple-inheritance");
diff --git a/clang-tools-extra/clang-tidy/google/CMakeLists.txt b/clang-tools-extra/clang-tidy/google/CMakeLists.txt
index 1d4229ebb7b09..4335cf4aa11f9 100644
--- a/clang-tools-extra/clang-tidy/google/CMakeLists.txt
+++ b/clang-tools-extra/clang-tidy/google/CMakeLists.txt
@@ -19,7 +19,6 @@ add_clang_library(clangTidyGoogleModule STATIC
IntegerTypesCheck.cpp
OverloadedUnaryAndCheck.cpp
TodoCommentCheck.cpp
- UnnamedNamespaceInHeaderCheck.cpp
UpgradeGoogletestCaseCheck.cpp
UsingNamespaceDirectiveCheck.cpp
diff --git a/clang-tools-extra/clang-tidy/google/GoogleTidyModule.cpp b/clang-tools-extra/clang-tidy/google/GoogleTidyModule.cpp
index aff8b45ff2f74..8749cea94c899 100644
--- a/clang-tools-extra/clang-tidy/google/GoogleTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/google/GoogleTidyModule.cpp
@@ -9,6 +9,7 @@
#include "../ClangTidy.h"
#include "../ClangTidyModule.h"
#include "../ClangTidyModuleRegistry.h"
+#include "../misc/UnnamedNamespaceInHeaderCheck.h"
#include "../readability/BracesAroundStatementsCheck.h"
#include "../readability/FunctionSizeCheck.h"
#include "../readability/NamespaceCommentCheck.h"
@@ -26,7 +27,6 @@
#include "IntegerTypesCheck.h"
#include "OverloadedUnaryAndCheck.h"
#include "TodoCommentCheck.h"
-#include "UnnamedNamespaceInHeaderCheck.h"
#include "UpgradeGoogletestCaseCheck.h"
#include "UsingNamespaceDirectiveCheck.h"
@@ -40,7 +40,7 @@ class GoogleModule : public ClangTidyModule {
void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override {
CheckFactories.registerCheck<build::ExplicitMakePairCheck>(
"google-build-explicit-make-pair");
- CheckFactories.registerCheck<build::UnnamedNamespaceInHeaderCheck>(
+ CheckFactories.registerCheck<misc::build::UnnamedNamespaceInHeaderCheck>(
"google-build-namespaces");
CheckFactories.registerCheck<build::UsingNamespaceDirectiveCheck>(
"google-build-using-namespace");
diff --git a/clang-tools-extra/clang-tidy/misc/CMakeLists.txt b/clang-tools-extra/clang-tidy/misc/CMakeLists.txt
index e8705aada3f22..94cede12da4d5 100644
--- a/clang-tools-extra/clang-tidy/misc/CMakeLists.txt
+++ b/clang-tools-extra/clang-tidy/misc/CMakeLists.txt
@@ -39,6 +39,7 @@ add_clang_library(clangTidyMiscModule STATIC
ThrowByValueCatchByReferenceCheck.cpp
UnconventionalAssignOperatorCheck.cpp
UniqueptrResetReleaseCheck.cpp
+ UnnamedNamespaceInHeaderCheck.cpp
UnusedAliasDeclsCheck.cpp
UnusedParametersCheck.cpp
UnusedUsingDeclsCheck.cpp
diff --git a/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp b/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp
index 03f25775de0bf..157411e9ac36b 100644
--- a/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp
@@ -29,6 +29,7 @@
#include "ThrowByValueCatchByReferenceCheck.h"
#include "UnconventionalAssignOperatorCheck.h"
#include "UniqueptrResetReleaseCheck.h"
+#include "UnnamedNamespaceInHeaderCheck.h"
#include "UnusedAliasDeclsCheck.h"
#include "UnusedParametersCheck.h"
#include "UnusedUsingDeclsCheck.h"
@@ -41,6 +42,8 @@ namespace misc {
class MiscModule : public ClangTidyModule {
public:
void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override {
+ CheckFactories.registerCheck<build::UnnamedNamespaceInHeaderCheck>(
+ "misc-anonymous-namespace-in-header");
CheckFactories.registerCheck<ConfusableIdentifierCheck>(
"misc-confusable-identifiers");
CheckFactories.registerCheck<ConstCorrectnessCheck>(
diff --git a/clang-tools-extra/clang-tidy/google/UnnamedNamespaceInHeaderCheck.cpp b/clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.cpp
similarity index 94%
rename from clang-tools-extra/clang-tidy/google/UnnamedNamespaceInHeaderCheck.cpp
rename to clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.cpp
index 054bdc8d1230e..6bba314b5d947 100644
--- a/clang-tools-extra/clang-tidy/google/UnnamedNamespaceInHeaderCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.cpp
@@ -12,7 +12,7 @@
using namespace clang::ast_matchers;
-namespace clang::tidy::google::build {
+namespace clang::tidy::misc::build {
UnnamedNamespaceInHeaderCheck::UnnamedNamespaceInHeaderCheck(
StringRef Name, ClangTidyContext *Context)
@@ -37,4 +37,4 @@ void UnnamedNamespaceInHeaderCheck::check(
diag(Loc, "do not use unnamed namespaces in header files");
}
-} // namespace clang::tidy::google::build
+} // namespace clang::tidy::misc::build
diff --git a/clang-tools-extra/clang-tidy/google/UnnamedNamespaceInHeaderCheck.h b/clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.h
similarity index 74%
rename from clang-tools-extra/clang-tidy/google/UnnamedNamespaceInHeaderCheck.h
rename to clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.h
index 78e8127a5a342..0225922083d0c 100644
--- a/clang-tools-extra/clang-tidy/google/UnnamedNamespaceInHeaderCheck.h
+++ b/clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.h
@@ -6,13 +6,13 @@
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GOOGLE_UNNAMEDNAMESPACEINHEADERCHECK_H
-#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GOOGLE_UNNAMEDNAMESPACEINHEADERCHECK_H
+#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_UNNAMEDNAMESPACEINHEADERCHECK_H
+#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_UNNAMEDNAMESPACEINHEADERCHECK_H
#include "../ClangTidyCheck.h"
#include "../utils/FileExtensionsUtils.h"
-namespace clang::tidy::google::build {
+namespace clang::tidy::misc::build {
/// Finds anonymous namespaces in headers.
///
@@ -21,7 +21,7 @@ namespace clang::tidy::google::build {
/// Corresponding cpplint.py check name: 'build/namespaces'.
///
/// For the user-facing documentation see:
-/// https://clang.llvm.org/extra/clang-tidy/checks/google/build-namespaces.html
+/// https://clang.llvm.org/extra/clang-tidy/checks/misc/build-namespaces.html
class UnnamedNamespaceInHeaderCheck : public ClangTidyCheck {
public:
UnnamedNamespaceInHeaderCheck(StringRef Name, ClangTidyContext *Context);
@@ -35,6 +35,6 @@ class UnnamedNamespaceInHeaderCheck : public ClangTidyCheck {
FileExtensionsSet HeaderFileExtensions;
};
-} // namespace clang::tidy::google::build
+} // namespace clang::tidy::misc::build
-#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GOOGLE_UNNAMEDNAMESPACEINHEADERCHECK_H
+#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_UNNAMEDNAMESPACEINHEADERCHECK_H
>From 84388d2da3ef1e8b0e619d33800af5ce0f9c08e5 Mon Sep 17 00:00:00 2001
From: Ondrej Storc <storcond at fit.cvut.cz>
Date: Sat, 6 Dec 2025 17:10:09 +0100
Subject: [PATCH 02/10] [clang-tidy] Update references to
'google-build-namespaces' to 'misc-anonymous-namespace-in-header' and create
new documentation for the latter
---
.../docs/clang-tidy/checks/cert/dcl59-cpp.rst | 4 ++--
.../checks/fuchsia/header-anon-namespaces.rst | 4 ++--
.../clang-tidy/checks/google/build-namespaces.rst | 13 +++++--------
clang-tools-extra/docs/clang-tidy/checks/list.rst | 7 ++++---
.../checks/misc/anonymous-namespace-in-header.rst | 14 ++++++++++++++
5 files changed, 27 insertions(+), 15 deletions(-)
create mode 100644 clang-tools-extra/docs/clang-tidy/checks/misc/anonymous-namespace-in-header.rst
diff --git a/clang-tools-extra/docs/clang-tidy/checks/cert/dcl59-cpp.rst b/clang-tools-extra/docs/clang-tidy/checks/cert/dcl59-cpp.rst
index 027d2eca09195..ee66ec92f8478 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/cert/dcl59-cpp.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/cert/dcl59-cpp.rst
@@ -1,10 +1,10 @@
.. title:: clang-tidy - cert-dcl59-cpp
.. meta::
- :http-equiv=refresh: 5;URL=../google/build-namespaces.html
+ :http-equiv=refresh: 5;URL=../misc/anonymous-namespace-in-header.html
cert-dcl59-cpp
==============
The `cert-dcl59-cpp` check is an alias, please see
-:doc:`google-build-namespaces <../google/build-namespaces>`
+:doc:`misc-anonymous-namespace-in-header <../misc/anonymous-namespace-in-header>`
for more information.
diff --git a/clang-tools-extra/docs/clang-tidy/checks/fuchsia/header-anon-namespaces.rst b/clang-tools-extra/docs/clang-tidy/checks/fuchsia/header-anon-namespaces.rst
index a92f3f411c031..44cd73259c2fd 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/fuchsia/header-anon-namespaces.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/fuchsia/header-anon-namespaces.rst
@@ -1,10 +1,10 @@
.. title:: clang-tidy - fuchsia-header-anon-namespaces
.. meta::
- :http-equiv=refresh: 5;URL=../google/build-namespaces.html
+ :http-equiv=refresh: 5;URL=../misc/anonymous-namespace-in-header.html
fuchsia-header-anon-namespaces
==============================
The fuchsia-header-anon-namespaces check is an alias, please see
-:doc:`google-build-namespace <../google/build-namespaces>`
+:doc:`misc-anonymous-namespace-in-header <../misc/anonymous-namespace-in-header>`
for more information.
diff --git a/clang-tools-extra/docs/clang-tidy/checks/google/build-namespaces.rst b/clang-tools-extra/docs/clang-tidy/checks/google/build-namespaces.rst
index b421d992d63a6..26a0765221ce6 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/google/build-namespaces.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/google/build-namespaces.rst
@@ -1,13 +1,10 @@
.. title:: clang-tidy - google-build-namespaces
+.. meta::
+ :http-equiv=refresh: 5;URL=../misc/anonymous-namespace-in-header.html
google-build-namespaces
=======================
-`cert-dcl59-cpp` redirects here as an alias for this check.
-`fuchsia-header-anon-namespaces` redirects here as an alias for this check.
-
-Finds anonymous namespaces in headers.
-
-https://google.github.io/styleguide/cppguide.html#Namespaces
-
-Corresponding cpplint.py check name: `build/namespaces`.
+The `google-build-namespaces` check is an alias, please see
+:doc:`misc-anonymous-namespace-in-header <../misc/anonymous-namespace-in-header>`
+for more information.
diff --git a/clang-tools-extra/docs/clang-tidy/checks/list.rst b/clang-tools-extra/docs/clang-tidy/checks/list.rst
index 8bb112f3d1832..295a6b07474e7 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/list.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/list.rst
@@ -229,7 +229,6 @@ Clang-Tidy Checks
:doc:`fuchsia-trailing-return <fuchsia/trailing-return>`,
:doc:`fuchsia-virtual-inheritance <fuchsia/virtual-inheritance>`,
:doc:`google-build-explicit-make-pair <google/build-explicit-make-pair>`,
- :doc:`google-build-namespaces <google/build-namespaces>`,
:doc:`google-build-using-namespace <google/build-using-namespace>`,
:doc:`google-default-arguments <google/default-arguments>`,
:doc:`google-explicit-constructor <google/explicit-constructor>`, "Yes"
@@ -264,6 +263,7 @@ Clang-Tidy Checks
:doc:`llvmlibc-implementation-in-namespace <llvmlibc/implementation-in-namespace>`,
:doc:`llvmlibc-inline-function-decl <llvmlibc/inline-function-decl>`, "Yes"
:doc:`llvmlibc-restrict-system-libc-headers <llvmlibc/restrict-system-libc-headers>`, "Yes"
+ :doc:`misc-anonymous-namespace-in-header <misc/anonymous-namespace-in-header>`,
:doc:`misc-confusable-identifiers <misc/confusable-identifiers>`,
:doc:`misc-const-correctness <misc/const-correctness>`, "Yes"
:doc:`misc-coroutine-hostile-raii <misc/coroutine-hostile-raii>`,
@@ -446,7 +446,7 @@ Check aliases
:doc:`cert-dcl51-cpp <cert/dcl51-cpp>`, :doc:`bugprone-reserved-identifier <bugprone/reserved-identifier>`, "Yes"
:doc:`cert-dcl54-cpp <cert/dcl54-cpp>`, :doc:`misc-new-delete-overloads <misc/new-delete-overloads>`,
:doc:`cert-dcl58-cpp <cert/dcl58-cpp>`, :doc:`bugprone-std-namespace-modification <bugprone/std-namespace-modification>`,
- :doc:`cert-dcl59-cpp <cert/dcl59-cpp>`, :doc:`google-build-namespaces <google/build-namespaces>`,
+ :doc:`cert-dcl59-cpp <cert/dcl59-cpp>`, :doc:`misc-anonymous-namespace-in-header <misc/anonymous-namespace-in-header>`,
:doc:`cert-env33-c <cert/env33-c>`, :doc:`bugprone-command-processor <bugprone/command-processor>`,
:doc:`cert-err09-cpp <cert/err09-cpp>`, :doc:`misc-throw-by-value-catch-by-reference <misc/throw-by-value-catch-by-reference>`,
:doc:`cert-err34-c <cert/err34-c>`, :doc:`bugprone-unchecked-string-to-number-conversion <bugprone/unchecked-string-to-number-conversion>`,
@@ -583,7 +583,8 @@ Check aliases
:doc:`cppcoreguidelines-noexcept-swap <cppcoreguidelines/noexcept-swap>`, :doc:`performance-noexcept-swap <performance/noexcept-swap>`, "Yes"
:doc:`cppcoreguidelines-non-private-member-variables-in-classes <cppcoreguidelines/non-private-member-variables-in-classes>`, :doc:`misc-non-private-member-variables-in-classes <misc/non-private-member-variables-in-classes>`,
:doc:`cppcoreguidelines-use-default-member-init <cppcoreguidelines/use-default-member-init>`, :doc:`modernize-use-default-member-init <modernize/use-default-member-init>`, "Yes"
- :doc:`fuchsia-header-anon-namespaces <fuchsia/header-anon-namespaces>`, :doc:`google-build-namespaces <google/build-namespaces>`,
+ :doc:`fuchsia-header-anon-namespaces <fuchsia/header-anon-namespaces>`, :doc:`misc-anonymous-namespace-in-header <misc/anonymous-namespace-in-header>`,
+ :doc:`google-build-namespaces <google/build-namespaces>`, :doc:`misc-anonymous-namespace-in-header <misc/anonymous-namespace-in-header>`,
:doc:`google-readability-braces-around-statements <google/readability-braces-around-statements>`, :doc:`readability-braces-around-statements <readability/braces-around-statements>`, "Yes"
:doc:`google-readability-function-size <google/readability-function-size>`, :doc:`readability-function-size <readability/function-size>`,
:doc:`google-readability-namespace-comments <google/readability-namespace-comments>`, :doc:`llvm-namespace-comment <llvm/namespace-comment>`,
diff --git a/clang-tools-extra/docs/clang-tidy/checks/misc/anonymous-namespace-in-header.rst b/clang-tools-extra/docs/clang-tidy/checks/misc/anonymous-namespace-in-header.rst
new file mode 100644
index 0000000000000..796642adc095f
--- /dev/null
+++ b/clang-tools-extra/docs/clang-tidy/checks/misc/anonymous-namespace-in-header.rst
@@ -0,0 +1,14 @@
+.. title:: clang-tidy - anonymous-namespace-in-header
+
+anonymous-namespace-in-header
+=============================
+
+`cert-dcl59-cpp` redirects here as an alias for this check.
+`fuchsia-header-anon-namespaces` redirects here as an alias for this check.
+`google-build-namespaces` redirects here as an alias for this check.
+
+Finds anonymous namespaces in headers.
+
+https://google.github.io/styleguide/cppguide.html#Namespaces
+
+Corresponding cpplint.py check name: `build/namespaces`.
>From 07e1f950dbff7d1e16b9d9a80911cba61bd87814 Mon Sep 17 00:00:00 2001
From: Ondrej Storc <storcond at fit.cvut.cz>
Date: Sat, 6 Dec 2025 17:15:36 +0100
Subject: [PATCH 03/10] [clang-tidy] Replace 'google-build-namespaces' checks
with 'misc-anonymous-namespace-in-header' in tests and move it to
coresponding place
---
.../test/clang-tidy/checkers/google/namespaces.cpp | 4 ----
.../google-namespaces.h => misc/Inputs/anon-namespaces.h} | 0
.../test/clang-tidy/checkers/misc/namespaces.cpp | 3 +++
3 files changed, 3 insertions(+), 4 deletions(-)
rename clang-tools-extra/test/clang-tidy/checkers/{google/Inputs/google-namespaces.h => misc/Inputs/anon-namespaces.h} (100%)
create mode 100644 clang-tools-extra/test/clang-tidy/checkers/misc/namespaces.cpp
diff --git a/clang-tools-extra/test/clang-tidy/checkers/google/namespaces.cpp b/clang-tools-extra/test/clang-tidy/checkers/google/namespaces.cpp
index 9bda3c0451b39..d830146fe1ff1 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/google/namespaces.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/google/namespaces.cpp
@@ -1,7 +1,3 @@
-// RUN: clang-tidy %s -checks='-*,google-build-namespaces,google-build-using-namespace' -header-filter='.*' -- | FileCheck %s -implicit-check-not="{{warning|error}}:"
-#include "Inputs/google-namespaces.h"
-// CHECK: warning: do not use unnamed namespaces in header files [google-build-namespaces]
-
using namespace spaaaace;
// CHECK: :[[@LINE-1]]:1: warning: do not use namespace using-directives; use using-declarations instead [google-build-using-namespace]
diff --git a/clang-tools-extra/test/clang-tidy/checkers/google/Inputs/google-namespaces.h b/clang-tools-extra/test/clang-tidy/checkers/misc/Inputs/anon-namespaces.h
similarity index 100%
rename from clang-tools-extra/test/clang-tidy/checkers/google/Inputs/google-namespaces.h
rename to clang-tools-extra/test/clang-tidy/checkers/misc/Inputs/anon-namespaces.h
diff --git a/clang-tools-extra/test/clang-tidy/checkers/misc/namespaces.cpp b/clang-tools-extra/test/clang-tidy/checkers/misc/namespaces.cpp
new file mode 100644
index 0000000000000..d01547bfde8ce
--- /dev/null
+++ b/clang-tools-extra/test/clang-tidy/checkers/misc/namespaces.cpp
@@ -0,0 +1,3 @@
+// RUN: clang-tidy %s -checks='-*,misc-anonymous-namespace-in-header,google-build-using-namespace' -header-filter='.*' -- | FileCheck %s -implicit-check-not="{{warning|error}}:"
+#include "Inputs/anon-namespaces.h"
+// CHECK: warning: do not use unnamed namespaces in header files [misc-anonymous-namespace-in-header]
>From a33d504c1bda6d9483fc127a6281a5698d7f16cb Mon Sep 17 00:00:00 2001
From: Ondrej Storc <storcond at fit.cvut.cz>
Date: Sat, 6 Dec 2025 17:19:54 +0100
Subject: [PATCH 04/10] [clang-tidy] Update release notes
---
clang-tools-extra/docs/ReleaseNotes.rst | 5 +++++
.../test/clang-tidy/checkers/google/namespaces.cpp | 3 +++
2 files changed, 8 insertions(+)
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 42160fa9cb51c..9d2ed11a4044a 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -328,6 +328,11 @@ New check aliases
<clang-tidy/checks/bugprone/copy-constructor-mutates-argument>`
keeping initial check as an alias to the new one.
+- Renamed :doc:`google-build-namespaces` to
+ :doc:`misc-anonymous-namespace-in-header
+ <clang-tidy/checks/misc/anonymous-namespace-in-header>`
+ keeping initial check as an alias to the new one.
+
Changes in existing checks
^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/clang-tools-extra/test/clang-tidy/checkers/google/namespaces.cpp b/clang-tools-extra/test/clang-tidy/checkers/google/namespaces.cpp
index d830146fe1ff1..b0b278001d11d 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/google/namespaces.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/google/namespaces.cpp
@@ -1,3 +1,6 @@
+// RUN: clang-tidy %s -checks='-*,google-build-namespaces,google-build-using-namespace' -header-filter='.*' -- | FileCheck %s -implicit-check-not="{{warning|error}}:"
+#include "../misc/Inputs/anon-namespaces.h"
+// CHECK: warning: do not use unnamed namespaces in header files [google-build-namespaces]
using namespace spaaaace;
// CHECK: :[[@LINE-1]]:1: warning: do not use namespace using-directives; use using-declarations instead [google-build-using-namespace]
>From b3599aa2e76eee4e820423ebe96c93ddb0f6f266 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ond=C5=99ej=20=C5=A0torc?= <storc.1998 at gmail.com>
Date: Mon, 8 Dec 2025 08:24:15 +0100
Subject: [PATCH 05/10] Update clang-tools-extra/docs/ReleaseNotes.rst
Co-authored-by: mitchell <mitchell.xu2 at gmail.com>
---
clang-tools-extra/docs/ReleaseNotes.rst | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 9d2ed11a4044a..89c012630bcc0 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -328,7 +328,7 @@ New check aliases
<clang-tidy/checks/bugprone/copy-constructor-mutates-argument>`
keeping initial check as an alias to the new one.
-- Renamed :doc:`google-build-namespaces` to
+- Renamed :doc:`google-build-namespaces <clang-tidy/checks/google/build-namespaces>` to
:doc:`misc-anonymous-namespace-in-header
<clang-tidy/checks/misc/anonymous-namespace-in-header>`
keeping initial check as an alias to the new one.
>From 1645a52df569ede75d77b5ea03907299735627af Mon Sep 17 00:00:00 2001
From: Ondrej Storc <storcond at fit.cvut.cz>
Date: Mon, 8 Dec 2025 08:27:23 +0100
Subject: [PATCH 06/10] [clang-tidy] Refactor 'UnnamedNamespaceInHeaderCheck'
namespace and update related registrations
---
clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp | 2 +-
clang-tools-extra/clang-tidy/google/GoogleTidyModule.cpp | 2 +-
clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp | 2 +-
.../clang-tidy/misc/UnnamedNamespaceInHeaderCheck.cpp | 2 +-
.../clang-tidy/misc/UnnamedNamespaceInHeaderCheck.h | 4 ++--
5 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp b/clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp
index 20d86b6cf38ab..660f0cee92ff7 100644
--- a/clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp
@@ -32,7 +32,7 @@ class FuchsiaModule : public ClangTidyModule {
"fuchsia-default-arguments-calls");
CheckFactories.registerCheck<DefaultArgumentsDeclarationsCheck>(
"fuchsia-default-arguments-declarations");
- CheckFactories.registerCheck<misc::build::UnnamedNamespaceInHeaderCheck>(
+ CheckFactories.registerCheck<misc::UnnamedNamespaceInHeaderCheck>(
"fuchsia-header-anon-namespaces");
CheckFactories.registerCheck<MultipleInheritanceCheck>(
"fuchsia-multiple-inheritance");
diff --git a/clang-tools-extra/clang-tidy/google/GoogleTidyModule.cpp b/clang-tools-extra/clang-tidy/google/GoogleTidyModule.cpp
index 8749cea94c899..173262d8e9778 100644
--- a/clang-tools-extra/clang-tidy/google/GoogleTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/google/GoogleTidyModule.cpp
@@ -40,7 +40,7 @@ class GoogleModule : public ClangTidyModule {
void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override {
CheckFactories.registerCheck<build::ExplicitMakePairCheck>(
"google-build-explicit-make-pair");
- CheckFactories.registerCheck<misc::build::UnnamedNamespaceInHeaderCheck>(
+ CheckFactories.registerCheck<misc::UnnamedNamespaceInHeaderCheck>(
"google-build-namespaces");
CheckFactories.registerCheck<build::UsingNamespaceDirectiveCheck>(
"google-build-using-namespace");
diff --git a/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp b/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp
index 157411e9ac36b..ffcfa43564a78 100644
--- a/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp
@@ -42,7 +42,7 @@ namespace misc {
class MiscModule : public ClangTidyModule {
public:
void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override {
- CheckFactories.registerCheck<build::UnnamedNamespaceInHeaderCheck>(
+ CheckFactories.registerCheck<UnnamedNamespaceInHeaderCheck>(
"misc-anonymous-namespace-in-header");
CheckFactories.registerCheck<ConfusableIdentifierCheck>(
"misc-confusable-identifiers");
diff --git a/clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.cpp b/clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.cpp
index 6bba314b5d947..d435f7484523e 100644
--- a/clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.cpp
@@ -12,7 +12,7 @@
using namespace clang::ast_matchers;
-namespace clang::tidy::misc::build {
+namespace clang::tidy::misc {
UnnamedNamespaceInHeaderCheck::UnnamedNamespaceInHeaderCheck(
StringRef Name, ClangTidyContext *Context)
diff --git a/clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.h b/clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.h
index 0225922083d0c..0635e22dac5c0 100644
--- a/clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.h
+++ b/clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.h
@@ -12,7 +12,7 @@
#include "../ClangTidyCheck.h"
#include "../utils/FileExtensionsUtils.h"
-namespace clang::tidy::misc::build {
+namespace clang::tidy::misc {
/// Finds anonymous namespaces in headers.
///
@@ -21,7 +21,7 @@ namespace clang::tidy::misc::build {
/// Corresponding cpplint.py check name: 'build/namespaces'.
///
/// For the user-facing documentation see:
-/// https://clang.llvm.org/extra/clang-tidy/checks/misc/build-namespaces.html
+/// https://clang.llvm.org/extra/clang-tidy/checks/misc/anonymous-namespace-in-header.html
class UnnamedNamespaceInHeaderCheck : public ClangTidyCheck {
public:
UnnamedNamespaceInHeaderCheck(StringRef Name, ClangTidyContext *Context);
>From d4c286325743dc151733ed0cd9c88d7abb2bc17f Mon Sep 17 00:00:00 2001
From: Ondrej Storc <storcond at fit.cvut.cz>
Date: Mon, 8 Dec 2025 08:37:44 +0100
Subject: [PATCH 07/10] [clang-tidy] Rename 'UnnamedNamespaceInHeaderCheck' to
'AnonymousNamespaceInHeaderCheck' and update related references
---
clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp | 4 ++--
.../clang-tidy/fuchsia/FuchsiaTidyModule.cpp | 4 ++--
.../clang-tidy/google/GoogleTidyModule.cpp | 4 ++--
...Check.cpp => AnonymousNamespaceInHeaderCheck.cpp} | 10 +++++-----
...aderCheck.h => AnonymousNamespaceInHeaderCheck.h} | 12 ++++++------
clang-tools-extra/clang-tidy/misc/CMakeLists.txt | 2 +-
clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp | 4 ++--
7 files changed, 20 insertions(+), 20 deletions(-)
rename clang-tools-extra/clang-tidy/misc/{UnnamedNamespaceInHeaderCheck.cpp => AnonymousNamespaceInHeaderCheck.cpp} (83%)
rename clang-tools-extra/clang-tidy/misc/{UnnamedNamespaceInHeaderCheck.h => AnonymousNamespaceInHeaderCheck.h} (73%)
diff --git a/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp b/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp
index bc570cd59450e..a9886e0be6741 100644
--- a/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/cert/CERTTidyModule.cpp
@@ -31,12 +31,12 @@
#include "../bugprone/UnsafeFunctionsCheck.h"
#include "../bugprone/UnusedReturnValueCheck.h"
#include "../concurrency/ThreadCanceltypeAsynchronousCheck.h"
+#include "../misc/AnonymousNamespaceInHeaderCheck.h"
#include "../misc/NewDeleteOverloadsCheck.h"
#include "../misc/NonCopyableObjectsCheck.h"
#include "../misc/PredictableRandCheck.h"
#include "../misc/StaticAssertCheck.h"
#include "../misc/ThrowByValueCatchByReferenceCheck.h"
-#include "../misc/UnnamedNamespaceInHeaderCheck.h"
#include "../modernize/AvoidSetjmpLongjmpCheck.h"
#include "../modernize/AvoidVariadicFunctionsCheck.h"
#include "../performance/MoveConstructorInitCheck.h"
@@ -253,7 +253,7 @@ class CERTModule : public ClangTidyModule {
"cert-dcl54-cpp");
CheckFactories.registerCheck<bugprone::StdNamespaceModificationCheck>(
"cert-dcl58-cpp");
- CheckFactories.registerCheck<misc::build::UnnamedNamespaceInHeaderCheck>(
+ CheckFactories.registerCheck<misc::AnonymousNamespaceInHeaderCheck>(
"cert-dcl59-cpp");
// ERR
CheckFactories.registerCheck<misc::ThrowByValueCatchByReferenceCheck>(
diff --git a/clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp b/clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp
index 660f0cee92ff7..6a9478a446dd3 100644
--- a/clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/fuchsia/FuchsiaTidyModule.cpp
@@ -9,7 +9,7 @@
#include "../ClangTidy.h"
#include "../ClangTidyModule.h"
#include "../ClangTidyModuleRegistry.h"
-#include "../misc/UnnamedNamespaceInHeaderCheck.h"
+#include "../misc/AnonymousNamespaceInHeaderCheck.h"
#include "DefaultArgumentsCallsCheck.h"
#include "DefaultArgumentsDeclarationsCheck.h"
#include "MultipleInheritanceCheck.h"
@@ -32,7 +32,7 @@ class FuchsiaModule : public ClangTidyModule {
"fuchsia-default-arguments-calls");
CheckFactories.registerCheck<DefaultArgumentsDeclarationsCheck>(
"fuchsia-default-arguments-declarations");
- CheckFactories.registerCheck<misc::UnnamedNamespaceInHeaderCheck>(
+ CheckFactories.registerCheck<misc::AnonymousNamespaceInHeaderCheck>(
"fuchsia-header-anon-namespaces");
CheckFactories.registerCheck<MultipleInheritanceCheck>(
"fuchsia-multiple-inheritance");
diff --git a/clang-tools-extra/clang-tidy/google/GoogleTidyModule.cpp b/clang-tools-extra/clang-tidy/google/GoogleTidyModule.cpp
index 173262d8e9778..257bd36e2a381 100644
--- a/clang-tools-extra/clang-tidy/google/GoogleTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/google/GoogleTidyModule.cpp
@@ -9,7 +9,7 @@
#include "../ClangTidy.h"
#include "../ClangTidyModule.h"
#include "../ClangTidyModuleRegistry.h"
-#include "../misc/UnnamedNamespaceInHeaderCheck.h"
+#include "../misc/AnonymousNamespaceInHeaderCheck.h"
#include "../readability/BracesAroundStatementsCheck.h"
#include "../readability/FunctionSizeCheck.h"
#include "../readability/NamespaceCommentCheck.h"
@@ -40,7 +40,7 @@ class GoogleModule : public ClangTidyModule {
void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override {
CheckFactories.registerCheck<build::ExplicitMakePairCheck>(
"google-build-explicit-make-pair");
- CheckFactories.registerCheck<misc::UnnamedNamespaceInHeaderCheck>(
+ CheckFactories.registerCheck<misc::AnonymousNamespaceInHeaderCheck>(
"google-build-namespaces");
CheckFactories.registerCheck<build::UsingNamespaceDirectiveCheck>(
"google-build-using-namespace");
diff --git a/clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.cpp b/clang-tools-extra/clang-tidy/misc/AnonymousNamespaceInHeaderCheck.cpp
similarity index 83%
rename from clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.cpp
rename to clang-tools-extra/clang-tidy/misc/AnonymousNamespaceInHeaderCheck.cpp
index d435f7484523e..ed872b538db49 100644
--- a/clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/AnonymousNamespaceInHeaderCheck.cpp
@@ -6,7 +6,7 @@
//
//===----------------------------------------------------------------------===//
-#include "UnnamedNamespaceInHeaderCheck.h"
+#include "AnonymousNamespaceInHeaderCheck.h"
#include "clang/ASTMatchers/ASTMatchFinder.h"
#include "clang/ASTMatchers/ASTMatchers.h"
@@ -14,18 +14,18 @@ using namespace clang::ast_matchers;
namespace clang::tidy::misc {
-UnnamedNamespaceInHeaderCheck::UnnamedNamespaceInHeaderCheck(
+AnonymousNamespaceInHeaderCheck::AnonymousNamespaceInHeaderCheck(
StringRef Name, ClangTidyContext *Context)
: ClangTidyCheck(Name, Context),
HeaderFileExtensions(Context->getHeaderFileExtensions()) {}
-void UnnamedNamespaceInHeaderCheck::registerMatchers(
+void AnonymousNamespaceInHeaderCheck::registerMatchers(
ast_matchers::MatchFinder *Finder) {
Finder->addMatcher(namespaceDecl(isAnonymous()).bind("anonymousNamespace"),
this);
}
-void UnnamedNamespaceInHeaderCheck::check(
+void AnonymousNamespaceInHeaderCheck::check(
const MatchFinder::MatchResult &Result) {
const auto *N = Result.Nodes.getNodeAs<NamespaceDecl>("anonymousNamespace");
const SourceLocation Loc = N->getBeginLoc();
@@ -37,4 +37,4 @@ void UnnamedNamespaceInHeaderCheck::check(
diag(Loc, "do not use unnamed namespaces in header files");
}
-} // namespace clang::tidy::misc::build
+} // namespace clang::tidy::misc
diff --git a/clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.h b/clang-tools-extra/clang-tidy/misc/AnonymousNamespaceInHeaderCheck.h
similarity index 73%
rename from clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.h
rename to clang-tools-extra/clang-tidy/misc/AnonymousNamespaceInHeaderCheck.h
index 0635e22dac5c0..ec970a41d12ba 100644
--- a/clang-tools-extra/clang-tidy/misc/UnnamedNamespaceInHeaderCheck.h
+++ b/clang-tools-extra/clang-tidy/misc/AnonymousNamespaceInHeaderCheck.h
@@ -6,8 +6,8 @@
//
//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_UNNAMEDNAMESPACEINHEADERCHECK_H
-#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_UNNAMEDNAMESPACEINHEADERCHECK_H
+#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_ANONYMOUSNAMESPACEINHEADERCHECK_H
+#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_ANONYMOUSNAMESPACEINHEADERCHECK_H
#include "../ClangTidyCheck.h"
#include "../utils/FileExtensionsUtils.h"
@@ -22,9 +22,9 @@ namespace clang::tidy::misc {
///
/// For the user-facing documentation see:
/// https://clang.llvm.org/extra/clang-tidy/checks/misc/anonymous-namespace-in-header.html
-class UnnamedNamespaceInHeaderCheck : public ClangTidyCheck {
+class AnonymousNamespaceInHeaderCheck : public ClangTidyCheck {
public:
- UnnamedNamespaceInHeaderCheck(StringRef Name, ClangTidyContext *Context);
+ AnonymousNamespaceInHeaderCheck(StringRef Name, ClangTidyContext *Context);
bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {
return LangOpts.CPlusPlus;
}
@@ -35,6 +35,6 @@ class UnnamedNamespaceInHeaderCheck : public ClangTidyCheck {
FileExtensionsSet HeaderFileExtensions;
};
-} // namespace clang::tidy::misc::build
+} // namespace clang::tidy::misc
-#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_UNNAMEDNAMESPACEINHEADERCHECK_H
+#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_ANONYMOUSNAMESPACEINHEADERCHECK_H
diff --git a/clang-tools-extra/clang-tidy/misc/CMakeLists.txt b/clang-tools-extra/clang-tidy/misc/CMakeLists.txt
index 94cede12da4d5..a6c3d1a266d30 100644
--- a/clang-tools-extra/clang-tidy/misc/CMakeLists.txt
+++ b/clang-tools-extra/clang-tidy/misc/CMakeLists.txt
@@ -18,6 +18,7 @@ add_custom_target(genconfusable DEPENDS Confusables.inc)
set_target_properties(genconfusable PROPERTIES FOLDER "Clang Tools Extra/Sourcegenning")
add_clang_library(clangTidyMiscModule STATIC
+ AnonymousNamespaceInHeaderCheck.cpp
ConstCorrectnessCheck.cpp
CoroutineHostileRAIICheck.cpp
DefinitionsInHeadersCheck.cpp
@@ -39,7 +40,6 @@ add_clang_library(clangTidyMiscModule STATIC
ThrowByValueCatchByReferenceCheck.cpp
UnconventionalAssignOperatorCheck.cpp
UniqueptrResetReleaseCheck.cpp
- UnnamedNamespaceInHeaderCheck.cpp
UnusedAliasDeclsCheck.cpp
UnusedParametersCheck.cpp
UnusedUsingDeclsCheck.cpp
diff --git a/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp b/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp
index ffcfa43564a78..201f426666b53 100644
--- a/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp
@@ -9,6 +9,7 @@
#include "../ClangTidy.h"
#include "../ClangTidyModule.h"
#include "../ClangTidyModuleRegistry.h"
+#include "AnonymousNamespaceInHeaderCheck.h"
#include "ConfusableIdentifierCheck.h"
#include "ConstCorrectnessCheck.h"
#include "CoroutineHostileRAIICheck.h"
@@ -29,7 +30,6 @@
#include "ThrowByValueCatchByReferenceCheck.h"
#include "UnconventionalAssignOperatorCheck.h"
#include "UniqueptrResetReleaseCheck.h"
-#include "UnnamedNamespaceInHeaderCheck.h"
#include "UnusedAliasDeclsCheck.h"
#include "UnusedParametersCheck.h"
#include "UnusedUsingDeclsCheck.h"
@@ -42,7 +42,7 @@ namespace misc {
class MiscModule : public ClangTidyModule {
public:
void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override {
- CheckFactories.registerCheck<UnnamedNamespaceInHeaderCheck>(
+ CheckFactories.registerCheck<AnonymousNamespaceInHeaderCheck>(
"misc-anonymous-namespace-in-header");
CheckFactories.registerCheck<ConfusableIdentifierCheck>(
"misc-confusable-identifiers");
>From 969afe4589015d8c061624b58323382c64b88efe Mon Sep 17 00:00:00 2001
From: Ondrej Storc <storcond at fit.cvut.cz>
Date: Mon, 8 Dec 2025 09:23:58 +0100
Subject: [PATCH 08/10] Remove unnecessary include of 'FileExtensionsUtils.h'
in AnonymousNamespaceInHeaderCheck.h and add it in
AnonymousNamespaceInHeaderCheck.cpp
---
.../clang-tidy/misc/AnonymousNamespaceInHeaderCheck.cpp | 1 +
.../clang-tidy/misc/AnonymousNamespaceInHeaderCheck.h | 1 -
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/clang-tools-extra/clang-tidy/misc/AnonymousNamespaceInHeaderCheck.cpp b/clang-tools-extra/clang-tidy/misc/AnonymousNamespaceInHeaderCheck.cpp
index ed872b538db49..c459ba5d9f2e9 100644
--- a/clang-tools-extra/clang-tidy/misc/AnonymousNamespaceInHeaderCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/AnonymousNamespaceInHeaderCheck.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "AnonymousNamespaceInHeaderCheck.h"
+#include "../utils/FileExtensionsUtils.h"
#include "clang/ASTMatchers/ASTMatchFinder.h"
#include "clang/ASTMatchers/ASTMatchers.h"
diff --git a/clang-tools-extra/clang-tidy/misc/AnonymousNamespaceInHeaderCheck.h b/clang-tools-extra/clang-tidy/misc/AnonymousNamespaceInHeaderCheck.h
index ec970a41d12ba..8245bdcfa8fd3 100644
--- a/clang-tools-extra/clang-tidy/misc/AnonymousNamespaceInHeaderCheck.h
+++ b/clang-tools-extra/clang-tidy/misc/AnonymousNamespaceInHeaderCheck.h
@@ -10,7 +10,6 @@
#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_ANONYMOUSNAMESPACEINHEADERCHECK_H
#include "../ClangTidyCheck.h"
-#include "../utils/FileExtensionsUtils.h"
namespace clang::tidy::misc {
>From 16745b37c82fb410e59671faaa458e818edb96e3 Mon Sep 17 00:00:00 2001
From: Ondrej Storc <storcond at fit.cvut.cz>
Date: Mon, 8 Dec 2025 09:26:45 +0100
Subject: [PATCH 09/10] [clang-tidy] Remove deprecated test file and update
namespaces in related tests
---
.../clang-tidy/checkers/google/namespaces.cpp | 51 -------------------
.../{anon-namespaces.h => namespaces.h} | 0
.../clang-tidy/checkers/misc/namespaces.cpp | 50 +++++++++++++++++-
3 files changed, 49 insertions(+), 52 deletions(-)
delete mode 100644 clang-tools-extra/test/clang-tidy/checkers/google/namespaces.cpp
rename clang-tools-extra/test/clang-tidy/checkers/misc/Inputs/{anon-namespaces.h => namespaces.h} (100%)
diff --git a/clang-tools-extra/test/clang-tidy/checkers/google/namespaces.cpp b/clang-tools-extra/test/clang-tidy/checkers/google/namespaces.cpp
deleted file mode 100644
index b0b278001d11d..0000000000000
--- a/clang-tools-extra/test/clang-tidy/checkers/google/namespaces.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-// RUN: clang-tidy %s -checks='-*,google-build-namespaces,google-build-using-namespace' -header-filter='.*' -- | FileCheck %s -implicit-check-not="{{warning|error}}:"
-#include "../misc/Inputs/anon-namespaces.h"
-// CHECK: warning: do not use unnamed namespaces in header files [google-build-namespaces]
-using namespace spaaaace;
-// CHECK: :[[@LINE-1]]:1: warning: do not use namespace using-directives; use using-declarations instead [google-build-using-namespace]
-
-using spaaaace::core; // no-warning
-
-namespace std {
-inline namespace literals {
-inline namespace chrono_literals {
-}
-inline namespace complex_literals {
-}
-inline namespace string_literals {
-}
-}
-}
-
-using namespace std::chrono_literals; // no-warning
-using namespace std::complex_literals; // no-warning
-using namespace std::literals; // no-warning
-using namespace std::literals::chrono_literals; // no-warning
-using namespace std::literals::complex_literals; // no-warning
-using namespace std::literals::string_literals; // no-warning
-using namespace std::string_literals; // no-warning
-
-namespace literals {}
-
-using namespace literals;
-// CHECK: :[[@LINE-1]]:1: warning: do not use namespace using-directives; use using-declarations instead [google-build-using-namespace]
-
-namespace foo {
-inline namespace literals {
-inline namespace bar_literals {}
-}
-}
-
-using namespace foo::literals;
-// CHECK: :[[@LINE-1]]:1: warning: do not use namespace using-directives; use using-declarations instead [google-build-using-namespace]
-
-using namespace foo::bar_literals;
-// CHECK: :[[@LINE-1]]:1: warning: do not use namespace using-directives; use using-declarations instead [google-build-using-namespace]
-
-using namespace foo::literals::bar_literals;
-// CHECK: :[[@LINE-1]]:1: warning: do not use namespace using-directives; use using-declarations instead [google-build-using-namespace]
-
-namespace foo_literals {}
-
-using namespace foo_literals;
-// CHECK: :[[@LINE-1]]:1: warning: do not use namespace using-directives; use using-declarations instead [google-build-using-namespace]
diff --git a/clang-tools-extra/test/clang-tidy/checkers/misc/Inputs/anon-namespaces.h b/clang-tools-extra/test/clang-tidy/checkers/misc/Inputs/namespaces.h
similarity index 100%
rename from clang-tools-extra/test/clang-tidy/checkers/misc/Inputs/anon-namespaces.h
rename to clang-tools-extra/test/clang-tidy/checkers/misc/Inputs/namespaces.h
diff --git a/clang-tools-extra/test/clang-tidy/checkers/misc/namespaces.cpp b/clang-tools-extra/test/clang-tidy/checkers/misc/namespaces.cpp
index d01547bfde8ce..7a59f4bd14ac8 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/misc/namespaces.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/misc/namespaces.cpp
@@ -1,3 +1,51 @@
// RUN: clang-tidy %s -checks='-*,misc-anonymous-namespace-in-header,google-build-using-namespace' -header-filter='.*' -- | FileCheck %s -implicit-check-not="{{warning|error}}:"
-#include "Inputs/anon-namespaces.h"
+#include "Inputs/namespaces.h"
// CHECK: warning: do not use unnamed namespaces in header files [misc-anonymous-namespace-in-header]
+using namespace spaaaace;
+// CHECK: :[[@LINE-1]]:1: warning: do not use namespace using-directives; use using-declarations instead [google-build-using-namespace]
+
+using spaaaace::core; // no-warning
+
+namespace std {
+inline namespace literals {
+inline namespace chrono_literals {
+}
+inline namespace complex_literals {
+}
+inline namespace string_literals {
+}
+}
+}
+
+using namespace std::chrono_literals; // no-warning
+using namespace std::complex_literals; // no-warning
+using namespace std::literals; // no-warning
+using namespace std::literals::chrono_literals; // no-warning
+using namespace std::literals::complex_literals; // no-warning
+using namespace std::literals::string_literals; // no-warning
+using namespace std::string_literals; // no-warning
+
+namespace literals {}
+
+using namespace literals;
+// CHECK: :[[@LINE-1]]:1: warning: do not use namespace using-directives; use using-declarations instead [google-build-using-namespace]
+
+namespace foo {
+inline namespace literals {
+inline namespace bar_literals {}
+}
+}
+
+using namespace foo::literals;
+// CHECK: :[[@LINE-1]]:1: warning: do not use namespace using-directives; use using-declarations instead [google-build-using-namespace]
+
+using namespace foo::bar_literals;
+// CHECK: :[[@LINE-1]]:1: warning: do not use namespace using-directives; use using-declarations instead [google-build-using-namespace]
+
+using namespace foo::literals::bar_literals;
+// CHECK: :[[@LINE-1]]:1: warning: do not use namespace using-directives; use using-declarations instead [google-build-using-namespace]
+
+namespace foo_literals {}
+
+using namespace foo_literals;
+// CHECK: :[[@LINE-1]]:1: warning: do not use namespace using-directives; use using-declarations instead [google-build-using-namespace]
>From a83daf09628c4568d0c11b81b7d7878bdc9a3f43 Mon Sep 17 00:00:00 2001
From: Ondrej Storc <storcond at fit.cvut.cz>
Date: Mon, 8 Dec 2025 09:26:56 +0100
Subject: [PATCH 10/10] [clang-tidy] Update documentation for
google-build-namespaces and anonymous-namespace-in-header checks
---
.../clang-tidy/checks/google/build-namespaces.rst | 4 ++++
.../checks/misc/anonymous-namespace-in-header.rst | 14 +++++---------
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/clang-tools-extra/docs/clang-tidy/checks/google/build-namespaces.rst b/clang-tools-extra/docs/clang-tidy/checks/google/build-namespaces.rst
index 26a0765221ce6..de536efefd06c 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/google/build-namespaces.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/google/build-namespaces.rst
@@ -5,6 +5,10 @@
google-build-namespaces
=======================
+https://google.github.io/styleguide/cppguide.html#Namespaces
+
+Corresponding cpplint.py check name: `build/namespaces`.
+
The `google-build-namespaces` check is an alias, please see
:doc:`misc-anonymous-namespace-in-header <../misc/anonymous-namespace-in-header>`
for more information.
diff --git a/clang-tools-extra/docs/clang-tidy/checks/misc/anonymous-namespace-in-header.rst b/clang-tools-extra/docs/clang-tidy/checks/misc/anonymous-namespace-in-header.rst
index 796642adc095f..7a0535f84de80 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/misc/anonymous-namespace-in-header.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/misc/anonymous-namespace-in-header.rst
@@ -3,12 +3,8 @@
anonymous-namespace-in-header
=============================
-`cert-dcl59-cpp` redirects here as an alias for this check.
-`fuchsia-header-anon-namespaces` redirects here as an alias for this check.
-`google-build-namespaces` redirects here as an alias for this check.
-
-Finds anonymous namespaces in headers.
-
-https://google.github.io/styleguide/cppguide.html#Namespaces
-
-Corresponding cpplint.py check name: `build/namespaces`.
+Finds anonymous namespaces in headers. Anonymous namespaces in headers can lead to
+ODR (One Definition Rule) violations, as each translation unit including the header
+will have its own unique version of the entities declared within the anonymous
+namespace. This can cause issues when linking, as the linker may see multiple
+definitions of the same entity, leading to unexpected behavior or linker errors.
\ No newline at end of file
More information about the cfe-commits
mailing list