summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Kamm <christian.d.kamm@nokia.com>2011-10-04 09:49:30 +0200
committerChristian Kamm <christian.d.kamm@nokia.com>2011-10-12 08:49:41 +0200
commitd48566234f23e9c7381afb192cc26da176741af8 (patch)
treeb2f7bded8c63dd533e9868b3cfcc14804b8c5270 /src
parent038111c384e79d20faa33e52a9bbbc8999ad695b (diff)
downloadqt-creator-d48566234f23e9c7381afb192cc26da176741af8.tar.gz
QmlJS checks: Hint about extra parentheses.
Migrated from QtChecker. Change-Id: I85f7dd039ac858b103dfe0af257f66031540c5de Reviewed-on: http://codereview.qt-project.org/5969 Sanity-Review: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Fawzi Mohamed <fawzi.mohamed@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/libs/qmljs/qmljscheck.cpp32
-rw-r--r--src/libs/qmljs/qmljscheck.h5
-rw-r--r--src/libs/qmljs/qmljsstaticanalysismessage.cpp5
3 files changed, 39 insertions, 3 deletions
diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp
index 680d033ad1..f0b5d228b9 100644
--- a/src/libs/qmljs/qmljscheck.cpp
+++ b/src/libs/qmljs/qmljscheck.cpp
@@ -525,6 +525,7 @@ Check::Check(Document::Ptr doc, const ContextPtr &context)
disableMessage(HintDeclarationsShouldBeAtStartOfFunction);
disableMessage(HintBinaryOperatorSpacing);
disableMessage(HintOneStatementPerLine);
+ disableMessage(HintExtraParentheses);
}
Check::~Check()
@@ -1104,6 +1105,13 @@ void Check::checkBindingRhs(Statement *statement)
addMessages(unreachableCheck(statement));
}
+void Check::checkExtraParentheses(ExpressionNode *expression)
+{
+ if (NestedExpression *nested = cast<NestedExpression *>(expression)) {
+ addMessage(HintExtraParentheses, nested->lparenToken);
+ }
+}
+
void Check::addMessages(const QList<Message> &messages)
{
foreach (const Message &msg, messages)
@@ -1199,6 +1207,30 @@ bool Check::visit(StatementList *ast)
return true;
}
+bool Check::visit(ReturnStatement *ast)
+{
+ checkExtraParentheses(ast->expression);
+ return true;
+}
+
+bool Check::visit(ThrowStatement *ast)
+{
+ checkExtraParentheses(ast->expression);
+ return true;
+}
+
+bool Check::visit(DeleteExpression *ast)
+{
+ checkExtraParentheses(ast->expression);
+ return true;
+}
+
+bool Check::visit(TypeOfExpression *ast)
+{
+ checkExtraParentheses(ast->expression);
+ return true;
+}
+
/// When something is changed here, also change ReadingContext::lookupProperty in
/// texttomodelmerger.cpp
/// ### Maybe put this into the context as a helper method.
diff --git a/src/libs/qmljs/qmljscheck.h b/src/libs/qmljs/qmljscheck.h
index e96e4f9a5b..d824d43514 100644
--- a/src/libs/qmljs/qmljscheck.h
+++ b/src/libs/qmljs/qmljscheck.h
@@ -96,6 +96,10 @@ protected:
virtual bool visit(AST::NewMemberExpression *ast);
virtual bool visit(AST::CallExpression *ast);
virtual bool visit(AST::StatementList *ast);
+ virtual bool visit(AST::ReturnStatement *ast);
+ virtual bool visit(AST::ThrowStatement *ast);
+ virtual bool visit(AST::DeleteExpression *ast);
+ virtual bool visit(AST::TypeOfExpression *ast);
virtual void endVisit(QmlJS::AST::UiObjectInitializer *);
@@ -108,6 +112,7 @@ private:
void checkProperty(QmlJS::AST::UiQualifiedId *);
void checkNewExpression(AST::ExpressionNode *node);
void checkBindingRhs(AST::Statement *statement);
+ void checkExtraParentheses(AST::ExpressionNode *expression);
void addMessages(const QList<StaticAnalysis::Message> &messages);
void addMessage(const StaticAnalysis::Message &message);
diff --git a/src/libs/qmljs/qmljsstaticanalysismessage.cpp b/src/libs/qmljs/qmljsstaticanalysismessage.cpp
index 3ba5786583..51318a85ee 100644
--- a/src/libs/qmljs/qmljsstaticanalysismessage.cpp
+++ b/src/libs/qmljs/qmljsstaticanalysismessage.cpp
@@ -150,9 +150,8 @@ StaticAnalysisMessages::StaticAnalysisMessages()
tr("confusing minuses"));
newMsg(HintDeclareVarsInOneLine, Hint,
tr("declare all function vars on a single line"));
- // unused
-// newMsg(HintExtraParentheses, Hint,
-// tr(""));
+ newMsg(HintExtraParentheses, Hint,
+ tr("unnecessary parentheses"));
newMsg(MaybeWarnEqualityTypeCoercion, MaybeWarning,
tr("== and != may perform type coercion, use === or !== to avoid"));
newMsg(WarnConfusingExpressionStatement, Warning,