https://github.com/CarvedCoder updated https://github.com/llvm/llvm-project/pull/198517
>From f41ac8fa6ff81f875c096202dbbbf5043d9acecd Mon Sep 17 00:00:00 2001 From: CarvedCoder <[email protected]> Date: Tue, 19 May 2026 19:10:26 +0530 Subject: [PATCH 1/4] [clang-tidy] Fix readability-identifier-naming on forward declarations --- .../readability/IdentifierNamingCheck.cpp | 19 +++++ .../identifier-naming-forward-decl.cpp | 70 +++++++++++++++++++ .../readability/identifier-naming.cpp | 4 +- 3 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-forward-decl.cpp diff --git a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp index a356e1390b62d..5db0ae4c9bec1 100644 --- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp @@ -11,6 +11,7 @@ #include "../GlobList.h" #include "../utils/ASTUtils.h" #include "clang/AST/CXXInheritance.h" +#include "clang/AST/DeclTemplate.h" #include "clang/Lex/PPCallbacks.h" #include "clang/Lex/Preprocessor.h" #include "llvm/ADT/ArrayRef.h" @@ -1189,6 +1190,24 @@ StyleKind IdentifierNamingCheck::findStyleKind( return SK_Enum; } + if (Decl->isStruct() && NamingStyles[SK_Struct]) + return SK_Struct; + + if (Decl->isStruct() && NamingStyles[SK_Class]) + return SK_Class; + + if (Decl->isClass() && NamingStyles[SK_Class]) + return SK_Class; + + if (Decl->isClass() && NamingStyles[SK_Struct]) + return SK_Struct; + + if (Decl->isUnion() && NamingStyles[SK_Union]) + return SK_Union; + + if (Decl->isEnum() && NamingStyles[SK_Enum]) + return SK_Enum; + return undefinedStyle(NamingStyles); } diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-forward-decl.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-forward-decl.cpp new file mode 100644 index 0000000000000..5011abfac78e7 --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-forward-decl.cpp @@ -0,0 +1,70 @@ +// RUN: %check_clang_tidy -std=c++20 %s readability-identifier-naming %t -- \ +// RUN: -config='{CheckOptions: { \ +// RUN: readability-identifier-naming.DefaultCase: lower_case, \ +// RUN: readability-identifier-naming.ClassCase: CamelCase, \ +// RUN: readability-identifier-naming.StructCase: CamelCase, \ +// RUN: readability-identifier-naming.UnionCase: CamelCase, \ +// RUN: readability-identifier-naming.TemplateParameterCase: CamelCase \ +// RUN: }}' + +// Forward declarations should use their semantic declaration kind +// instead of falling back to DefaultCase. + +// Namespace-scope forward declarations. + +class GoodClass; + +class bad_class; +// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for class 'bad_class' + +struct GoodStruct; + +struct bad_struct; +// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: invalid case style for struct 'bad_struct' + +union GoodUnion; + +union bad_union; +// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for union 'bad_union' + +// Nested forward declarations. + +class Outer { + class GoodInnerClass; + + class bad_inner_class; + // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: invalid case style for class 'bad_inner_class' + + struct GoodInnerStruct; + + struct bad_inner_struct; + // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: invalid case style for struct 'bad_inner_struct' + + union GoodInnerUnion; + + union bad_inner_union; + // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: invalid case style for union 'bad_inner_union' +}; + +// Template forward declarations. + +template <typename T> +class GoodTemplateClass; + +template <typename T> +class bad_template_class; +// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for class 'bad_template_class' + +template <typename T> +struct GoodTemplateStruct; + +template <typename T> +struct bad_template_struct; +// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: invalid case style for struct 'bad_template_struct' + +template <typename T> +union GoodTemplateUnion; + +template <typename T> +union bad_template_union; +// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for union 'bad_template_union' diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp index f0a72ee31bc21..ef02f0f8a200b 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp @@ -248,8 +248,8 @@ class my_class; // Just make sure the fix is applied. // CHECK-FIXES: class CMyClass; -class my_forward_declared_class; // No warning should be triggered. - +class my_forward_declared_class; +// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for class 'my_forward_declared_class' const int my_class::classConstant = 4; // CHECK-FIXES: const int CMyClass::kClassConstant = 4; >From 2e9aa15cf2d7532a3a016ed8fa2777264f2b708f Mon Sep 17 00:00:00 2001 From: CarvedCoder <[email protected]> Date: Wed, 20 May 2026 16:15:45 +0530 Subject: [PATCH 2/4] Added release notes --- clang-tools-extra/docs/ReleaseNotes.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 9f601babf7b27..2c15c02aceb6e 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -676,6 +676,10 @@ Changes in existing checks - Fixed a false positive where function templates could be diagnosed as generic identifiers when `DefaultCase` was enabled. + - Fixed forward declarations incorrectly falling back to `DefaultCase` + instead of using their semantic declaration kind (for example + `ClassCase`, `StructCase`, or `UnionCase`). + - Improved :doc:`readability-implicit-bool-conversion <clang-tidy/checks/readability/implicit-bool-conversion>` check: >From 85fa26fa984a23a5c93b6f2573d786eeda3a8352 Mon Sep 17 00:00:00 2001 From: CarvedCoder <[email protected]> Date: Wed, 20 May 2026 16:34:42 +0530 Subject: [PATCH 3/4] added fix-its --- .../readability/identifier-naming-forward-decl.cpp | 10 ++++++++++ .../checkers/readability/identifier-naming.cpp | 2 ++ 2 files changed, 12 insertions(+) diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-forward-decl.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-forward-decl.cpp index 5011abfac78e7..23b2ed9af4176 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-forward-decl.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-forward-decl.cpp @@ -16,16 +16,19 @@ class GoodClass; class bad_class; // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for class 'bad_class' +// CHECK-FIXES: class BadClass; struct GoodStruct; struct bad_struct; // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: invalid case style for struct 'bad_struct' +// CHECK-FIXES: class BadStruct; union GoodUnion; union bad_union; // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for union 'bad_union' +// CHECK-FIXES: class BadUnion; // Nested forward declarations. @@ -34,16 +37,20 @@ class Outer { class bad_inner_class; // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: invalid case style for class 'bad_inner_class' + // CHECK-FIXES: class BadInnerClass; struct GoodInnerStruct; struct bad_inner_struct; // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: invalid case style for struct 'bad_inner_struct' + // CHECK-FIXES: class BadInnerStruct; union GoodInnerUnion; union bad_inner_union; // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: invalid case style for union 'bad_inner_union' + // CHECK-FIXES: class BadInnerUnion; + }; // Template forward declarations. @@ -54,6 +61,7 @@ class GoodTemplateClass; template <typename T> class bad_template_class; // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for class 'bad_template_class' +// CHECK-FIXES: class BadTemplateClass; template <typename T> struct GoodTemplateStruct; @@ -61,6 +69,7 @@ struct GoodTemplateStruct; template <typename T> struct bad_template_struct; // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: invalid case style for struct 'bad_template_struct' +// CHECK-FIXES: class BadTemplateStruct; template <typename T> union GoodTemplateUnion; @@ -68,3 +77,4 @@ union GoodTemplateUnion; template <typename T> union bad_template_union; // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for union 'bad_template_union' +// CHECK-FIXES: class BadTemplateUnion; diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp index ef02f0f8a200b..f3f8d8e020ab5 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp @@ -250,6 +250,8 @@ class my_class; class my_forward_declared_class; // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for class 'my_forward_declared_class' +// CHECK-FIXES: class MyForwwardDeclaredClass + const int my_class::classConstant = 4; // CHECK-FIXES: const int CMyClass::kClassConstant = 4; >From 2b252ca2df2033ecf46553434951b5842471e301 Mon Sep 17 00:00:00 2001 From: CarvedCoder <[email protected]> Date: Wed, 20 May 2026 16:37:35 +0530 Subject: [PATCH 4/4] Fix class name casing in identifier-naming test --- .../test/clang-tidy/checkers/readability/identifier-naming.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp index f3f8d8e020ab5..13a133746f47f 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp @@ -250,7 +250,7 @@ class my_class; class my_forward_declared_class; // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for class 'my_forward_declared_class' -// CHECK-FIXES: class MyForwwardDeclaredClass +// CHECK-FIXES: class MyForwardDeclaredClass const int my_class::classConstant = 4; // CHECK-FIXES: const int CMyClass::kClassConstant = 4; _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
