diff options
author | Olivier De Cannière <[email protected]> | 2025-03-04 17:50:34 +0100 |
---|---|---|
committer | Olivier De Cannière <[email protected]> | 2025-03-06 19:23:04 +0100 |
commit | d2c791c3435863087f3b47e4f1c78558b8750cdb (patch) | |
tree | 6964965ce386a23f4f5efa671d9996788621b4aa | |
parent | 2cc30828af4ffe6d9cc0c6c91d3b665366a03f81 (diff) |
semantichighlighting: Add support for final property attribute
Change-Id: I0ffa565fcefb2f44b180395d58120f52463aa950
Reviewed-by: Semih Yavuz <[email protected]>
Reviewed-by: Sami Shalayel <[email protected]>
-rw-r--r-- | src/qmldom/qqmldomastcreator.cpp | 5 | ||||
-rw-r--r-- | src/qmlls/qqmlsemantictokens.cpp | 7 | ||||
-rw-r--r-- | src/qmlls/qqmlsemantictokens_p.h | 5 | ||||
-rw-r--r-- | tests/auto/qmlls/utils/data/highlights/properties.qml | 1 | ||||
-rw-r--r-- | tests/auto/qmlls/utils/tst_qmlls_highlighting.cpp | 10 |
5 files changed, 26 insertions, 2 deletions
diff --git a/src/qmldom/qqmldomastcreator.cpp b/src/qmldom/qqmldomastcreator.cpp index 76dee8191a..3fec3d0211 100644 --- a/src/qmldom/qqmldomastcreator.cpp +++ b/src/qmldom/qqmldomastcreator.cpp @@ -525,6 +525,7 @@ bool QQmlDomAstCreator::visit(AST::UiPublicMember *el) p.isReadonly = el->isReadonly(); p.isDefaultMember = el->isDefaultMember(); p.isRequired = el->isRequired(); + p.isFinal = el->isFinal(); p.isList = el->typeModifier == QLatin1String("list"); p.isFinal = el->isFinal(); if (!el->typeModifier.isEmpty()) @@ -562,6 +563,10 @@ bool QQmlDomAstCreator::visit(AST::UiPublicMember *el) FileLocations::addRegion(nodeStack.last().fileLocations, DefaultKeywordRegion, el->defaultToken()); } + if (p.isFinal) { + FileLocations::addRegion(nodeStack.last().fileLocations, FinalKeywordRegion, + el->finalToken()); + } if (p.isRequired) { FileLocations::addRegion(nodeStack.last().fileLocations, RequiredKeywordRegion, el->requiredToken()); diff --git a/src/qmlls/qqmlsemantictokens.cpp b/src/qmlls/qqmlsemantictokens.cpp index 8cedb76bb9..2e8ece2096 100644 --- a/src/qmlls/qqmlsemantictokens.cpp +++ b/src/qmlls/qqmlsemantictokens.cpp @@ -193,6 +193,9 @@ static int fromQmlModifierKindToLspTokenType(QmlHighlightModifiers highlightModi if (highlightModifier.testFlag(QmlHighlightModifier::QmlDefaultProperty)) addModifier(SemanticTokenModifiers::DefaultLibrary, &modifier); + if (highlightModifier.testFlag(QmlHighlightModifier::QmlFinalProperty)) + addModifier(SemanticTokenModifiers::Static, &modifier); + if (highlightModifier.testFlag(QmlHighlightModifier::QmlRequiredProperty)) addModifier(SemanticTokenModifiers::Abstract, &modifier); @@ -424,6 +427,10 @@ void HighlightingVisitor::highlightPropertyDefinition(const DomItem &item) modifier |= QmlHighlightModifier::QmlDefaultProperty; m_highlights.addHighlight(regions[DefaultKeywordRegion], QmlHighlightKind::QmlKeyword); } + if (propertyDef->isFinal) { + modifier |= QmlHighlightModifier::QmlFinalProperty; + m_highlights.addHighlight(regions[FinalKeywordRegion], QmlHighlightKind::QmlKeyword); + } if (propertyDef->isRequired) { modifier |= QmlHighlightModifier::QmlRequiredProperty; m_highlights.addHighlight(regions[RequiredKeywordRegion], QmlHighlightKind::QmlKeyword); diff --git a/src/qmlls/qqmlsemantictokens_p.h b/src/qmlls/qqmlsemantictokens_p.h index 5f5e5e8e0c..b5f82fad84 100644 --- a/src/qmlls/qqmlsemantictokens_p.h +++ b/src/qmlls/qqmlsemantictokens_p.h @@ -67,8 +67,9 @@ enum class QmlHighlightModifier { None = 0, QmlPropertyDefinition = 1 << 0, QmlDefaultProperty = 1 << 1, - QmlRequiredProperty = 1 << 2, - QmlReadonlyProperty = 1 << 3, + QmlFinalProperty = 1 << 2, + QmlRequiredProperty = 1 << 3, + QmlReadonlyProperty = 1 << 4, }; Q_DECLARE_FLAGS(QmlHighlightModifiers, QmlHighlightModifier) Q_DECLARE_OPERATORS_FOR_FLAGS(QmlHighlightModifiers) diff --git a/tests/auto/qmlls/utils/data/highlights/properties.qml b/tests/auto/qmlls/utils/data/highlights/properties.qml index bde60915ca..4f8d69097f 100644 --- a/tests/auto/qmlls/utils/data/highlights/properties.qml +++ b/tests/auto/qmlls/utils/data/highlights/properties.qml @@ -9,5 +9,6 @@ Item { readonly property int kk required property int kkk default property int kkkk + final property int kkkkk } } diff --git a/tests/auto/qmlls/utils/tst_qmlls_highlighting.cpp b/tests/auto/qmlls/utils/tst_qmlls_highlighting.cpp index 420449dde7..c376af4a96 100644 --- a/tests/auto/qmlls/utils/tst_qmlls_highlighting.cpp +++ b/tests/auto/qmlls/utils/tst_qmlls_highlighting.cpp @@ -370,6 +370,16 @@ void tst_qmlls_highlighting::highlights_data() << fileItem << Token(QQmlJS::SourceLocation(265, 4, 11, 30), int(SemanticTokenProtocolTypes::Property), defaultModifier); + int finalModifier = + definitionModifier | (1 << int(SemanticTokenModifiers::Static)); + QTest::addRow("final-keyword") + << fileItem + << Token(QQmlJS::SourceLocation(278, 5, 12, 9), + int(SemanticTokenProtocolTypes::Keyword), 0); + QTest::addRow("final-modifier") + << fileItem + << Token(QQmlJS::SourceLocation(297, 5, 12, 28), + int(SemanticTokenProtocolTypes::Property), finalModifier); } { // methods and signals, lambda functions |