aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSergio Martins <smartins@kde.org>2018-08-24 17:53:52 +0100
committerSergio Martins <smartins@kde.org>2018-08-24 17:53:52 +0100
commit7443d26f9db26ba5be370f12f252f22f4bd0a00a (patch)
tree7c4673f62e369bc50ccdf4428acdd28f866cf1cb /src
parent68eca8e0b7353575d93183bc556aeec9a0ddf646 (diff)
connect-3arg-lambda: Also warn for QMenu::addAction()
Diffstat (limited to 'src')
-rw-r--r--src/checks/level1/connect-3arg-lambda.cpp25
-rw-r--r--src/checks/level1/connect-3arg-lambda.h1
2 files changed, 23 insertions, 3 deletions
diff --git a/src/checks/level1/connect-3arg-lambda.cpp b/src/checks/level1/connect-3arg-lambda.cpp
index a66110f7..9422c986 100644
--- a/src/checks/level1/connect-3arg-lambda.cpp
+++ b/src/checks/level1/connect-3arg-lambda.cpp
@@ -49,11 +49,17 @@ void Connect3ArgLambda::VisitStmt(clang::Stmt *stmt)
if (numParams != 2 && numParams != 3)
return;
- if (fdecl->getQualifiedNameAsString() == "QTimer::singleShot") {
+ string qualifiedName = fdecl->getQualifiedNameAsString();
+ if (qualifiedName == "QTimer::singleShot") {
processQTimer(fdecl, stmt);
return;
}
+ if (qualifiedName == "QMenu::addAction") {
+ processQMenu(fdecl, stmt);
+ return;
+ }
+
if (numParams != 3 || !clazy::isConnect(fdecl))
return;
@@ -112,7 +118,6 @@ void Connect3ArgLambda::processQTimer(FunctionDecl *func, Stmt *stmt)
// QTimer::singleShot(int msec, Functor functor)
// QTimer::singleShot(int msec, Qt::TimerType timerType, Functor functor)
-
const uint numParams = func->getNumParams();
if (numParams == 2) {
if (func->getParamDecl(0)->getNameAsString() == "interval" &&
@@ -123,7 +128,21 @@ void Connect3ArgLambda::processQTimer(FunctionDecl *func, Stmt *stmt)
if (func->getParamDecl(0)->getNameAsString() == "interval" &&
func->getParamDecl(1)->getNameAsString() == "timerType" &&
func->getParamDecl(2)->getNameAsString() == "slot") {
- emitWarning(stmt, "Pass a context object as 3nd singleShot parameter");
+ emitWarning(stmt, "Pass a context object as 3rd singleShot parameter");
}
}
}
+
+void Connect3ArgLambda::processQMenu(FunctionDecl *func, Stmt *stmt)
+{
+ // Signatures to catch:
+ // QMenu::addAction(const QString &text, Func1 slot, const QKeySequence &shortcut = 0)
+ const uint numParams = func->getNumParams();
+ if (numParams == 3) {
+ if (func->getParamDecl(0)->getNameAsString() == "text" &&
+ func->getParamDecl(1)->getNameAsString() == "slot" &&
+ func->getParamDecl(2)->getNameAsString() == "shortcut") {
+ emitWarning(stmt, "Pass a context object as 2nd singleShot parameter");
+ }
+ }
+}
diff --git a/src/checks/level1/connect-3arg-lambda.h b/src/checks/level1/connect-3arg-lambda.h
index 66f3d3ff..13c819dd 100644
--- a/src/checks/level1/connect-3arg-lambda.h
+++ b/src/checks/level1/connect-3arg-lambda.h
@@ -35,6 +35,7 @@ public:
void VisitStmt(clang::Stmt *stmt) override;
private:
void processQTimer(clang::FunctionDecl *, clang::Stmt *);
+ void processQMenu(clang::FunctionDecl *, clang::Stmt *);
};
#endif