diff options
author | Thomas Hartmann <thomas.hartmann@qt.io> | 2019-01-16 12:08:20 +0100 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2019-01-16 13:50:57 +0000 |
commit | 66dc5e971399fbd7bf696344698b5bd3fb05b819 (patch) | |
tree | 02f17fd763e47a9765182eab59a223e62ffb42da /src | |
parent | fdd8650657136d0400ead529491ede38bc0df9a3 (diff) | |
download | qt-creator-66dc5e971399fbd7bf696344698b5bd3fb05b819.tar.gz |
QmlDesigner: Allow more JavaScript functions
Task-number: QDS-355
Change-Id: I0f330216b0120857f21b804236d2e3338c812749
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/qmljs/qmljscheck.cpp | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp index e4ff7047eb..b96b8b7d96 100644 --- a/src/libs/qmljs/qmljscheck.cpp +++ b/src/libs/qmljs/qmljscheck.cpp @@ -1626,28 +1626,32 @@ bool Check::visit(CallExpression *ast) // We have to allow the translation functions - const QStringList translationFunctions = {"qsTr", "qsTrId", "qsTranslate", - "qsTrNoOp", "qsTrIdNoOp", "qsTranslateNoOp"}; + static const QStringList translationFunctions = {"qsTr", "qsTrId", "qsTranslate", + "qsTrNoOp", "qsTrIdNoOp", "qsTranslateNoOp"}; - const bool isTranslationFunction = translationFunctions.contains(name); + static const QStringList whiteListedFunctions = {"toString", "toFixed", "toExponential", "toPrecision", "isFinite", "isNaN", "valueOf", + "toLowerCase", "toLocaleString", "toLocaleLowerCase", "toUpperCase", "toLocaleUpperCase", + "substring" , "charAt", "charCodeAt", "concat", "endsWith", "includes", "indexOf", "lastIndexOf"}; + + static const QStringList colorFunctions = {"lighter", "darker", "rgba", "tint", "hsla", "hsva"}; + + static const QStringList qtFunction = {"point", "rect", "size", "vector2d", "vector3d", "vector4d", "quaternion" "matrix4x4", "formatDate", + "formatDateTime", "formatTime"}; + + const bool whiteListedFunction = translationFunctions.contains(name) || whiteListedFunctions.contains(name) || colorFunctions.contains(name) || qtFunction.contains(name); // We allow the Math. functions const bool isMathFunction = namespaceName == "Math"; + const bool isDateFunction = namespaceName == "Date"; // allow adding connections with the help of the qt quick designer ui bool isDirectInConnectionsScope = (!m_typeStack.isEmpty() && m_typeStack.last() == QLatin1String("Connections")); - if (!isTranslationFunction && !isMathFunction && !isDirectInConnectionsScope) + if (!whiteListedFunction && !isMathFunction && !isDirectInConnectionsScope) addMessage(ErrFunctionsNotSupportedInQmlUi, location); - if (!name.isEmpty() && name.at(0).isUpper() - && name != QLatin1String("String") - && name != QLatin1String("Boolean") - && name != QLatin1String("Date") - && name != QLatin1String("Number") - && name != QLatin1String("Object") - && name != QLatin1String("QT_TR_NOOP") - && name != QLatin1String("QT_TRANSLATE_NOOP") - && name != QLatin1String("QT_TRID_NOOP")) { + static const QStringList globalFunctions = {"String", "Boolean", "Date", "Number", "Object", "QT_TR_NOOP", "QT_TRANSLATE_NOOP", "QT_TRID_NOOP"}; + + if (!name.isEmpty() && name.at(0).isUpper() && !globalFunctions.contains(name)) { addMessage(WarnExpectedNewWithUppercaseFunction, location); } if (cast<IdentifierExpression *>(ast->base) && name == QLatin1String("eval")) |