[clang-tools-extra] 5d95d27 - [clang-tidy] Fix support for typedefs in readability-identifier-naming (#66835)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 20 12:29:58 PDT 2023
Author: Piotr Zegar
Date: 2023-09-20T21:29:54+02:00
New Revision: 5d95d27e50c1f5ce4803039d942ff3c25401c77f
URL: https://github.com/llvm/llvm-project/commit/5d95d27e50c1f5ce4803039d942ff3c25401c77f
DIFF: https://github.com/llvm/llvm-project/commit/5d95d27e50c1f5ce4803039d942ff3c25401c77f.diff
LOG: [clang-tidy] Fix support for typedefs in readability-identifier-naming (#66835)
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.
Fixes #55156, #54699
Added:
Modified:
clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp
clang-tools-extra/docs/ReleaseNotes.rst
clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp
Removed:
################################################################################
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 2c54573780c6920..b4660db333f3c14 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -295,7 +295,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..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
@@ -729,3 +729,29 @@ struct forward_declared_as_struct;
class forward_declared_as_struct {
};
+namespace pr55156 {
+
+template<typename> struct Wrap;
+
+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;
+
+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) {}
+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
+}
More information about the cfe-commits
mailing list