diff options
| author | Maximilian Goldstein <max.goldstein@qt.io> | 2022-04-27 15:04:46 +0200 |
|---|---|---|
| committer | Maximilian Goldstein <max.goldstein@qt.io> | 2022-04-28 15:39:52 +0200 |
| commit | 4b330fa07b01b4ad8051a97af7c04d9a9a574b95 (patch) | |
| tree | 5df6a6a1eab363a2efe1a2155ed9772460b97b03 /src | |
| parent | 12d5d7d30613dd09cbdf4fba2decf282d3d8db39 (diff) | |
qqmljsscope: Add static prettyName() function
Implements QQmlJSScope::prettyName() which will strip off any internal
prefixes (such as $internal$ and $anonymous$) and also return some more
user recognizable type names (i.e. null instead of std::nullptr_t).
Change-Id: I085b51ea9fe6b348fb24efa93726c47b79846a8b
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src')
| -rw-r--r-- | src/qmlcompiler/qqmljsliteralbindingcheck.cpp | 5 | ||||
| -rw-r--r-- | src/qmlcompiler/qqmljsscope.cpp | 23 | ||||
| -rw-r--r-- | src/qmlcompiler/qqmljsscope_p.h | 3 | ||||
| -rw-r--r-- | src/qmlcompiler/qqmljstypepropagator.cpp | 8 | ||||
| -rw-r--r-- | src/qmlcompiler/qqmljstyperesolver.cpp | 10 | ||||
| -rw-r--r-- | src/qmlcompiler/qqmljstyperesolver_p.h | 3 |
6 files changed, 43 insertions, 9 deletions
diff --git a/src/qmlcompiler/qqmljsliteralbindingcheck.cpp b/src/qmlcompiler/qqmljsliteralbindingcheck.cpp index 2518cd2d19..ec0c3380ec 100644 --- a/src/qmlcompiler/qqmljsliteralbindingcheck.cpp +++ b/src/qmlcompiler/qqmljsliteralbindingcheck.cpp @@ -58,8 +58,9 @@ void QQmlJSLiteralBindingCheck::run(QQmlJSImportVisitor *visitor, QQmlJSTypeReso } if (!resolver->canConvertFromTo(binding.literalType(resolver), property.type())) { - logger->log(u"Cannot assign binding of type %1 to %2"_qs - .arg(binding.literalTypeName(), property.typeName()), + logger->log(u"Cannot assign binding of type %1 to %2"_qs.arg( + QQmlJSScope::prettyName(binding.literalTypeName()), + QQmlJSScope::prettyName(property.typeName())), Log_Type, binding.sourceLocation()); continue; } diff --git a/src/qmlcompiler/qqmljsscope.cpp b/src/qmlcompiler/qqmljsscope.cpp index 5b23b247b3..ded18e8163 100644 --- a/src/qmlcompiler/qqmljsscope.cpp +++ b/src/qmlcompiler/qqmljsscope.cpp @@ -40,6 +40,8 @@ QT_BEGIN_NAMESPACE +using namespace Qt::StringLiterals; + /*! \internal Utility method that returns proper value according to the type To. This @@ -246,6 +248,27 @@ QHash<QString, QQmlJSMetaEnum> QQmlJSScope::enumerations() const return results; } +QString QQmlJSScope::prettyName(QAnyStringView name) +{ + const auto internal = "$internal$."_L1; + const QString anonymous = "$anonymous$."_L1; + + QString pretty = name.toString(); + + if (pretty.startsWith(internal)) + pretty = pretty.mid(internal.size()); + else if (pretty.startsWith(anonymous)) + pretty = pretty.mid(anonymous.size()); + + if (pretty == u"std::nullptr_t") + return u"null"_s; + + if (pretty == u"void") + return u"undefined"_s; + + return pretty; +} + /*! Returns if assigning \a assignedType to \a property would require an implicit component wrapping. diff --git a/src/qmlcompiler/qqmljsscope_p.h b/src/qmlcompiler/qqmljsscope_p.h index 09cdb53cdc..4609b18fb6 100644 --- a/src/qmlcompiler/qqmljsscope_p.h +++ b/src/qmlcompiler/qqmljsscope_p.h @@ -306,6 +306,9 @@ public: return m_internalName + suffix; } + // This returns a more user readable version of internalName / baseTypeName + static QString prettyName(QAnyStringView name); + static bool causesImplicitComponentWrapping(const QQmlJSMetaProperty &property, const QQmlJSScope::ConstPtr &assignedType); bool isComponentRootElement() const; diff --git a/src/qmlcompiler/qqmljstypepropagator.cpp b/src/qmlcompiler/qqmljstypepropagator.cpp index 2492b52c3c..86bed50390 100644 --- a/src/qmlcompiler/qqmljstypepropagator.cpp +++ b/src/qmlcompiler/qqmljstypepropagator.cpp @@ -105,8 +105,8 @@ void QQmlJSTypePropagator::generate_Ret() m_returnType.descriptiveName())); m_logger->log(u"Cannot assign binding of type %1 to %2"_qs.arg( - m_typeResolver->containedTypeName(m_state.accumulatorIn()), - m_typeResolver->containedTypeName(m_returnType)), + m_typeResolver->containedTypeName(m_state.accumulatorIn(), true), + m_typeResolver->containedTypeName(m_returnType, true)), Log_Type, getCurrentBindingSourceLocation()); return; } @@ -734,7 +734,7 @@ void QQmlJSTypePropagator::propagatePropertyLookup(const QString &propertyName) if (isRestrictedProperty) return; - const QString typeName = m_typeResolver->containedTypeName(m_state.accumulatorIn()); + const QString typeName = m_typeResolver->containedTypeName(m_state.accumulatorIn(), true); if (typeName == u"QVariant") return; @@ -973,7 +973,7 @@ void QQmlJSTypePropagator::generate_CallProperty(int nameIndex, int base, int ar } m_logger->log(u"Property \"%1\" not found on type \"%2\""_qs.arg( - propertyName, m_typeResolver->containedTypeName(callBase)), + propertyName, m_typeResolver->containedTypeName(callBase, true)), Log_Type, getCurrentSourceLocation(), true, true, fixSuggestion); return; } diff --git a/src/qmlcompiler/qqmljstyperesolver.cpp b/src/qmlcompiler/qqmljstyperesolver.cpp index ed425ccfc6..ab9d5f81e1 100644 --- a/src/qmlcompiler/qqmljstyperesolver.cpp +++ b/src/qmlcompiler/qqmljstyperesolver.cpp @@ -481,7 +481,8 @@ void QQmlJSTypeResolver::generalizeType(const QQmlJSScope::ConstPtr &type) const it->original = genericType(it->original); } -QString QQmlJSTypeResolver::containedTypeName(const QQmlJSRegisterContent &container) const +QString QQmlJSTypeResolver::containedTypeName(const QQmlJSRegisterContent &container, + bool useFancyName) const { QQmlJSScope::ConstPtr type; @@ -496,7 +497,12 @@ QString QQmlJSTypeResolver::containedTypeName(const QQmlJSRegisterContent &conta break; } - return type->internalName().isEmpty() ? type->baseTypeName() : type->internalName(); + QString typeName = type->internalName().isEmpty() ? type->baseTypeName() : type->internalName(); + + if (useFancyName) + return QQmlJSScope::prettyName(typeName); + + return typeName; } bool QQmlJSTypeResolver::canConvertFromTo(const QQmlJSScope::ConstPtr &from, diff --git a/src/qmlcompiler/qqmljstyperesolver_p.h b/src/qmlcompiler/qqmljstyperesolver_p.h index a4a1a88f35..165705e50a 100644 --- a/src/qmlcompiler/qqmljstyperesolver_p.h +++ b/src/qmlcompiler/qqmljstyperesolver_p.h @@ -130,7 +130,8 @@ public: bool registerContains(const QQmlJSRegisterContent ®, const QQmlJSScope::ConstPtr &type) const; QQmlJSScope::ConstPtr containedType(const QQmlJSRegisterContent &container) const; - QString containedTypeName(const QQmlJSRegisterContent &container) const; + QString containedTypeName(const QQmlJSRegisterContent &container, + bool useFancyName = false) const; QQmlJSRegisterContent tracked(const QQmlJSRegisterContent &type) const; QQmlJSRegisterContent original(const QQmlJSRegisterContent &type) const; |
