aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMoody Liu <mooodyhunter@outlook.com>2022-05-25 18:41:28 +0100
committerMoody Liu <mooodyhunter@outlook.com>2022-05-26 11:57:35 +0100
commitf65fac151469570ff5b751a46ab0c175e3f670fb (patch)
tree0d851dc237de4094b4cc5dc5790657c4aa24b5e8
parent83f18c3191fd27ea66e0d4e9ade50e94ae8da091 (diff)
qmlls: use CompletionItemKind::Class for QML types
Change-Id: Ia121463cf4352bedc03475268f38ce32c0073d50 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
-rw-r--r--tests/auto/qmlls/completions/tst_qmllscompletions.cpp14
-rw-r--r--tools/qmlls/qmlcompletionsupport.cpp33
2 files changed, 26 insertions, 21 deletions
diff --git a/tests/auto/qmlls/completions/tst_qmllscompletions.cpp b/tests/auto/qmlls/completions/tst_qmllscompletions.cpp
index bfb475f625..0cb7e08aa8 100644
--- a/tests/auto/qmlls/completions/tst_qmllscompletions.cpp
+++ b/tests/auto/qmlls/completions/tst_qmllscompletions.cpp
@@ -144,7 +144,7 @@ void tst_QmllsCompletions::completions_data()
QTest::newRow("objEmptyLine") << uri << 7 << 0
<< ExpectedCompletions({
- { u"Rectangle"_s, CompletionItemKind::Field },
+ { u"Rectangle"_s, CompletionItemKind::Class },
{ u"property"_s, CompletionItemKind::Keyword },
{ u"width"_s, CompletionItemKind::Property },
{ u"function"_s, CompletionItemKind::Keyword },
@@ -153,7 +153,7 @@ void tst_QmllsCompletions::completions_data()
QTest::newRow("inBindingLabel") << uri << 4 << 9
<< ExpectedCompletions({
- { u"Rectangle"_s, CompletionItemKind::Field },
+ { u"Rectangle"_s, CompletionItemKind::Class },
{ u"property"_s, CompletionItemKind::Keyword },
{ u"width"_s, CompletionItemKind::Property },
})
@@ -177,14 +177,14 @@ void tst_QmllsCompletions::completions_data()
QTest::newRow("fileStart") << uri << 0 << 0
<< ExpectedCompletions({
- { u"Rectangle"_s, CompletionItemKind::Field },
+ { u"Rectangle"_s, CompletionItemKind::Class },
{ u"import"_s, CompletionItemKind::Keyword },
})
<< QStringList({ u"QtQuick"_s, u"vector4d"_s, u"width"_s });
QTest::newRow("importImport") << uri << 0 << 3
<< ExpectedCompletions({
- { u"Rectangle"_s, CompletionItemKind::Field },
+ { u"Rectangle"_s, CompletionItemKind::Class },
{ u"import"_s, CompletionItemKind::Keyword },
})
<< QStringList({ u"QtQuick"_s, u"vector4d"_s, u"width"_s });
@@ -329,7 +329,7 @@ void tst_QmllsCompletions::buildDir()
ExpectedCompletions({
{ u"property"_s, CompletionItemKind::Keyword },
{ u"function"_s, CompletionItemKind::Keyword },
- { u"Rectangle"_s, CompletionItemKind::Field },
+ { u"Rectangle"_s, CompletionItemKind::Class },
}),
QStringList({ u"BuildDirType"_s, u"QtQuick"_s, u"width"_s, u"vector4d"_s }));
Notifications::AddBuildDirsParams bDirs;
@@ -349,8 +349,8 @@ void tst_QmllsCompletions::buildDir()
m_protocol.notifyDidChangeTextDocument(didChange);
checkCompletions(uri, 3, 0,
ExpectedCompletions({
- { u"BuildDirType"_s, CompletionItemKind::Field },
- { u"Rectangle"_s, CompletionItemKind::Field },
+ { u"BuildDirType"_s, CompletionItemKind::Class },
+ { u"Rectangle"_s, CompletionItemKind::Class },
{ u"property"_s, CompletionItemKind::Keyword },
{ u"width"_s, CompletionItemKind::Property },
{ u"function"_s, CompletionItemKind::Keyword },
diff --git a/tools/qmlls/qmlcompletionsupport.cpp b/tools/qmlls/qmlcompletionsupport.cpp
index 18933684fa..51d9fab776 100644
--- a/tools/qmlls/qmlcompletionsupport.cpp
+++ b/tools/qmlls/qmlcompletionsupport.cpp
@@ -457,7 +457,7 @@ static QList<CompletionItem> reachableSymbols(DomItem &context, const Completion
{
// returns completions for the reachable types or attributes from context
QList<CompletionItem> res;
- QSet<QString> symbols;
+ QMap<CompletionItemKind, QSet<QString>> symbols;
QSet<quintptr> visited;
QList<Path> visitedRefs;
auto addLocalSymbols = [&res, typeCompletionType, completeMethodCalls, &symbols](DomItem &el) {
@@ -466,19 +466,20 @@ static QList<CompletionItem> reachableSymbols(DomItem &context, const Completion
return false;
case TypeCompletionsType::Types:
switch (el.internalKind()) {
- case DomType::ImportScope:
+ case DomType::ImportScope: {
+ const QSet<QString> localSymbols = el.localSymbolNames(
+ LocalSymbolsType::QmlTypes | LocalSymbolsType::Namespaces);
qCDebug(complLog) << "adding local symbols of:" << el.internalKindStr()
- << el.canonicalPath()
- << el.localSymbolNames(LocalSymbolsType::QmlTypes
- | LocalSymbolsType::Namespaces);
- symbols += el.localSymbolNames(LocalSymbolsType::QmlTypes
- | LocalSymbolsType::Namespaces);
+ << el.canonicalPath() << localSymbols;
+ symbols[CompletionItemKind::Class] += localSymbols;
break;
- default:
+ }
+ default: {
qCDebug(complLog) << "skipping local symbols for non type" << el.internalKindStr()
<< el.canonicalPath();
break;
}
+ }
break;
case TypeCompletionsType::TypesAndAttributes:
auto localSymbols = el.localSymbolNames(LocalSymbolsType::All);
@@ -518,7 +519,7 @@ static QList<CompletionItem> reachableSymbols(DomItem &context, const Completion
}
qCDebug(complLog) << "adding local symbols of:" << el.internalKindStr()
<< el.canonicalPath() << localSymbols;
- symbols += localSymbols;
+ symbols[CompletionItemKind::Field] += localSymbols;
break;
}
return true;
@@ -546,11 +547,15 @@ static QList<CompletionItem> reachableSymbols(DomItem &context, const Completion
context.resolve(toSearch, addReachableSymbols, &defaultErrorHandler);
// add attached types? technically we should...
}
- for (const QString &s : qAsConst(symbols)) {
- CompletionItem comp;
- comp.label = s.toUtf8();
- comp.kind = int(CompletionItemKind::Field);
- res.append(comp);
+ for (auto symbolKinds = symbols.constBegin(); symbolKinds != symbols.constEnd();
+ ++symbolKinds) {
+ for (auto symbol = symbolKinds.value().constBegin();
+ symbol != symbolKinds.value().constEnd(); ++symbol) {
+ CompletionItem comp;
+ comp.label = symbol->toUtf8();
+ comp.kind = int(symbolKinds.key());
+ res.append(comp);
+ }
}
return res;
}