QmlJSCheck: Add error for ambiguous ids

Certain ids can be ambiguous and have name clashes with properties.
Those ids are not supported in the designer.

Change-Id: Ida293d24611c467df6ef813a541e8abfc06b51cb
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Thomas Hartmann
2016-10-26 14:15:02 +02:00
committed by Tim Jenssen
parent de6021c71a
commit 99aaf86a33
3 changed files with 46 additions and 0 deletions

View File

@@ -489,6 +489,42 @@ private:
bool _seenNonDeclarationStatement; bool _seenNonDeclarationStatement;
}; };
class IdsThatShouldNotBeUsedInDesigner : public QStringList
{
public:
IdsThatShouldNotBeUsedInDesigner() : QStringList({ "top",
"bottom",
"left",
"right",
"width",
"height",
"x",
"y",
"opacity",
"parent",
"item",
"flow",
"color",
"margin",
"padding",
"border",
"font",
"text",
"source",
"state",
"visible",
"focus",
"data",
"clip",
"layer",
"scale",
"enabled",
"anchors"})
{
}
};
class VisualAspectsPropertyBlackList : public QStringList class VisualAspectsPropertyBlackList : public QStringList
{ {
public: public:
@@ -563,6 +599,7 @@ public:
} // end of anonymous namespace } // end of anonymous namespace
Q_GLOBAL_STATIC(IdsThatShouldNotBeUsedInDesigner, idsThatShouldNotBeUsedInDesigner)
Q_GLOBAL_STATIC(VisualAspectsPropertyBlackList, visualAspectsPropertyBlackList) Q_GLOBAL_STATIC(VisualAspectsPropertyBlackList, visualAspectsPropertyBlackList)
Q_GLOBAL_STATIC(UnsupportedTypesByVisualDesigner, unsupportedTypesByVisualDesigner) Q_GLOBAL_STATIC(UnsupportedTypesByVisualDesigner, unsupportedTypesByVisualDesigner)
Q_GLOBAL_STATIC(UnsupportedRootObjectTypesByVisualDesigner, unsupportedRootObjectTypesByVisualDesigner) Q_GLOBAL_STATIC(UnsupportedRootObjectTypesByVisualDesigner, unsupportedRootObjectTypesByVisualDesigner)
@@ -634,6 +671,7 @@ void Check::enableQmlDesignerChecks()
enableMessage(WarnReferenceToParentItemNotSupportedByVisualDesigner); enableMessage(WarnReferenceToParentItemNotSupportedByVisualDesigner);
enableMessage(WarnAboutQtQuick1InsteadQtQuick2); enableMessage(WarnAboutQtQuick1InsteadQtQuick2);
enableMessage(ErrUnsupportedRootTypeInVisualDesigner); enableMessage(ErrUnsupportedRootTypeInVisualDesigner);
enableMessage(ErrInvalidIdeInVisualDesigner);
//## triggers too often ## check.enableMessage(StaticAnalysis::WarnUndefinedValueForVisualDesigner); //## triggers too often ## check.enableMessage(StaticAnalysis::WarnUndefinedValueForVisualDesigner);
} }
@@ -645,6 +683,7 @@ void Check::disableQmlDesignerChecks()
disableMessage(WarnUndefinedValueForVisualDesigner); disableMessage(WarnUndefinedValueForVisualDesigner);
disableMessage(WarnStatesOnlyInRootItemForVisualDesigner); disableMessage(WarnStatesOnlyInRootItemForVisualDesigner);
disableMessage(ErrUnsupportedRootTypeInVisualDesigner); disableMessage(ErrUnsupportedRootTypeInVisualDesigner);
disableMessage(ErrInvalidIdeInVisualDesigner);
} }
void Check::enableQmlDesignerUiFileChecks() void Check::enableQmlDesignerUiFileChecks()
@@ -927,6 +966,10 @@ bool Check::visit(UiScriptBinding *ast)
return false; return false;
} }
if (idsThatShouldNotBeUsedInDesigner->contains(id)) {
addMessage(ErrInvalidIdeInVisualDesigner, loc);
}
if (m_idStack.top().contains(id)) { if (m_idStack.top().contains(id)) {
addMessage(ErrDuplicateId, loc); addMessage(ErrDuplicateId, loc);
return false; return false;

View File

@@ -220,6 +220,8 @@ StaticAnalysisMessages::StaticAnalysisMessages()
"and might not show up in Qt Quick Designer as expected.")); "and might not show up in Qt Quick Designer as expected."));
newMsg(WarnStatesOnlyInRootItemForVisualDesigner, Warning, newMsg(WarnStatesOnlyInRootItemForVisualDesigner, Warning,
tr("Qt Quick Designer only supports states in the root item.")); tr("Qt Quick Designer only supports states in the root item."));
newMsg(ErrInvalidIdeInVisualDesigner, Error,
tr("This id might be ambiguous and is not supported in the Qt Quick Designer"));
newMsg(WarnAboutQtQuick1InsteadQtQuick2, Warning, newMsg(WarnAboutQtQuick1InsteadQtQuick2, Warning,
tr("Using Qt Quick 1 code model instead of Qt Quick 2.")); tr("Using Qt Quick 1 code model instead of Qt Quick 2."));
newMsg(ErrUnsupportedRootTypeInVisualDesigner, Error, newMsg(ErrUnsupportedRootTypeInVisualDesigner, Error,

View File

@@ -97,6 +97,7 @@ enum Type
WarnUndefinedValueForVisualDesigner = 206, WarnUndefinedValueForVisualDesigner = 206,
WarnStatesOnlyInRootItemForVisualDesigner = 207, WarnStatesOnlyInRootItemForVisualDesigner = 207,
ErrUnsupportedRootTypeInVisualDesigner = 208, ErrUnsupportedRootTypeInVisualDesigner = 208,
ErrInvalidIdeInVisualDesigner = 209,
ErrUnsupportedRootTypeInQmlUi = 220, ErrUnsupportedRootTypeInQmlUi = 220,
ErrUnsupportedTypeInQmlUi = 221, ErrUnsupportedTypeInQmlUi = 221,
ErrFunctionsNotSupportedInQmlUi = 222, ErrFunctionsNotSupportedInQmlUi = 222,