https://github.com/PiotrZSL updated https://github.com/llvm/llvm-project/pull/66835
>From c1c71f8b10cee9c355e5a76e3a3bcf5ac4f7d144 Mon Sep 17 00:00:00 2001 From: Piotr Zegar <m...@piotrzegar.pl> Date: Tue, 19 Sep 2023 21:22:42 +0000 Subject: [PATCH 1/2] [clang-tidy] Fix support for typedefs in readability-identifier-naming Typedef rename were not properly handled when typedef were used behind pointer, or as a part of function type. Additionally because entire function were passed as an source-range, when function started with macro, such change were not marked for a fix. Removed workaround and used proper TypedefTypeLoc instead. --- .../utils/RenamerClangTidyCheck.cpp | 25 ++++--------------- clang-tools-extra/docs/ReleaseNotes.rst | 4 ++- .../readability/identifier-naming.cpp | 18 +++++++++++++ 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp b/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp index d24b7a65b1c4334..da1433aa2d05d47 100644 --- a/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp +++ b/clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp @@ -256,26 +256,6 @@ class RenamerClangTidyVisitor return true; } - // Fix type aliases in value declarations. - if (const auto *Value = dyn_cast<ValueDecl>(Decl)) { - if (const Type *TypePtr = Value->getType().getTypePtrOrNull()) { - if (const auto *Typedef = TypePtr->getAs<TypedefType>()) - Check->addUsage(Typedef->getDecl(), Value->getSourceRange(), SM); - } - } - - // Fix type aliases in function declarations. - if (const auto *Value = dyn_cast<FunctionDecl>(Decl)) { - if (const auto *Typedef = - Value->getReturnType().getTypePtr()->getAs<TypedefType>()) - Check->addUsage(Typedef->getDecl(), Value->getSourceRange(), SM); - for (const ParmVarDecl *Param : Value->parameters()) { - if (const TypedefType *Typedef = - Param->getType().getTypePtr()->getAs<TypedefType>()) - Check->addUsage(Typedef->getDecl(), Value->getSourceRange(), SM); - } - } - // Fix overridden methods if (const auto *Method = dyn_cast<CXXMethodDecl>(Decl)) { if (const CXXMethodDecl *Overridden = getOverrideMethod(Method)) { @@ -340,6 +320,11 @@ class RenamerClangTidyVisitor return true; } + bool VisitTypedefTypeLoc(const TypedefTypeLoc &Loc) { + Check->addUsage(Loc.getTypedefNameDecl(), Loc.getSourceRange(), SM); + return true; + } + bool VisitTagTypeLoc(const TagTypeLoc &Loc) { Check->addUsage(Loc.getDecl(), Loc.getSourceRange(), SM); return true; diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 6d6f51998a01e57..b8977a39239ffce 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -291,7 +291,9 @@ Changes in existing checks warnings when a type's forward declaration precedes its definition. Additionally, it now provides appropriate warnings for ``struct`` and ``union`` in C, while also incorporating support for the - ``Leading_upper_snake_case`` naming convention. + ``Leading_upper_snake_case`` naming convention. The handling of ``typedef`` + has been enhanced, particularly within complex types like function pointers + and cases where style checks were omitted when functions started with macros. - Improved :doc:`readability-implicit-bool-conversion <clang-tidy/checks/readability/implicit-bool-conversion>` check to take 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 3445a21bfdbc4aa..0f5fc1145f8791e 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 @@ -729,3 +729,21 @@ struct forward_declared_as_struct; class forward_declared_as_struct { }; +namespace pr55156 { + +typedef enum { + VALUE0, + VALUE1, +} ValueType; +// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: invalid case style for typedef 'ValueType' [readability-identifier-naming] +// CHECK-FIXES: {{^}}} value_type_t; + +#define STATIC_MACRO static +STATIC_MACRO void someFunc(ValueType a_v1, const ValueType& a_v2) {} +// CHECK-FIXES: {{^}}STATIC_MACRO void someFunc(value_type_t a_v1, const value_type_t& a_v2) {} +STATIC_MACRO void someFunc(const ValueType** p_a_v1, ValueType (*p_a_v2)()) {} +// CHECK-FIXES: {{^}}STATIC_MACRO void someFunc(const value_type_t** p_a_v1, value_type_t (*p_a_v2)()) {} +STATIC_MACRO ValueType someFunc() {} +// CHECK-FIXES: {{^}}STATIC_MACRO value_type_t someFunc() {} +#undef STATIC_MACRO +} >From 2089eb482b8496536f1717a673e03eb7d2de99c4 Mon Sep 17 00:00:00 2001 From: Piotr Zegar <m...@piotrzegar.pl> Date: Wed, 20 Sep 2023 16:06:43 +0000 Subject: [PATCH 2/2] [clang-tidy] Add more tests for typedef function --- .../clang-tidy/checkers/readability/identifier-naming.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) 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 0f5fc1145f8791e..84bf7764583e801 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 @@ -731,6 +731,8 @@ class forward_declared_as_struct { namespace pr55156 { +template<typename> struct Wrap; + typedef enum { VALUE0, VALUE1, @@ -738,6 +740,10 @@ typedef enum { // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: invalid case style for typedef 'ValueType' [readability-identifier-naming] // CHECK-FIXES: {{^}}} value_type_t; +typedef ValueType (*MyFunPtr)(const ValueType&, Wrap<ValueType>*); +// CHECK-MESSAGES: :[[@LINE-1]]:21: warning: invalid case style for typedef 'MyFunPtr' [readability-identifier-naming] +// CHECK-FIXES: {{^}}typedef value_type_t (*my_fun_ptr_t)(const value_type_t&, Wrap<value_type_t>*); + #define STATIC_MACRO static STATIC_MACRO void someFunc(ValueType a_v1, const ValueType& a_v2) {} // CHECK-FIXES: {{^}}STATIC_MACRO void someFunc(value_type_t a_v1, const value_type_t& a_v2) {} @@ -745,5 +751,7 @@ STATIC_MACRO void someFunc(const ValueType** p_a_v1, ValueType (*p_a_v2)()) {} // CHECK-FIXES: {{^}}STATIC_MACRO void someFunc(const value_type_t** p_a_v1, value_type_t (*p_a_v2)()) {} STATIC_MACRO ValueType someFunc() {} // CHECK-FIXES: {{^}}STATIC_MACRO value_type_t someFunc() {} +STATIC_MACRO void someFunc(MyFunPtr, const MyFunPtr****) {} +// CHECK-FIXES: {{^}}STATIC_MACRO void someFunc(my_fun_ptr_t, const my_fun_ptr_t****) {} #undef STATIC_MACRO } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits