QmlJS: Allow disabling static analyzer messages

Provide settings to define a customized set of enabled
static analyzer messages.

Fixes: QTCREATORBUG-29095
Change-Id: Id629e383dd9e3beeef98026759ac66716dc43d23
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
This commit is contained in:
Christian Stenger
2023-04-28 14:15:27 +02:00
parent e6081aaa0a
commit 427640063e
6 changed files with 268 additions and 27 deletions

View File

@@ -12,6 +12,7 @@
#include <utils/algorithm.h>
#include <utils/qtcassert.h>
#include <utils/qtcsettings.h>
#include <QColor>
#include <QDir>
@@ -639,7 +640,46 @@ Q_GLOBAL_STATIC(UnsupportedRootObjectTypesByVisualDesigner, unsupportedRootObjec
Q_GLOBAL_STATIC(UnsupportedRootObjectTypesByQmlUi, unsupportedRootObjectTypesByQmlUi)
Q_GLOBAL_STATIC(UnsupportedTypesByQmlUi, unsupportedTypesByQmlUi)
Check::Check(Document::Ptr doc, const ContextPtr &context)
QList<StaticAnalysis::Type> Check::defaultDisabledMessages()
{
static const QList<StaticAnalysis::Type> disabled = Utils::sorted(QList<StaticAnalysis::Type>{
HintAnonymousFunctionSpacing,
HintDeclareVarsInOneLine,
HintDeclarationsShouldBeAtStartOfFunction,
HintBinaryOperatorSpacing,
HintOneStatementPerLine,
HintExtraParentheses,
// QmlDesigner related
WarnImperativeCodeNotEditableInVisualDesigner,
WarnUnsupportedTypeInVisualDesigner,
WarnReferenceToParentItemNotSupportedByVisualDesigner,
WarnUndefinedValueForVisualDesigner,
WarnStatesOnlyInRootItemForVisualDesigner,
ErrUnsupportedRootTypeInVisualDesigner,
ErrInvalidIdeInVisualDesigner,
});
return disabled;
}
QList<StaticAnalysis::Type> Check::defaultDisabledMessagesForNonQuickUi()
{
static const QList<StaticAnalysis::Type> disabled = Utils::sorted(QList<StaticAnalysis::Type>{
// QmlDesigner related
ErrUnsupportedRootTypeInQmlUi,
ErrUnsupportedTypeInQmlUi,
ErrFunctionsNotSupportedInQmlUi,
ErrBlocksNotSupportedInQmlUi,
ErrBehavioursNotSupportedInQmlUi,
ErrStatesOnlyInRootItemInQmlUi,
ErrReferenceToParentItemNotSupportedInQmlUi,
ErrDoNotMixTranslationFunctionsInQmlUi,
});
return disabled;
}
Check::Check(Document::Ptr doc, const ContextPtr &context, Utils::QtcSettings *qtcSettings)
: _doc(doc)
, _context(context)
, _scopeChain(doc, _context)
@@ -655,16 +695,25 @@ Check::Check(Document::Ptr doc, const ContextPtr &context)
}
_enabledMessages = Utils::toSet(Message::allMessageTypes());
disableMessage(HintAnonymousFunctionSpacing);
disableMessage(HintDeclareVarsInOneLine);
disableMessage(HintDeclarationsShouldBeAtStartOfFunction);
disableMessage(HintBinaryOperatorSpacing);
disableMessage(HintOneStatementPerLine);
disableMessage(HintExtraParentheses);
if (qtcSettings && qtcSettings->value("J.QtQuick/QmlJSEditor.useCustomAnalyzer").toBool()) {
auto disabled = qtcSettings->value("J.QtQuick/QmlJSEditor.disabledMessages").toList();
for (const QVariant &disabledNumber : disabled)
disableMessage(StaticAnalysis::Type(disabledNumber.toInt()));
disableQmlDesignerChecks();
if (!isQtQuick2Ui())
disableQmlDesignerUiFileChecks();
if (!isQtQuick2Ui()) {
auto disabled = qtcSettings->value("J.QtQuick/QmlJSEditor.disabledMessagesNonQuickUI").toList();
for (const QVariant &disabledNumber : disabled)
disableMessage(StaticAnalysis::Type(disabledNumber.toInt()));
}
} else {
for (auto type : defaultDisabledMessages())
disableMessage(type);
if (!isQtQuick2Ui()) {
for (auto type : defaultDisabledMessagesForNonQuickUi())
disableMessage(type);
}
}
}
Check::~Check()
@@ -702,17 +751,6 @@ void Check::enableQmlDesignerChecks()
//## triggers too often ## check.enableMessage(StaticAnalysis::WarnUndefinedValueForVisualDesigner);
}
void Check::disableQmlDesignerChecks()
{
disableMessage(WarnImperativeCodeNotEditableInVisualDesigner);
disableMessage(WarnUnsupportedTypeInVisualDesigner);
disableMessage(WarnReferenceToParentItemNotSupportedByVisualDesigner);
disableMessage(WarnUndefinedValueForVisualDesigner);
disableMessage(WarnStatesOnlyInRootItemForVisualDesigner);
disableMessage(ErrUnsupportedRootTypeInVisualDesigner);
disableMessage(ErrInvalidIdeInVisualDesigner);
}
void Check::enableQmlDesignerUiFileChecks()
{
enableMessage(ErrUnsupportedRootTypeInQmlUi);