38 using DomItem = QQmlJS::Dom::DomItem;
40 enum class ImportCompletionType { None, Module, Version };
41 enum AppendOption { AppendSemicolon, AppendNothing };
43 QQmlLSCompletion(
const QFactoryLoader &pluginLoader);
45 using CompletionItem = QLspSpecification::CompletionItem;
46 using BackInsertIterator = std::back_insert_iterator<QList<CompletionItem>>;
47 QList<CompletionItem> completions(
const DomItem ¤tItem,
48 const CompletionContextStrings &ctx)
const;
50 static CompletionItem makeSnippet(QUtf8StringView qualifier, QUtf8StringView label,
51 QUtf8StringView insertText);
53 static CompletionItem makeSnippet(QUtf8StringView label, QUtf8StringView insertText);
56 struct QQmlLSCompletionPosition
58 DomItem itemAtPosition;
59 CompletionContextStrings cursorPosition;
60 qsizetype offset()
const {
return cursorPosition.offset(); }
63 void collectCompletions(
const DomItem ¤tItem,
const CompletionContextStrings &ctx,
64 BackInsertIterator result)
const;
66 bool betweenLocations(QQmlJS::SourceLocation left,
const QQmlLSCompletionPosition &positionInfo,
67 QQmlJS::SourceLocation right)
const;
68 bool afterLocation(QQmlJS::SourceLocation left,
69 const QQmlLSCompletionPosition &positionInfo)
const;
70 bool beforeLocation(
const QQmlLSCompletionPosition &ctx, QQmlJS::SourceLocation right)
const;
71 bool ctxBeforeStatement(
const QQmlLSCompletionPosition &positionInfo,
72 const DomItem &parentForContext,
73 QQmlJS::Dom::FileLocationRegion firstRegion)
const;
74 bool isCaseOrDefaultBeforeCtx(
const DomItem ¤tClause,
75 const QQmlLSCompletionPosition &positionInfo,
76 QQmlJS::Dom::FileLocationRegion keywordRegion)
const;
77 DomItem previousCaseOfCaseBlock(
const DomItem &parentForContext,
78 const QQmlLSCompletionPosition &positionInfo)
const;
80 void idsCompletions(
const DomItem &component, BackInsertIterator it)
const;
82 void suggestReachableTypes(
const DomItem &context,
83 QQmlJS::Dom::LocalSymbolsTypes typeCompletionType,
84 QLspSpecification::CompletionItemKind kind,
85 BackInsertIterator it)
const;
87 void suggestJSStatementCompletion(
const DomItem ¤tItem, BackInsertIterator it)
const;
88 void suggestCaseAndDefaultStatementCompletion(BackInsertIterator it)
const;
89 void suggestVariableDeclarationStatementCompletion(
90 BackInsertIterator it, AppendOption option = AppendSemicolon)
const;
92 void suggestEnumerationsAndEnumerationValues(
const QQmlJSScope::ConstPtr &scope,
93 const QString &enumName,
94 QDuplicateTracker<QString> &usedNames,
95 BackInsertIterator result)
const;
96 DomItem ownerOfQualifiedExpression(
const DomItem &qualifiedExpression)
const;
97 void suggestJSExpressionCompletion(
const DomItem &context, BackInsertIterator it)
const;
99 void suggestBindingCompletion(
const DomItem &itemAtPosition, BackInsertIterator it)
const;
101 void insideImportCompletionHelper(
const DomItem &file,
102 const QQmlLSCompletionPosition &positionInfo,
103 BackInsertIterator it)
const;
105 void jsIdentifierCompletion(
const QQmlJSScope::ConstPtr &scope,
106 QDuplicateTracker<QString> *usedNames, BackInsertIterator it)
const;
108 void methodCompletion(
const QQmlJSScope::ConstPtr &scope, QDuplicateTracker<QString> *usedNames,
109 BackInsertIterator it)
const;
110 void propertyCompletion(
const QQmlJSScope::ConstPtr &scope,
111 QDuplicateTracker<QString> *usedNames, BackInsertIterator it)
const;
112 void enumerationCompletion(
const QQmlJSScope::ConstPtr &scope,
113 QDuplicateTracker<QString> *usedNames, BackInsertIterator it)
const;
114 void enumerationValueCompletionHelper(
const QStringList &enumeratorKeys,
115 BackInsertIterator it)
const;
117 void enumerationValueCompletion(
const QQmlJSScope::ConstPtr &scope,
118 const QString &enumeratorName, BackInsertIterator it)
const;
120 static bool cursorInFrontOfItem(
const DomItem &parentForContext,
121 const QQmlLSCompletionPosition &positionInfo);
122 static bool cursorAfterColon(
const DomItem ¤tItem,
123 const QQmlLSCompletionPosition &positionInfo);
124 void insidePragmaCompletion(QQmlJS::Dom::DomItem currentItem,
125 const QQmlLSCompletionPosition &positionInfo,
126 BackInsertIterator it)
const;
127 void insideQmlObjectCompletion(
const DomItem &parentForContext,
128 const QQmlLSCompletionPosition &positionInfo,
129 BackInsertIterator it)
const;
130 void insidePropertyDefinitionCompletion(
const DomItem ¤tItem,
131 const QQmlLSCompletionPosition &positionInfo,
132 BackInsertIterator it)
const;
133 void insideBindingCompletion(
const DomItem ¤tItem,
134 const QQmlLSCompletionPosition &positionInfo,
135 BackInsertIterator it)
const;
136 void insideImportCompletion(
const DomItem ¤tItem,
137 const QQmlLSCompletionPosition &positionInfo,
138 BackInsertIterator it)
const;
139 void insideQmlFileCompletion(
const DomItem ¤tItem,
140 const QQmlLSCompletionPosition &positionInfo,
141 BackInsertIterator it)
const;
142 void suggestContinueAndBreakStatementIfNeeded(
const DomItem &itemAtPosition,
143 BackInsertIterator it)
const;
144 void insideScriptLiteralCompletion(
const DomItem ¤tItem,
145 const QQmlLSCompletionPosition &positionInfo,
146 BackInsertIterator it)
const;
147 void insideCallExpression(
const DomItem ¤tItem,
148 const QQmlLSCompletionPosition &positionInfo,
149 BackInsertIterator it)
const;
150 void insideIfStatement(
const DomItem ¤tItem,
const QQmlLSCompletionPosition &positionInfo,
151 BackInsertIterator it)
const;
152 void insideReturnStatement(
const DomItem ¤tItem,
153 const QQmlLSCompletionPosition &positionInfo,
154 BackInsertIterator it)
const;
155 void insideWhileStatement(
const DomItem ¤tItem,
156 const QQmlLSCompletionPosition &positionInfo,
157 BackInsertIterator it)
const;
158 void insideDoWhileStatement(
const DomItem &parentForContext,
159 const QQmlLSCompletionPosition &positionInfo,
160 BackInsertIterator it)
const;
161 void insideForStatementCompletion(
const DomItem &parentForContext,
162 const QQmlLSCompletionPosition &positionInfo,
163 BackInsertIterator it)
const;
164 void insideForEachStatement(
const DomItem &parentForContext,
165 const QQmlLSCompletionPosition &positionInfo,
166 BackInsertIterator it)
const;
167 void insideSwitchStatement(
const DomItem &parentForContext,
168 const QQmlLSCompletionPosition positionInfo,
169 BackInsertIterator it)
const;
170 void insideCaseClause(
const DomItem &parentForContext,
171 const QQmlLSCompletionPosition &positionInfo,
172 BackInsertIterator it)
const;
173 void insideCaseBlock(
const DomItem &parentForContext,
174 const QQmlLSCompletionPosition &positionInfo, BackInsertIterator it)
const;
175 void insideDefaultClause(
const DomItem &parentForContext,
176 const QQmlLSCompletionPosition &positionInfo,
177 BackInsertIterator it)
const;
178 void insideBinaryExpressionCompletion(
const DomItem &parentForContext,
179 const QQmlLSCompletionPosition &positionInfo,
180 BackInsertIterator it)
const;
181 void insideScriptPattern(
const DomItem &parentForContext,
182 const QQmlLSCompletionPosition &positionInfo,
183 BackInsertIterator it)
const;
184 void insideVariableDeclarationEntry(
const DomItem &parentForContext,
185 const QQmlLSCompletionPosition &positionInfo,
186 BackInsertIterator it)
const;
187 void insideThrowStatement(
const DomItem &parentForContext,
188 const QQmlLSCompletionPosition &positionInfo,
189 BackInsertIterator it)
const;
190 void insideLabelledStatement(
const DomItem &parentForContext,
191 const QQmlLSCompletionPosition &positionInfo,
192 BackInsertIterator it)
const;
193 void insideContinueStatement(
const DomItem &parentForContext,
194 const QQmlLSCompletionPosition &positionInfo,
195 BackInsertIterator it)
const;
196 void insideBreakStatement(
const DomItem &parentForContext,
197 const QQmlLSCompletionPosition &positionInfo,
198 BackInsertIterator it)
const;
199 void insideConditionalExpression(
const DomItem &parentForContext,
200 const QQmlLSCompletionPosition &positionInfo,
201 BackInsertIterator it)
const;
202 void insideUnaryExpression(
const DomItem &parentForContext,
203 const QQmlLSCompletionPosition &positionInfo,
204 BackInsertIterator it)
const;
205 void insidePostExpression(
const DomItem &parentForContext,
206 const QQmlLSCompletionPosition &positionInfo,
207 BackInsertIterator it)
const;
208 void insideParenthesizedExpression(
const DomItem &parentForContext,
209 const QQmlLSCompletionPosition &positionInfo,
210 BackInsertIterator it)
const;
211 void insideTemplateLiteral(
const DomItem &parentForContext,
212 const QQmlLSCompletionPosition &positionInfo,
213 BackInsertIterator it)
const;
214 void insideNewExpression(
const DomItem &parentForContext,
215 const QQmlLSCompletionPosition &positionInfo,
216 BackInsertIterator it)
const;
217 void insideNewMemberExpression(
const DomItem &parentForContext,
218 const QQmlLSCompletionPosition &positionInfo,
219 BackInsertIterator it)
const;
220 void signalHandlerCompletion(
const QQmlJSScope::ConstPtr &scope,
221 QDuplicateTracker<QString> *usedNames,
222 BackInsertIterator it)
const;
224 void suggestSnippetsForLeftHandSideOfBinding(
const DomItem &items,
225 BackInsertIterator result)
const;
227 void suggestSnippetsForRightHandSideOfBinding(
const DomItem &items,
228 BackInsertIterator result)
const;
231 using CompletionFromPluginFunction =
void(QQmlLSCompletionPlugin *plugin,
232 BackInsertIterator result);
233 void collectFromPlugins(
const qxp::function_ref<CompletionFromPluginFunction> f,
234 BackInsertIterator result)
const;
236 QStringList m_loadPaths;
238 std::vector<std::unique_ptr<QQmlLSCompletionPlugin>> m_plugins;