QmlJS checks: Suppression of static analysis messages.

* Use '// @disable M123' to suppress
* Add quick fix to add these comments

Change-Id: I499f5a6004148afbb346218c6fb01c9ca77b9f73
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
This commit is contained in:
Christian Kamm
2011-10-19 14:27:40 +02:00
parent cf156cd2ea
commit 0ed824762c
9 changed files with 139 additions and 4 deletions

View File

@@ -133,6 +133,53 @@ private:
};
};
/*
Adds a comment to suppress a static analysis message
*/
class AddAnalysisMessageSuppressionComment: public QmlJSQuickFixFactory
{
public:
virtual QList<QmlJSQuickFixOperation::Ptr> match(
const QSharedPointer<const QmlJSQuickFixAssistInterface> &interface)
{
const QList<StaticAnalysis::Message> &messages = interface->semanticInfo().staticAnalysisMessages;
foreach (const StaticAnalysis::Message &message, messages) {
if (interface->currentFile()->isCursorOn(message.location)) {
return singleResult(new Operation(interface, message));
}
}
return noResult();
}
private:
class Operation: public QmlJSQuickFixOperation
{
StaticAnalysis::Message _message;
public:
Operation(const QSharedPointer<const QmlJSQuickFixAssistInterface> &interface,
const StaticAnalysis::Message &message)
: QmlJSQuickFixOperation(interface, 0)
, _message(message)
{
setDescription(AddAnalysisMessageSuppressionComment::tr("Add a comment to suppress this message"));
}
virtual void performChanges(QmlJSRefactoringFilePtr currentFile,
const QmlJSRefactoringChanges &)
{
Utils::ChangeSet changes;
const int insertLoc = _message.location.begin() - _message.location.startColumn + 1;
changes.insert(insertLoc, QString("// %1\n").arg(_message.suppressionString()));
currentFile->setChangeSet(changes);
currentFile->appendIndentRange(Range(insertLoc, insertLoc + 1));
currentFile->apply();
}
};
};
} // end of anonymous namespace
void registerQuickFixes(ExtensionSystem::IPlugin *plugIn)
@@ -140,4 +187,5 @@ void registerQuickFixes(ExtensionSystem::IPlugin *plugIn)
plugIn->addAutoReleasedObject(new SplitInitializerOp);
plugIn->addAutoReleasedObject(new ComponentFromObjectDef);
plugIn->addAutoReleasedObject(new WrapInLoader);
plugIn->addAutoReleasedObject(new AddAnalysisMessageSuppressionComment);
}