File 0001-Fix-FullyQualifiedMocTypes-giving-false-positives-fo.patch of Package clazy
From 2cec71f84238713e49f4f14f98b6cbca882ea49f Mon Sep 17 00:00:00 2001
From: Alexander Lohnau <alexander.lohnau@gmx.de>
Date: Mon, 9 Mar 2026 18:56:42 +0100
Subject: Fix FullyQualifiedMocTypes giving false positives for
pointers inside of template args
Fixes https://invent.kde.org/sdk/clazy/-/issues/35
---
Changelog | 7 +++++++
src/checks/level0/fully-qualified-moc-types.cpp | 12 ++++++++----
tests/fully-qualified-moc-types/config.json | 4 ++++
.../fully-qualified-moc-types/pointers_refs.cpp | 17 +++++++++++++++++
.../pointers_refs.cpp.expected | 2 ++
5 files changed, 38 insertions(+), 4 deletions(-)
create mode 100644 tests/fully-qualified-moc-types/pointers_refs.cpp
create mode 100644 tests/fully-qualified-moc-types/pointers_refs.cpp.expected
diff --git a/Changelog b/Changelog
index 6d4c89f..cf9e92d 100644
--- a/Changelog
+++ b/Changelog
@@ -1,3 +1,10 @@
+Version 1.17.1
+~~~~~~~~~~~~
+Released: TBD
+
+Bugfixes:
+ * fully-qualified-moc-types: Fix false positive for pointer/reference types in generics
+
Version 1.17
~~~~~~~~~~~~
Released: 2025-02-15
diff --git a/src/checks/level0/fully-qualified-moc-types.cpp b/src/checks/level0/fully-qualified-moc-types.cpp
index 95c66575..e80626ce 100644
--- a/src/checks/level0/fully-qualified-moc-types.cpp
+++ b/src/checks/level0/fully-qualified-moc-types.cpp
@@ -164,20 +164,24 @@ std::string FullyQualifiedMocTypes::getQualifiedNameOfType(const Type *ptr, bool
}
if (auto *typedefDecl = ptr->getAs<TypedefType>(); typedefDecl && typedefDecl->getDecl()) {
return typedefDecl->getDecl()->getQualifiedNameAsString();
- }
-
- else if (auto templateSpec = ptr->getAs<TemplateSpecializationType>(); templateSpec && resolveTemplateArgs) {
+ } else if (auto templateSpec = ptr->getAs<TemplateSpecializationType>(); templateSpec && resolveTemplateArgs) {
return resolveTemplateType(templateSpec, false);
} else if (auto templateSpec = ptr->getAs<TemplateSpecializationType>()) {
// In case one uses a typedef with generics, like QVector<QString> in Qt6
// The docs indicate getAsTemplateDecl might be null - so be prepared for that
if (auto *decl = templateSpec->getTemplateName().getAsTemplateDecl()) {
return decl->getQualifiedNameAsString();
- } else {
}
} else if (auto recordDecl = ptr->getAsRecordDecl()) {
return recordDecl->getQualifiedNameAsString();
}
+ // The lexer logic we use to collect the comparison string from the source code has no spaces between the type and * or &
+ if (ptr->isPointerType()) {
+ return getQualifiedNameOfType(ptr->getPointeeType().getTypePtr(), true) + "*";
+ }
+ if (ptr->isReferenceType()) {
+ return getQualifiedNameOfType(ptr->getPointeeType().getTypePtr(), true) + "&";
+ }
return QualType::getFromOpaquePtr(ptr).getAsString(lo());
}
diff --git a/tests/fully-qualified-moc-types/config.json b/tests/fully-qualified-moc-types/config.json
index 15715653..61508624 100644
--- a/tests/fully-qualified-moc-types/config.json
+++ b/tests/fully-qualified-moc-types/config.json
@@ -12,6 +12,10 @@
{
"filename": "enums.cpp",
"has_fixits": true
+ },
+ {
+ "filename": "pointers_refs.cpp",
+ "skip_qtnamespaced": true
}
]
}
diff --git a/tests/fully-qualified-moc-types/pointers_refs.cpp b/tests/fully-qualified-moc-types/pointers_refs.cpp
new file mode 100644
index 00000000..0578d1f3
--- /dev/null
+++ b/tests/fully-qualified-moc-types/pointers_refs.cpp
@@ -0,0 +1,17 @@
+#include <QtCore/qobject.h>
+namespace EnumNs {
+ class FwdClass; // https://invent.kde.org/sdk/clazy/-/issues/35
+}
+using namespace EnumNs;
+class Test: public QObject{
+ Q_OBJECT
+
+Q_SIGNALS:
+ void emitChangePtr(QList<EnumNs::FwdClass *> list);
+ void emitChangeRef(QList<EnumNs::FwdClass &> list);
+ void emitChangePtrSpace( QList< EnumNs::FwdClass * > list);
+ void emitChangeRefSpace( QList< EnumNs::FwdClass & > list);
+ void emitChangePtrUnqual(QList<FwdClass *> list);
+ void emitChangeRefUnqual(QList<FwdClass &> list);
+
+};
diff --git a/tests/fully-qualified-moc-types/pointers_refs.cpp.expected b/tests/fully-qualified-moc-types/pointers_refs.cpp.expected
new file mode 100644
index 00000000..39af6ba7
--- /dev/null
+++ b/tests/fully-qualified-moc-types/pointers_refs.cpp.expected
@@ -0,0 +1,2 @@
+fully-qualified-moc-types/pointers_refs.cpp:14:28: warning: signal arguments need to be fully-qualified [-Wclazy-fully-qualified-moc-types]
+fully-qualified-moc-types/pointers_refs.cpp:15:28: warning: signal arguments need to be fully-qualified [-Wclazy-fully-qualified-moc-types]
--
2.53.0