Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qqmllscompletion_p.h
Go to the documentation of this file.
1// Copyright (C) 2024 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QQMLLSCOMPLETION_H
5#define QQMLLSCOMPLETION_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
19#include "qqmllsutils_p.h"
20#include "qqmllsplugin_p.h"
21
22#include <QtLanguageServer/private/qlanguageserverspectypes_p.h>
23#include <QtQmlDom/private/qqmldomexternalitems_p.h>
24#include <QtQmlDom/private/qqmldomtop_p.h>
25#include <QtCore/private/qduplicatetracker_p.h>
26#include <QtCore/private/qfactoryloader_p.h>
27#include <QtCore/qpluginloader.h>
28#include <QtCore/qxpfunctional.h>
29
31
32Q_DECLARE_LOGGING_CATEGORY(QQmlLSCompletionLog)
33
35
37{
39public:
40 QQmlLSCompletion(const QFactoryLoader &pluginLoader);
41
42 using CompletionItem = QLspSpecification::CompletionItem;
43 using BackInsertIterator = std::back_insert_iterator<QList<CompletionItem>>;
44 QList<CompletionItem> completions(const DomItem &currentItem,
45 const CompletionContextStrings &ctx) const;
46
48 QUtf8StringView insertText);
49
51
52private:
53 struct QQmlLSCompletionPosition
54 {
55 DomItem itemAtPosition;
56 CompletionContextStrings cursorPosition;
57 qsizetype offset() const { return cursorPosition.offset(); }
58 };
59
60 void collectCompletions(const DomItem &currentItem, const CompletionContextStrings &ctx,
62
63 bool betweenLocations(QQmlJS::SourceLocation left, const QQmlLSCompletionPosition &positionInfo,
65 bool afterLocation(QQmlJS::SourceLocation left,
66 const QQmlLSCompletionPosition &positionInfo) const;
67 bool beforeLocation(const QQmlLSCompletionPosition &ctx, QQmlJS::SourceLocation right) const;
68 bool ctxBeforeStatement(const QQmlLSCompletionPosition &positionInfo,
69 const DomItem &parentForContext,
70 QQmlJS::Dom::FileLocationRegion firstRegion) const;
71 bool isCaseOrDefaultBeforeCtx(const DomItem &currentClause,
72 const QQmlLSCompletionPosition &positionInfo,
73 QQmlJS::Dom::FileLocationRegion keywordRegion) const;
74 DomItem previousCaseOfCaseBlock(const DomItem &parentForContext,
75 const QQmlLSCompletionPosition &positionInfo) const;
76
77 void idsCompletions(const DomItem &component, BackInsertIterator it) const;
78
79 void suggestReachableTypes(const DomItem &context,
80 QQmlJS::Dom::LocalSymbolsTypes typeCompletionType,
81 QLspSpecification::CompletionItemKind kind,
83
84 void suggestJSStatementCompletion(const DomItem &currentItem, BackInsertIterator it) const;
85 void suggestCaseAndDefaultStatementCompletion(BackInsertIterator it) const;
86 void suggestVariableDeclarationStatementCompletion(
88
89 void suggestJSExpressionCompletion(const DomItem &context, BackInsertIterator it) const;
90
91 void suggestBindingCompletion(const DomItem &itemAtPosition, BackInsertIterator it) const;
92
93 void insideImportCompletionHelper(const DomItem &file,
94 const QQmlLSCompletionPosition &positionInfo,
96
97 void jsIdentifierCompletion(const QQmlJSScope::ConstPtr &scope,
98 QDuplicateTracker<QString> *usedNames, BackInsertIterator it) const;
99
100 void methodCompletion(const QQmlJSScope::ConstPtr &scope, QDuplicateTracker<QString> *usedNames,
101 BackInsertIterator it) const;
102 void propertyCompletion(const QQmlJSScope::ConstPtr &scope,
103 QDuplicateTracker<QString> *usedNames, BackInsertIterator it) const;
104 void enumerationCompletion(const QQmlJSScope::ConstPtr &scope,
105 QDuplicateTracker<QString> *usedNames, BackInsertIterator it) const;
106 void enumerationValueCompletionHelper(const QStringList &enumeratorKeys,
107 BackInsertIterator it) const;
108
109 void enumerationValueCompletion(const QQmlJSScope::ConstPtr &scope,
110 const QString &enumeratorName, BackInsertIterator it) const;
111
112 static bool cursorInFrontOfItem(const DomItem &parentForContext,
113 const QQmlLSCompletionPosition &positionInfo);
114 static bool cursorAfterColon(const DomItem &currentItem,
115 const QQmlLSCompletionPosition &positionInfo);
116 void insidePragmaCompletion(QQmlJS::Dom::DomItem currentItem,
117 const QQmlLSCompletionPosition &positionInfo,
118 BackInsertIterator it) const;
119 void insideQmlObjectCompletion(const DomItem &parentForContext,
120 const QQmlLSCompletionPosition &positionInfo,
121 BackInsertIterator it) const;
122 void insidePropertyDefinitionCompletion(const DomItem &currentItem,
123 const QQmlLSCompletionPosition &positionInfo,
124 BackInsertIterator it) const;
125 void insideBindingCompletion(const DomItem &currentItem,
126 const QQmlLSCompletionPosition &positionInfo,
127 BackInsertIterator it) const;
128 void insideImportCompletion(const DomItem &currentItem,
129 const QQmlLSCompletionPosition &positionInfo,
130 BackInsertIterator it) const;
131 void insideQmlFileCompletion(const DomItem &currentItem,
132 const QQmlLSCompletionPosition &positionInfo,
133 BackInsertIterator it) const;
134 void suggestContinueAndBreakStatementIfNeeded(const DomItem &itemAtPosition,
135 BackInsertIterator it) const;
136 void insideScriptLiteralCompletion(const DomItem &currentItem,
137 const QQmlLSCompletionPosition &positionInfo,
138 BackInsertIterator it) const;
139 void insideCallExpression(const DomItem &currentItem,
140 const QQmlLSCompletionPosition &positionInfo,
141 BackInsertIterator it) const;
142 void insideIfStatement(const DomItem &currentItem, const QQmlLSCompletionPosition &positionInfo,
143 BackInsertIterator it) const;
144 void insideReturnStatement(const DomItem &currentItem,
145 const QQmlLSCompletionPosition &positionInfo,
146 BackInsertIterator it) const;
147 void insideWhileStatement(const DomItem &currentItem,
148 const QQmlLSCompletionPosition &positionInfo,
149 BackInsertIterator it) const;
150 void insideDoWhileStatement(const DomItem &parentForContext,
151 const QQmlLSCompletionPosition &positionInfo,
152 BackInsertIterator it) const;
153 void insideForStatementCompletion(const DomItem &parentForContext,
154 const QQmlLSCompletionPosition &positionInfo,
155 BackInsertIterator it) const;
156 void insideForEachStatement(const DomItem &parentForContext,
157 const QQmlLSCompletionPosition &positionInfo,
158 BackInsertIterator it) const;
159 void insideSwitchStatement(const DomItem &parentForContext,
160 const QQmlLSCompletionPosition positionInfo,
161 BackInsertIterator it) const;
162 void insideCaseClause(const DomItem &parentForContext,
163 const QQmlLSCompletionPosition &positionInfo,
164 BackInsertIterator it) const;
165 void insideCaseBlock(const DomItem &parentForContext,
166 const QQmlLSCompletionPosition &positionInfo, BackInsertIterator it) const;
167 void insideDefaultClause(const DomItem &parentForContext,
168 const QQmlLSCompletionPosition &positionInfo,
169 BackInsertIterator it) const;
170 void insideBinaryExpressionCompletion(const DomItem &parentForContext,
171 const QQmlLSCompletionPosition &positionInfo,
172 BackInsertIterator it) const;
173 void insideScriptPattern(const DomItem &parentForContext,
174 const QQmlLSCompletionPosition &positionInfo,
175 BackInsertIterator it) const;
176 void insideVariableDeclarationEntry(const DomItem &parentForContext,
177 const QQmlLSCompletionPosition &positionInfo,
178 BackInsertIterator it) const;
179 void insideThrowStatement(const DomItem &parentForContext,
180 const QQmlLSCompletionPosition &positionInfo,
181 BackInsertIterator it) const;
182 void insideLabelledStatement(const DomItem &parentForContext,
183 const QQmlLSCompletionPosition &positionInfo,
184 BackInsertIterator it) const;
185 void insideContinueStatement(const DomItem &parentForContext,
186 const QQmlLSCompletionPosition &positionInfo,
187 BackInsertIterator it) const;
188 void insideBreakStatement(const DomItem &parentForContext,
189 const QQmlLSCompletionPosition &positionInfo,
190 BackInsertIterator it) const;
191 void insideConditionalExpression(const DomItem &parentForContext,
192 const QQmlLSCompletionPosition &positionInfo,
193 BackInsertIterator it) const;
194 void insideUnaryExpression(const DomItem &parentForContext,
195 const QQmlLSCompletionPosition &positionInfo,
196 BackInsertIterator it) const;
197 void insidePostExpression(const DomItem &parentForContext,
198 const QQmlLSCompletionPosition &positionInfo,
199 BackInsertIterator it) const;
200 void insideParenthesizedExpression(const DomItem &parentForContext,
201 const QQmlLSCompletionPosition &positionInfo,
202 BackInsertIterator it) const;
203 void signalHandlerCompletion(const QQmlJSScope::ConstPtr &scope,
204 QDuplicateTracker<QString> *usedNames,
205 BackInsertIterator it) const;
206
207 void suggestSnippetsForLeftHandSideOfBinding(const DomItem &items,
209
210 void suggestSnippetsForRightHandSideOfBinding(const DomItem &items,
212
213private:
214 using CompletionFromPluginFunction = void(QQmlLSCompletionPlugin *plugin,
216 void collectFromPlugins(const qxp::function_ref<CompletionFromPluginFunction> f,
218
219 QStringList m_loadPaths;
220
221 std::vector<std::unique_ptr<QQmlLSCompletionPlugin>> m_plugins;
222};
223
225
226#endif // QQMLLSCOMPLETION_H
QQmlLSCompletion provides completions for all kinds of QML and JS constructs.
QLspSpecification::CompletionItem CompletionItem
QList< CompletionItem > completions(const DomItem &currentItem, const CompletionContextStrings &ctx) const
static CompletionItem makeSnippet(QUtf8StringView qualifier, QUtf8StringView label, QUtf8StringView insertText)
QQmlLSCompletion(const QFactoryLoader &pluginLoader)
std::back_insert_iterator< QList< CompletionItem > > BackInsertIterator
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
EGLContext ctx
QSet< QString >::iterator it
Combined button and popup list for selecting options.
static void * context
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
#define Q_DECLARE_LOGGING_CATEGORY(name)
GLdouble GLdouble right
GLfloat GLfloat f
GLint left
GLuint GLsizei const GLchar * label
[43]
GLenum GLuint GLintptr offset
GLuint64EXT * result
[6]
GLuint GLenum option
static qreal component(const QPointF &point, unsigned int i)
QQmlLSUtilsAppendOption
@ AppendSemicolon
@ AppendNothing
ptrdiff_t qsizetype
Definition qtypes.h:165
QFile file
[0]
QList< QTreeWidgetItem * > items