diff options
-rw-r--r-- | src/qmlls/qqmllscompletion.cpp | 18 | ||||
-rw-r--r-- | tests/auto/qmlls/utils/tst_qmlls_utils.cpp | 16 |
2 files changed, 25 insertions, 9 deletions
diff --git a/src/qmlls/qqmllscompletion.cpp b/src/qmlls/qqmllscompletion.cpp index ee21a7bcd4..444a9a83b8 100644 --- a/src/qmlls/qqmllscompletion.cpp +++ b/src/qmlls/qqmllscompletion.cpp @@ -760,10 +760,12 @@ void QQmlLSCompletion::insideQmlObjectCompletion(const DomItem &parentForContext } if (betweenLocations(leftBrace, positionInfo, rightBrace)) { - // default/required property completion - for (QUtf8StringView view : - std::array<QUtf8StringView, 6>{ "", "readonly ", "default ", "default required ", - "required default ", "required " }) { + // default/final/required/readonly property completion + constexpr static std::array completions { + ""_L1, "default "_L1, "final "_L1, "required "_L1, "readonly "_L1, "default final "_L1, + "default required "_L1, "final required "_L1, "final readonly "_L1, + "default final required "_L1 }; + for (QLatin1StringView view : completions) { // readonly properties require an initializer if (view != QUtf8StringView("readonly ")) { result = makeSnippet( @@ -819,10 +821,12 @@ void QQmlLSCompletion::insidePropertyDefinitionCompletion( const QQmlJS::SourceLocation readonlyKeyword = info.regions[ReadonlyKeywordRegion]; const QQmlJS::SourceLocation defaultKeyword = info.regions[DefaultKeywordRegion]; const QQmlJS::SourceLocation requiredKeyword = info.regions[RequiredKeywordRegion]; + const QQmlJS::SourceLocation finalKeyword = info.regions[FinalKeywordRegion]; bool completeReadonly = true; bool completeRequired = true; bool completeDefault = true; + bool completeFinal = true; // if there is already a readonly keyword before the cursor: do not auto complete it again if (readonlyKeyword.isValid() && readonlyKeyword.begin() < positionInfo.offset()) { @@ -842,6 +846,11 @@ void QQmlLSCompletion::insidePropertyDefinitionCompletion( if (defaultKeyword.isValid() && defaultKeyword.begin() < positionInfo.offset()) { completeDefault = false; } + + // same for final + if (finalKeyword.isValid() && finalKeyword.begin() < positionInfo.offset()) + completeFinal = false; + auto addCompletionKeyword = [&result](QUtf8StringView view, bool complete) { if (!complete) return; @@ -853,6 +862,7 @@ void QQmlLSCompletion::insidePropertyDefinitionCompletion( addCompletionKeyword(u8"readonly", completeReadonly); addCompletionKeyword(u8"required", completeRequired); addCompletionKeyword(u8"default", completeDefault); + addCompletionKeyword(u8"final", completeFinal); addCompletionKeyword(u8"property", true); return; diff --git a/tests/auto/qmlls/utils/tst_qmlls_utils.cpp b/tests/auto/qmlls/utils/tst_qmlls_utils.cpp index 0f2b97a35a..09a7c8840f 100644 --- a/tests/auto/qmlls/utils/tst_qmlls_utils.cpp +++ b/tests/auto/qmlls/utils/tst_qmlls_utils.cpp @@ -2551,9 +2551,6 @@ void tst_qmlls_utils::completions_data() { u"default required property type name: value;"_s, CompletionItemKind::Snippet, u"default required property ${1:type} ${2:name}: ${0:value};"_s }, - { u"required default property type name: value;"_s, - CompletionItemKind::Snippet, - u"required default property ${1:type} ${2:name}: ${0:value};"_s }, { u"required property type name: value;"_s, CompletionItemKind::Snippet, u"required property ${1:type} ${2:name}: ${0:value};"_s }, { u"property type name;"_s, CompletionItemKind::Snippet, @@ -2564,8 +2561,17 @@ void tst_qmlls_utils::completions_data() u"default property ${1:type} ${0:name};"_s }, { u"default required property type name;"_s, CompletionItemKind::Snippet, u"default required property ${1:type} ${0:name};"_s }, - { u"required default property type name;"_s, CompletionItemKind::Snippet, - u"required default property ${1:type} ${0:name};"_s }, + { u"final property type name;"_s, CompletionItemKind::Snippet, + u"final property ${1:type} ${0:name};"_s }, + { u"default final property type name;"_s, CompletionItemKind::Snippet, + u"default final property ${1:type} ${0:name};"_s }, + { u"final required property type name;"_s, CompletionItemKind::Snippet, + u"final required property ${1:type} ${0:name};"_s }, + { u"final readonly property type name;"_s, CompletionItemKind::Snippet, + u"final readonly property ${1:type} ${0:name};"_s }, + { u"default final required property type name;"_s, + CompletionItemKind::Snippet, + u"default final required property ${1:type} ${0:name};"_s }, { u"signal name(arg1:type1, ...)"_s, CompletionItemKind::Snippet, u"signal ${1:name}($0)"_s }, { u"signal name;"_s, CompletionItemKind::Snippet, u"signal ${0:name};"_s }, |