PiotrZSL updated this revision to Diff 547503.
PiotrZSL added a comment.
Rebase + make tests more simple
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D157190/new/
https://reviews.llvm.org/D157190
Files:
clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp
Index:
clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp
+++ clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp
@@ -707,3 +707,19 @@
task ImplicitDeclTest(async_obj &a_object) {
co_await a_object; // CHECK-MESSAGES-NOT: warning: invalid case style for
local variable
}
+
+// Test scenario when canonical declaration will be a forward declaration
+struct ForwardDeclStruct;
+// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: invalid case style for struct
'ForwardDeclStruct' [readability-identifier-naming]
+// CHECK-FIXES: {{^}}struct forward_decl_struct;
+// CHECK-FIXES: {{^}}struct forward_decl_struct {
+struct ForwardDeclStruct {
+};
+
+struct forward_declared_as_struct;
+// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: invalid case style for class
'forward_declared_as_struct' [readability-identifier-naming]
+// CHECK-FIXES: {{^}}struct CForwardDeclaredAsStruct;
+// CHECK-FIXES: {{^}}class CForwardDeclaredAsStruct {
+class forward_declared_as_struct {
+};
+
Index: clang-tools-extra/docs/ReleaseNotes.rst
===================================================================
--- clang-tools-extra/docs/ReleaseNotes.rst
+++ clang-tools-extra/docs/ReleaseNotes.rst
@@ -172,6 +172,10 @@
<clang-tidy/checks/llvm/namespace-comment>` check to provide fixes for
``inline`` namespaces in the same format as :program:`clang-format`.
+- Improved the :doc:`readability-identifier-naming
+ <clang-tidy/checks/readability/identifier-naming>` check to emit proper
+ warnings when a type forward declaration precedes its definition.
+
Removed checks
^^^^^^^^^^^^^^
Index: clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
===================================================================
--- clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
+++ clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
@@ -1140,30 +1140,28 @@
if (Decl->isAnonymousStructOrUnion())
return SK_Invalid;
- if (!Decl->getCanonicalDecl()->isThisDeclarationADefinition())
- return SK_Invalid;
-
- if (Decl->hasDefinition() && Decl->isAbstract() &&
- NamingStyles[SK_AbstractClass])
- return SK_AbstractClass;
+ if (const auto *Definition = Decl->getDefinition()) {
+ if (Definition->isAbstract() && NamingStyles[SK_AbstractClass])
+ return SK_AbstractClass;
- if (Decl->isStruct() && NamingStyles[SK_Struct])
- return SK_Struct;
+ if (Definition->isStruct() && NamingStyles[SK_Struct])
+ return SK_Struct;
- if (Decl->isStruct() && NamingStyles[SK_Class])
- return SK_Class;
+ if (Definition->isStruct() && NamingStyles[SK_Class])
+ return SK_Class;
- if (Decl->isClass() && NamingStyles[SK_Class])
- return SK_Class;
+ if (Definition->isClass() && NamingStyles[SK_Class])
+ return SK_Class;
- if (Decl->isClass() && NamingStyles[SK_Struct])
- return SK_Struct;
+ if (Definition->isClass() && NamingStyles[SK_Struct])
+ return SK_Struct;
- if (Decl->isUnion() && NamingStyles[SK_Union])
- return SK_Union;
+ if (Definition->isUnion() && NamingStyles[SK_Union])
+ return SK_Union;
- if (Decl->isEnum() && NamingStyles[SK_Enum])
- return SK_Enum;
+ if (Definition->isEnum() && NamingStyles[SK_Enum])
+ return SK_Enum;
+ }
return SK_Invalid;
}
Index: clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp
+++ clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp
@@ -707,3 +707,19 @@
task ImplicitDeclTest(async_obj &a_object) {
co_await a_object; // CHECK-MESSAGES-NOT: warning: invalid case style for local variable
}
+
+// Test scenario when canonical declaration will be a forward declaration
+struct ForwardDeclStruct;
+// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: invalid case style for struct 'ForwardDeclStruct' [readability-identifier-naming]
+// CHECK-FIXES: {{^}}struct forward_decl_struct;
+// CHECK-FIXES: {{^}}struct forward_decl_struct {
+struct ForwardDeclStruct {
+};
+
+struct forward_declared_as_struct;
+// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: invalid case style for class 'forward_declared_as_struct' [readability-identifier-naming]
+// CHECK-FIXES: {{^}}struct CForwardDeclaredAsStruct;
+// CHECK-FIXES: {{^}}class CForwardDeclaredAsStruct {
+class forward_declared_as_struct {
+};
+
Index: clang-tools-extra/docs/ReleaseNotes.rst
===================================================================
--- clang-tools-extra/docs/ReleaseNotes.rst
+++ clang-tools-extra/docs/ReleaseNotes.rst
@@ -172,6 +172,10 @@
<clang-tidy/checks/llvm/namespace-comment>` check to provide fixes for
``inline`` namespaces in the same format as :program:`clang-format`.
+- Improved the :doc:`readability-identifier-naming
+ <clang-tidy/checks/readability/identifier-naming>` check to emit proper
+ warnings when a type forward declaration precedes its definition.
+
Removed checks
^^^^^^^^^^^^^^
Index: clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
===================================================================
--- clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
+++ clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
@@ -1140,30 +1140,28 @@
if (Decl->isAnonymousStructOrUnion())
return SK_Invalid;
- if (!Decl->getCanonicalDecl()->isThisDeclarationADefinition())
- return SK_Invalid;
-
- if (Decl->hasDefinition() && Decl->isAbstract() &&
- NamingStyles[SK_AbstractClass])
- return SK_AbstractClass;
+ if (const auto *Definition = Decl->getDefinition()) {
+ if (Definition->isAbstract() && NamingStyles[SK_AbstractClass])
+ return SK_AbstractClass;
- if (Decl->isStruct() && NamingStyles[SK_Struct])
- return SK_Struct;
+ if (Definition->isStruct() && NamingStyles[SK_Struct])
+ return SK_Struct;
- if (Decl->isStruct() && NamingStyles[SK_Class])
- return SK_Class;
+ if (Definition->isStruct() && NamingStyles[SK_Class])
+ return SK_Class;
- if (Decl->isClass() && NamingStyles[SK_Class])
- return SK_Class;
+ if (Definition->isClass() && NamingStyles[SK_Class])
+ return SK_Class;
- if (Decl->isClass() && NamingStyles[SK_Struct])
- return SK_Struct;
+ if (Definition->isClass() && NamingStyles[SK_Struct])
+ return SK_Struct;
- if (Decl->isUnion() && NamingStyles[SK_Union])
- return SK_Union;
+ if (Definition->isUnion() && NamingStyles[SK_Union])
+ return SK_Union;
- if (Decl->isEnum() && NamingStyles[SK_Enum])
- return SK_Enum;
+ if (Definition->isEnum() && NamingStyles[SK_Enum])
+ return SK_Enum;
+ }
return SK_Invalid;
}
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits