aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qmlls/qqmllscompletion.cpp18
-rw-r--r--tests/auto/qmlls/utils/tst_qmlls_utils.cpp16
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 },