diff options
author | Christian Kamm <christian.d.kamm@nokia.com> | 2011-10-04 09:49:30 +0200 |
---|---|---|
committer | Christian Kamm <christian.d.kamm@nokia.com> | 2011-10-12 08:49:41 +0200 |
commit | d48566234f23e9c7381afb192cc26da176741af8 (patch) | |
tree | b2f7bded8c63dd533e9868b3cfcc14804b8c5270 /src | |
parent | 038111c384e79d20faa33e52a9bbbc8999ad695b (diff) | |
download | qt-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.cpp | 32 | ||||
-rw-r--r-- | src/libs/qmljs/qmljscheck.h | 5 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsstaticanalysismessage.cpp | 5 |
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, |