diff options
author | Semih Yavuz <[email protected]> | 2025-06-27 13:16:24 +0200 |
---|---|---|
committer | Semih Yavuz <[email protected]> | 2025-07-03 01:23:24 +0200 |
commit | 9eea6171131072fb1b28c677c8bdfa19217c031c (patch) | |
tree | 1f8aeb5f8c6fb59c65516925ba645576b7c3b5c3 /src | |
parent | c8521e32e925dd003207a1b78cce9b48f68261a7 (diff) |
If components are unbound, highlight id's of parent component as
QmlExternalId.
Pick-to: 6.8 6.9 6.10
Task-number: QTBUG-137116
Change-Id: Ibd95d927c4871d8ac3575b602b8a4973ecb699bc
Reviewed-by: Ulf Hermann <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/qmlls/qqmlsemantictokens.cpp | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/src/qmlls/qqmlsemantictokens.cpp b/src/qmlls/qqmlsemantictokens.cpp index 96c166f57e..734b178d79 100644 --- a/src/qmlls/qqmlsemantictokens.cpp +++ b/src/qmlls/qqmlsemantictokens.cpp @@ -673,9 +673,35 @@ void HighlightingVisitor::highlightBySemanticAnalysis(const DomItem &item, QQmlJ case QQmlLSUtils::MethodIdentifier: m_highlights.addHighlight(loc, QmlHighlightKind::QmlMethod); return; - case QQmlLSUtils::QmlObjectIdIdentifier: - m_highlights.addHighlight(loc, QmlHighlightKind::QmlLocalId); - return; + case QQmlLSUtils::QmlObjectIdIdentifier: { + const auto qmlfile = item.fileObject().as<QmlFile>(); + if (!qmlfile) { + m_highlights.addHighlight(loc, QmlHighlightKind::Unknown); + return; + } + const auto resolver = qmlfile->typeResolver(); + if (!resolver) { + m_highlights.addHighlight(loc, QmlHighlightKind::Unknown); + return; + } + const auto objects = resolver->objectsById(); + if (expression->name.has_value()) { + const auto &name = expression->name.value(); + const auto boundName = + objects.id(expression->semanticScope, item.qmlObject().semanticScope()); + if (!boundName.isEmpty() && name == boundName) { + // If the name is the same as the bound name, then it is a local id. + m_highlights.addHighlight(loc, QmlHighlightKind::QmlLocalId); + return; + } else { + m_highlights.addHighlight(loc, QmlHighlightKind::QmlExternalId); + return; + } + } else { + m_highlights.addHighlight(loc, QmlHighlightKind::QmlExternalId); + return; + } + } case QQmlLSUtils::SingletonIdentifier: m_highlights.addHighlight(loc, QmlHighlightKind::QmlType); return; |