Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qqmldomexternalitems_p.h
Go to the documentation of this file.
1// Copyright (C) 2020 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// Qt-Security score:significant
4
5#ifndef QQMLDOMEXTERNALITEMS_P_H
6#define QQMLDOMEXTERNALITEMS_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include "qqmldomitem_p.h"
23
24#include <QtQml/private/qqmljsast_p.h>
25#include <QtQml/private/qqmljsengine_p.h>
26#include <QtQml/private/qqmldirparser_p.h>
27#include <QtQmlCompiler/private/qqmljstyperesolver_p.h>
28#include <QtCore/QMetaType>
29#include <QtCore/qregularexpression.h>
30
31#include <limits>
32#include <memory>
33
34Q_DECLARE_METATYPE(QQmlDirParser::Plugin)
35
36QT_BEGIN_NAMESPACE
37
38namespace QQmlJS {
39namespace Dom {
40
41/*!
42\internal
43\class QQmlJS::Dom::ExternalOwningItem
44
45\brief A OwningItem that refers to an external resource (file,...)
46
47Every owning item has a file or directory it refers to.
48
49
50*/
51class QMLDOM_EXPORT ExternalOwningItem: public OwningItem {
52public:
53 ExternalOwningItem(
54 const QString &filePath, const QDateTime &lastDataUpdateAt, const Path &pathFromTop,
55 int derivedFrom = 0, const QString &code = QString());
56 ExternalOwningItem(const ExternalOwningItem &o) = default;
57 QString canonicalFilePath(const DomItem &) const override;
58 QString canonicalFilePath() const;
59 Path canonicalPath(const DomItem &) const override;
60 Path canonicalPath() const;
61 bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
62 {
63 bool cont = OwningItem::iterateDirectSubpaths(self, visitor);
64 cont = cont && self.invokeVisitorOnLazyField(visitor, Fields::canonicalFilePath, [this]() {
65 return canonicalFilePath();
66 });
67 cont = cont && self.invokeVisitorOnLazyField(visitor, Fields::isValid, [this]() {
68 return isValid();
69 });
70 if (!code().isNull())
71 cont = cont && self.invokeVisitorOnLazyField(visitor, Fields::code, [this]() {
72 return code();
73 });
74 return cont;
75 }
76
77 bool iterateSubOwners(const DomItem &self, function_ref<bool(const DomItem &owner)> visitor) override
78 {
79 bool cont = OwningItem::iterateSubOwners(self, visitor);
80 cont = cont && self.field(Fields::components).visitKeys([visitor](const QString &, const DomItem &comps) {
81 return comps.visitIndexes([visitor](const DomItem &comp) {
82 return comp.field(Fields::objects).visitIndexes([visitor](const DomItem &qmlObj) {
83 if (const QmlObject *qmlObjPtr = qmlObj.as<QmlObject>())
84 return qmlObjPtr->iterateSubOwners(qmlObj, visitor);
85 Q_ASSERT(false);
86 return true;
87 });
88 });
89 });
90 return cont;
91 }
92
93 bool isValid() const {
94 QMutexLocker l(mutex());
95 return m_isValid;
96 }
97 void setIsValid(bool val) {
98 QMutexLocker l(mutex());
99 m_isValid = val;
100 }
101 // null code means invalid
102 const QString &code() const { return m_code; }
103
104protected:
105 QString m_canonicalFilePath;
106 QString m_code;
107 Path m_path;
108 bool m_isValid = false;
109};
110
111class QMLDOM_EXPORT QmlDirectory final : public ExternalOwningItem
112{
113protected:
114 std::shared_ptr<OwningItem> doCopy(const DomItem &) const override
115 {
116 return std::make_shared<QmlDirectory>(*this);
117 }
118
119public:
120 constexpr static DomType kindValue = DomType::QmlDirectory;
121 DomType kind() const override { return kindValue; }
122 QmlDirectory(
123 const QString &filePath = QString(), const QStringList &dirList = QStringList(),
124 const QDateTime &lastDataUpdateAt = QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC),
125 int derivedFrom = 0);
126 QmlDirectory(const QmlDirectory &o) = default;
127
128 std::shared_ptr<QmlDirectory> makeCopy(const DomItem &self) const
129 {
130 return std::static_pointer_cast<QmlDirectory>(doCopy(self));
131 }
132
133 bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
134
135 const QMultiMap<QString, Export> &exports() const & { return m_exports; }
136
137 const QMultiMap<QString, QString> &qmlFiles() const & { return m_qmlFiles; }
138
139 bool addQmlFilePath(const QString &relativePath);
140
141private:
142 QMultiMap<QString, Export> m_exports;
143 QMultiMap<QString, QString> m_qmlFiles;
144};
145
146class QMLDOM_EXPORT QmldirFile final : public ExternalOwningItem
147{
148 Q_DECLARE_TR_FUNCTIONS(QmldirFile)
149protected:
150 std::shared_ptr<OwningItem> doCopy(const DomItem &) const override
151 {
152 auto copy = std::make_shared<QmldirFile>(*this);
153 return copy;
154 }
155
156public:
157 constexpr static DomType kindValue = DomType::QmldirFile;
158 DomType kind() const override { return kindValue; }
159
160 static ErrorGroups myParsingErrors();
161
162 QmldirFile(
163 const QString &filePath = QString(), const QString &code = QString(),
164 const QDateTime &lastDataUpdateAt = QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC),
165 int derivedFrom = 0)
166 : ExternalOwningItem(filePath, lastDataUpdateAt, Paths::qmldirFilePath(filePath),
167 derivedFrom, code)
168 {
169 }
170 QmldirFile(const QmldirFile &o) = default;
171
172 static std::shared_ptr<QmldirFile> fromPathAndCode(const QString &path, const QString &code);
173
174 std::shared_ptr<QmldirFile> makeCopy(const DomItem &self) const
175 {
176 return std::static_pointer_cast<QmldirFile>(doCopy(self));
177 }
178
179 bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
180
181 QmlUri uri() const { return m_uri; }
182
183 const QSet<int> &majorVersions() const & { return m_majorVersions; }
184
185 const QMultiMap<QString, Export> &exports() const & { return m_exports; }
186
187 const QList<Import> &imports() const & { return m_imports; }
188
189 const QList<Path> &qmltypesFilePaths() const & { return m_qmltypesFilePaths; }
190
191 QMap<QString, QString> qmlFiles() const;
192
193 bool designerSupported() const { return m_qmldir.designerSupported(); }
194
195 QStringList classNames() const { return m_qmldir.classNames(); }
196
197 QList<ModuleAutoExport> autoExports() const;
198 void setAutoExports(const QList<ModuleAutoExport> &autoExport);
199
200 void ensureInModuleIndex(const DomItem &self, const QString &uri) const;
201
202private:
203 void parse();
204 void setFromQmldir();
205
206 QmlUri m_uri;
207 QSet<int> m_majorVersions;
208 QQmlDirParser m_qmldir;
209 QList<QQmlDirParser::Plugin> m_plugins;
210 QList<Import> m_imports;
211 QList<ModuleAutoExport> m_autoExports;
212 QMultiMap<QString, Export> m_exports;
213 QList<Path> m_qmltypesFilePaths;
214};
215
216class QMLDOM_EXPORT JsFile final : public ExternalOwningItem
217{
218protected:
219 std::shared_ptr<OwningItem> doCopy(const DomItem &) const override
220 {
221 auto copy = std::make_shared<JsFile>(*this);
222 return copy;
223 }
224
225public:
226 constexpr static DomType kindValue = DomType::JsFile;
227 DomType kind() const override { return kindValue; }
228 JsFile(const QString &filePath = QString(),
229 const QDateTime &lastDataUpdateAt = QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC),
230 const Path &pathFromTop = Path(), int derivedFrom = 0)
231 : ExternalOwningItem(filePath, lastDataUpdateAt, pathFromTop, derivedFrom)
232 {
233 }
234 JsFile(const QString &filePath = QString(), const QString &code = QString(),
235 const QDateTime &lastDataUpdateAt = QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC),
236 int derivedFrom = 0);
237 JsFile(const JsFile &o) = default;
238
239 std::shared_ptr<JsFile> makeCopy(const DomItem &self) const
240 {
241 return std::static_pointer_cast<JsFile>(doCopy(self));
242 }
243
244 bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const
245 override; // iterates the *direct* subpaths, returns false if a quick end was requested
246
247 std::shared_ptr<QQmlJS::Engine> engine() const { return m_engine; }
248 JsResource rootComponent() const { return m_rootComponent; }
249 void setFileLocationsTree(const FileLocations::Tree &v) { m_fileLocationsTree = std::move(v); }
250
251 static ErrorGroups myParsingErrors();
252
253 void writeOut(const DomItem &self, OutWriter &lw) const override;
254 void setExpression(const std::shared_ptr<ScriptExpression> &script) { m_script = script; }
255
256 void initPragmaLibrary() { m_pragmaLibrary = LegacyPragmaLibrary{}; };
257 void addFileImport(const QString &jsfile, const QString &module);
258 void addModuleImport(const QString &uri, const QString &version, const QString &module);
259
260private:
261 void writeOutDirectives(const DomItem &, OutWriter &lw) const;
262
263 /*
264 Entities with Legacy prefix are here to support formatting of the discouraged
265 .import, .pragma directives in .js files.
266 Taking into account that usage of these directives is discouraged and
267 the fact that current usecase is limited to the formatting of .js, it's arguably should not
268 be exposed and kept private.
269
270 LegacyPragma corresponds to the only one existing .pragma library
271
272 LegacyImport is capable of representing the following import statements:
273 .import T_STRING_LITERAL as T_IDENTIFIER
274 .import T_IDENTIFIER (. T_IDENTIFIER)* (T_VERSION_NUMBER (. T_VERSION_NUMBER)?)? as T_IDENTIFIER
275
276 LegacyDirectivesCollector is a workaround for collecting those directives.
277 At the moment of writing .import, .pragma in .js files do not have corresponding
278 representative AST::Node-s. Collecting of those is happening during the lexing
279 */
280
281 struct LegacyPragmaLibrary
282 {
283 void writeOut(const DomItem &, OutWriter &lw) const;
284 };
285
286 struct LegacyImport
287 {
288 QString fileName; // file import
289 QString uri; // module import
290 QString version; // used for module import
291 QString asIdentifier; // .import ... as T_Identifier
292
293 void writeOut(const DomItem &, OutWriter &lw) const;
294 };
295
296 class LegacyDirectivesCollector : public QQmlJS::Directives
297 {
298 public:
299 LegacyDirectivesCollector(JsFile &file) : m_file(file){};
300
301 void pragmaLibrary() override { m_file.initPragmaLibrary(); };
302 void importFile(const QString &jsfile, const QString &module, int, int) override
303 {
304 m_file.addFileImport(jsfile, module);
305 };
306 void importModule(const QString &uri, const QString &version, const QString &module, int,
307 int) override
308 {
309 m_file.addModuleImport(uri, version, module);
310 };
311
312 private:
313 JsFile &m_file;
314 };
315
316private:
317 std::shared_ptr<QQmlJS::Engine> m_engine;
318 std::optional<LegacyPragmaLibrary> m_pragmaLibrary = std::nullopt;
319 QList<LegacyImport> m_imports;
320 std::shared_ptr<ScriptExpression> m_script;
321 JsResource m_rootComponent;
322 FileLocations::Tree m_fileLocationsTree;
323};
324
325class QMLDOM_EXPORT QmlFile final : public ExternalOwningItem
326{
327protected:
328 std::shared_ptr<OwningItem> doCopy(const DomItem &self) const override;
329
330public:
331 constexpr static DomType kindValue = DomType::QmlFile;
332 DomType kind() const override { return kindValue; }
333
334 enum RecoveryOption { DisableParserRecovery, EnableParserRecovery };
335
336 QmlFile(const QString &filePath = QString(), const QString &code = QString(),
337 const QDateTime &lastDataUpdate = QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC),
338 int derivedFrom = 0, RecoveryOption option = DisableParserRecovery);
339 static ErrorGroups myParsingErrors();
340 bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const
341 override; // iterates the *direct* subpaths, returns false if a quick end was requested
342 DomItem field(const DomItem &self, QStringView name) const override;
343 std::shared_ptr<QmlFile> makeCopy(const DomItem &self) const
344 {
345 return std::static_pointer_cast<QmlFile>(doCopy(self));
346 }
347 void addError(const DomItem &self, ErrorMessage &&msg) override;
348
349 const QMultiMap<QString, QmlComponent> &components() const &
350 {
351 return lazyMembers().m_components;
352 }
353 void setComponents(const QMultiMap<QString, QmlComponent> &components)
354 {
355 lazyMembers().m_components = components;
356 }
357 Path addComponent(const QmlComponent &component, AddOption option = AddOption::Overwrite,
358 QmlComponent **cPtr = nullptr)
359 {
360 QStringList nameEls = component.name().split(QChar::fromLatin1('.'));
361 QString key = nameEls.mid(1).join(QChar::fromLatin1('.'));
362 return insertUpdatableElementInMultiMap(Path::fromField(Fields::components), lazyMembers().m_components,
363 key, component, option, cPtr);
364 }
365
366 void writeOut(const DomItem &self, OutWriter &lw) const override;
367
368 AST::UiProgram *ast() const
369 {
370 return m_ast; // avoid making it public? would make moving away from it easier
371 }
372 const QList<Import> &imports() const &
373 {
374 return lazyMembers().m_imports;
375 }
376 void setImports(const QList<Import> &imports) { lazyMembers().m_imports = imports; }
377 Path addImport(const Import &i)
378 {
379 auto &members = lazyMembers();
380 index_type idx = index_type(members.m_imports.size());
381 members.m_imports.append(i);
382 if (i.uri.isModule()) {
383 members.m_importScope.addImport((i.importId.isEmpty()
384 ? QStringList()
385 : i.importId.split(QChar::fromLatin1('.'))),
386 i.importedPath());
387 } else {
388 QString path = i.uri.absoluteLocalPath(canonicalFilePath());
389 if (!path.isEmpty())
390 members.m_importScope.addImport(
391 (i.importId.isEmpty() ? QStringList()
392 : i.importId.split(QChar::fromLatin1('.'))),
393 Paths::qmlDirPath(path));
394 }
395 return Path::fromField(Fields::imports).withIndex(idx);
396 }
397 std::shared_ptr<QQmlJS::Engine> engine() const { return m_engine; }
398 RegionComments &comments() { return lazyMembers().m_comments; }
399 std::shared_ptr<AstComments> astComments() const { return lazyMembers().m_astComments; }
400 void setAstComments(const std::shared_ptr<AstComments> &comm) { lazyMembers().m_astComments = comm; }
401 FileLocations::Tree fileLocationsTree() const { return lazyMembers().m_fileLocationsTree; }
402 void setFileLocationsTree(const FileLocations::Tree &v) { lazyMembers().m_fileLocationsTree = v; }
403 const QList<Pragma> &pragmas() const & { return lazyMembers().m_pragmas; }
404 void setPragmas(QList<Pragma> pragmas) { lazyMembers().m_pragmas = pragmas; }
405 Path addPragma(const Pragma &pragma)
406 {
407 auto &members = lazyMembers();
408 int idx = members.m_pragmas.size();
409 members.m_pragmas.append(pragma);
410 return Path::fromField(Fields::pragmas).withIndex(idx);
411 }
412 ImportScope &importScope() { return lazyMembers().m_importScope; }
413 const ImportScope &importScope() const { return lazyMembers().m_importScope; }
414
415 std::shared_ptr<QQmlJSTypeResolver> typeResolver() const
416 {
417 return lazyMembers().m_typeResolver;
418 }
419 void setTypeResolverWithDependencies(const std::shared_ptr<QQmlJSTypeResolver> &typeResolver,
420 const QQmlJSTypeResolverDependencies &dependencies)
421 {
422 auto &members = lazyMembers();
423 members.m_typeResolver = typeResolver;
424 members.m_typeResolverDependencies = dependencies;
425 }
426
427 DomCreationOption creationOption() const { return lazyMembers().m_creationOption; }
428
429 QQmlJSScope::ConstPtr handleForPopulation() const
430 {
431 return m_handleForPopulation;
432 }
433
434 void setHandleForPopulation(const QQmlJSScope::ConstPtr &scope)
435 {
436 m_handleForPopulation = scope;
437 }
438
439
440private:
441 // The lazy parts of QmlFile are inside of QmlFileLazy.
442 struct QmlFileLazy
443 {
444 QmlFileLazy(FileLocations::Tree fileLocationsTree, AstComments *astComments)
445 : m_fileLocationsTree(fileLocationsTree), m_astComments(astComments)
446 {
447 }
448 RegionComments m_comments;
449 QMultiMap<QString, QmlComponent> m_components;
450 QList<Pragma> m_pragmas;
451 QList<Import> m_imports;
452 ImportScope m_importScope;
453 FileLocations::Tree m_fileLocationsTree;
454 std::shared_ptr<AstComments> m_astComments;
455 DomCreationOption m_creationOption;
456 std::shared_ptr<QQmlJSTypeResolver> m_typeResolver;
457 QQmlJSTypeResolverDependencies m_typeResolverDependencies;
458 };
459 friend class QQmlDomAstCreatorBase;
460 AST::UiProgram *m_ast; // avoid? would make moving away from it easier
461 std::shared_ptr<Engine> m_engine;
462 QQmlJSScope::ConstPtr m_handleForPopulation;
463 mutable std::optional<QmlFileLazy> m_lazyMembers;
464
465 void ensurePopulated() const
466 {
467 if (m_lazyMembers)
468 return;
469
470 m_lazyMembers.emplace(FileLocations::createTree(canonicalPath()), new AstComments(m_engine));
471
472 // populate via the QQmlJSScope by accessing the (lazy) pointer
473 if (m_handleForPopulation.factory()) {
474 // silence no-discard attribute:
475 Q_UNUSED(m_handleForPopulation.data());
476 }
477 }
478 const QmlFileLazy &lazyMembers() const
479 {
480 ensurePopulated();
481 return *m_lazyMembers;
482 }
483 QmlFileLazy &lazyMembers()
484 {
485 ensurePopulated();
486 return *m_lazyMembers;
487 }
488};
489
490class QMLDOM_EXPORT QmltypesFile final : public ExternalOwningItem
491{
492protected:
493 std::shared_ptr<OwningItem> doCopy(const DomItem &) const override
494 {
495 auto res = std::make_shared<QmltypesFile>(*this);
496 return res;
497 }
498
499public:
500 constexpr static DomType kindValue = DomType::QmltypesFile;
501 DomType kind() const override { return kindValue; }
502
503 QmltypesFile(
504 const QString &filePath = QString(), const QString &code = QString(),
505 const QDateTime &lastDataUpdateAt = QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC),
506 int derivedFrom = 0)
507 : ExternalOwningItem(filePath, lastDataUpdateAt, Paths::qmltypesFilePath(filePath),
508 derivedFrom, code)
509 {
510 }
511
512 QmltypesFile(const QmltypesFile &o) = default;
513
514 void ensureInModuleIndex(const DomItem &self) const;
515
516 bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override;
517 std::shared_ptr<QmltypesFile> makeCopy(const DomItem &self) const
518 {
519 return std::static_pointer_cast<QmltypesFile>(doCopy(self));
520 }
521
522 void addImport(const Import i)
523 { // builder only: not threadsafe...
524 m_imports.append(i);
525 }
526 const QList<Import> &imports() const & { return m_imports; }
527 const QMultiMap<QString, QmltypesComponent> &components() const & { return m_components; }
528 void setComponents(QMultiMap<QString, QmltypesComponent> c) { m_components = std::move(c); }
529 Path addComponent(const QmltypesComponent &comp, AddOption option = AddOption::Overwrite,
530 QmltypesComponent **cPtr = nullptr)
531 {
532 for (const Export &e : comp.exports())
533 addExport(e);
534 return insertUpdatableElementInMultiMap(Path::fromField(u"components"), m_components,
535 comp.name(), comp, option, cPtr);
536 }
537 const QMultiMap<QString, Export> &exports() const & { return m_exports; }
538 void setExports(QMultiMap<QString, Export> e) { m_exports = e; }
539 Path addExport(const Export &e)
540 {
541 index_type i = m_exports.values(e.typeName).size();
542 m_exports.insert(e.typeName, e);
543 addUri(e.uri, e.version.majorVersion);
544 return canonicalPath().withField(Fields::exports).withIndex(i);
545 }
546
547 const QMap<QString, QSet<int>> &uris() const & { return m_uris; }
548 void addUri(const QString &uri, int majorVersion)
549 {
550 QSet<int> &v = m_uris[uri];
551 if (!v.contains(majorVersion)) {
552 v.insert(majorVersion);
553 }
554 }
555
556private:
557 QList<Import> m_imports;
558 QMultiMap<QString, QmltypesComponent> m_components;
559 QMultiMap<QString, Export> m_exports;
560 QMap<QString, QSet<int>> m_uris;
561};
562
563class QMLDOM_EXPORT GlobalScope final : public ExternalOwningItem
564{
565protected:
566 std::shared_ptr<OwningItem> doCopy(const DomItem &) const override;
567
568public:
569 constexpr static DomType kindValue = DomType::GlobalScope;
570 DomType kind() const override { return kindValue; }
571
572 GlobalScope(
573 const QString &filePath = QString(),
574 const QDateTime &lastDataUpdateAt = QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC),
575 int derivedFrom = 0)
576 : ExternalOwningItem(filePath, lastDataUpdateAt, Paths::globalScopePath(filePath),
577 derivedFrom)
578 {
579 setIsValid(true);
580 }
581
582 bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override;
583 std::shared_ptr<GlobalScope> makeCopy(const DomItem &self) const
584 {
585 return std::static_pointer_cast<GlobalScope>(doCopy(self));
586 }
587 QString name() const { return m_name; }
588 Language language() const { return m_language; }
589 GlobalComponent rootComponent() const { return m_rootComponent; }
590 void setName(const QString &name) { m_name = name; }
591 void setLanguage(Language language) { m_language = language; }
592 void setRootComponent(const GlobalComponent &ob)
593 {
594 m_rootComponent = ob;
595 m_rootComponent.updatePathFromOwner(Path::fromField(Fields::rootComponent));
596 }
597
598private:
599 QString m_name;
600 Language m_language;
601 GlobalComponent m_rootComponent;
602};
603
604} // end namespace Dom
605} // end namespace QQmlJS
606QT_END_NAMESPACE
607#endif // QQMLDOMEXTERNALITEMS_P_H
DomType kind() const override
Path canonicalPath(const DomItem &self) const override
const CommentedElement * commentForNode(AST::Node *n, CommentAnchor location) const
AstComments(const std::shared_ptr< Engine > &e)
std::pair< AST::Node *, CommentAnchor > CommentKey
AstComments(const AstComments &o)
std::shared_ptr< AstComments > makeCopy(const DomItem &self) const
std::shared_ptr< OwningItem > doCopy(const DomItem &) const override
static constexpr DomType kindValue
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override
void setSemanticScope(const QQmlJSScope::ConstPtr &scope)
QQmlJSScope::ConstPtr m_semanticScope
void updatePathFromOwner(const Path &newPath)
QQmlJSScope::ConstPtr semanticScope() const
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
Path addAnnotation(const Path &selfPathFromOwner, const QmlObject &annotation, QmlObject **aPtr=nullptr)
BindingValue(const QList< QmlObject > &l)
void updatePathFromOwner(const Path &newPath)
BindingValue(const std::shared_ptr< ScriptExpression > &o)
BindingValue(const BindingValue &o)
DomItem value(const DomItem &binding) const
BindingValue & operator=(const BindingValue &o)
std::shared_ptr< ScriptExpression > scriptExpression
BindingValue(const QmlObject &o)
void setValue(std::unique_ptr< BindingValue > &&value)
BindingType bindingType() const
std::shared_ptr< ScriptExpression > scriptExpressionValue() const
RegionComments & comments()
Binding & operator=(const Binding &)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const
void setBindingIdentifiers(const ScriptElementVariant &bindingIdentifiers)
Path addAnnotation(const Path &selfPathFromOwner, const QmlObject &a, QmlObject **aPtr=nullptr)
QList< QmlObject > annotations() const
void updatePathFromOwner(const Path &newPath)
static QString preCodeForName(QStringView n)
QmlObject const * objectValue() const
DomItem valueItem(const DomItem &self) const
QList< QmlObject > * arrayValue()
Binding(const Binding &o)
QList< QmlObject > const * arrayValue() const
static QString postCodeForName(QStringView)
void setAnnotations(const QList< QmlObject > &annotations)
Binding & operator=(Binding &&)=default
void writeOut(const DomItem &self, OutWriter &lw) const
Binding(const QString &m_name, const QString &scriptCode, BindingType bindingType=BindingType::Normal)
const RegionComments & comments() const
Binding(const QString &m_name, std::unique_ptr< BindingValue > &&value, BindingType bindingType=BindingType::Normal)
void writeOutValue(const DomItem &self, OutWriter &lw) const
Binding(const QString &m_name=QString())
static constexpr DomType kindValue
Binding(const QString &m_name, const QmlObject &value, BindingType bindingType=BindingType::Normal)
Binding(Binding &&o)=default
std::shared_ptr< ScriptExpression > scriptExpressionValue()
ScriptElementVariant bindingIdentifiers() const
BindingValueKind valueKind() const
Binding(const QString &m_name, const std::shared_ptr< ScriptExpression > &value, BindingType bindingType=BindingType::Normal)
CommentCollector(MutableDomItem item)
void collectComments(const std::shared_ptr< Engine > &engine, AST::Node *rootNode, const std::shared_ptr< AstComments > &astComments)
Collects and associates comments with javascript AST::Node pointers or with MutableDomItem.
Extracts various pieces and information out of a rawComment string.
QStringView postWhitespace() const
QStringView comment() const
QQmlJS::SourceLocation sourceLocation() const
QQmlJS::SourceLocation commentLocation
QStringView preWhitespace() const
QStringView commentContent() const
Represents a comment.
static constexpr DomType kindValue
CommentType type() const
void write(OutWriter &lw) const
QQmlJS::SourceLocation sourceLocation() const
QStringView rawComment() const
Comment(QStringView c, const QQmlJS::SourceLocation &loc, int newlinesBefore=1, CommentType type=Pre)
friend bool operator==(const Comment &c1, const Comment &c2)
friend bool operator!=(const Comment &c1, const Comment &c2)
CommentInfo info() const
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
Expose attributes to the Dom.
Comment(const QString &c, const QQmlJS::SourceLocation &loc, int newlinesBefore=1, CommentType type=Pre)
const RegionComments & comments() const
CommentableDomElement & operator=(const CommentableDomElement &o)=default
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override
CommentableDomElement(const CommentableDomElement &o)
CommentableDomElement(const Path &pathFromOwner=Path())
Keeps the comment associated with an element.
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
friend bool operator!=(const CommentedElement &c1, const CommentedElement &c2)
void writePre(OutWriter &lw) const
QList< Comment > preComments() const
void writePost(OutWriter &lw) const
static constexpr DomType kindValue
friend bool operator==(const CommentedElement &c1, const CommentedElement &c2)
void addComment(const Comment &comment)
QList< Comment > postComments() const
void setIsSingleton(bool isSingleton)
void updatePathFromOwner(const Path &newPath) override
Component(const Path &pathFromOwner=Path())
void setIsComposite(bool isComposite)
Component & operator=(const Component &)=default
void setIsCreatable(bool isCreatable)
void setObjects(const QList< QmlObject > &objects)
const QMultiMap< QString, EnumDecl > & enumerations() const &
Component(const Component &o)=default
Path addObject(const QmlObject &object, QmlObject **oPtr=nullptr)
void setName(const QString &name)
Path attachedTypePath(const DomItem &) const
void setEnumerations(const QMultiMap< QString, EnumDecl > &enumerations)
DomItem field(const DomItem &self, QStringView name) const override
Path addEnumeration(const EnumDecl &enumeration, AddOption option=AddOption::Overwrite, EnumDecl **ePtr=nullptr)
void setAttachedTypeName(const QString &name)
bool iterateDirectSubpaths(const DomItem &, DirectVisitor) const override
QString attachedTypeName() const
Component(const QString &name)
void setAttachedTypePath(const Path &p)
const QList< QmlObject > & objects() const &
DomKind domKind() const override
ConstantData(const Path &pathFromOwner, const QCborValue &value, Options options=Options::MapIsMap)
QCborValue value() const override
quintptr id() const override
static constexpr DomType kindValue
DomType kind() const override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override
ConstantData & operator*()
const ConstantData & operator*() const
const ConstantData * operator->() const
ConstantData * operator->()
bool operator==(Dependency const &o) const
QString typeName() const
virtual DomType kind() const =0
virtual DomKind domKind() const
virtual Path canonicalPath(const DomItem &self) const =0
virtual Path pathFromOwner() const =0
virtual QList< QString > fields(const DomItem &self) const
virtual bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const =0
virtual index_type indexes(const DomItem &self) const
const DomBase * domBase() const
virtual DomItem containingObject(const DomItem &self) const
virtual void writeOut(const DomItem &self, OutWriter &lw) const
virtual QSet< QString > const keys(const DomItem &self) const
virtual DomItem field(const DomItem &self, QStringView name) const
virtual quintptr id() const
virtual QCborValue value() const
virtual QString canonicalFilePath(const DomItem &self) const
virtual ~DomBase()=default
virtual void dump(const DomItem &, const Sink &sink, int indent, FilterT filter) const
virtual DomItem key(const DomItem &self, const QString &name) const
virtual DomItem index(const DomItem &self, index_type index) const
DomElement & operator=(const DomElement &)=default
virtual void updatePathFromOwner(const Path &newPath)
Path canonicalPath(const DomItem &self) const override
Path pathFromOwner() const override
DomElement(const DomElement &o)=default
DomElement(const Path &pathFromOwner=Path())
DomItem containingObject(const DomItem &self) const override
SemanticAnalysis semanticAnalysis()
DomEnvironment(const DomEnvironment &o)=delete
QString globalScopeName() const
void addQmlFile(const std::shared_ptr< QmlFile > &file, AddOption option=AddOption::KeepExisting)
static std::shared_ptr< DomEnvironment > create(const QStringList &loadPaths, Options options=Option::SingleThreaded, DomCreationOption creationOption=DomCreationOption::Default, const DomItem &universe=DomItem::empty)
bool finishLoadingDependencies(int waitMSec=30000)
QStringList qmldirFiles() const
std::shared_ptr< ExternalItemInfo< QmlFile > > qmlFileWithPath(const DomItem &self, const QString &path, EnvLookup options=EnvLookup::Normal) const
QSet< QString > moduleIndexUris(const DomItem &self, EnvLookup lookup=EnvLookup::Normal) const
void addGlobalScope(const std::shared_ptr< GlobalScope > &file, AddOption option=AddOption::KeepExisting)
LoadResult insertOrUpdateExternalItemInfo(const QString &path, std::shared_ptr< T > extItem)
void populateFromQmlFile(MutableDomItem &&qmlFile)
void addQmlDirectory(const std::shared_ptr< QmlDirectory > &file, AddOption option=AddOption::KeepExisting)
void addQmldirFile(const std::shared_ptr< QmldirFile > &file, AddOption option=AddOption::KeepExisting)
std::shared_ptr< LoadInfo > loadInfo(const Path &path) const
void addExternalItemInfo(const DomItem &newExtItem, const Callback &loadCallback, const Callback &endCallback)
void addDependenciesToLoad(const Path &path)
void setResourceFiles(const QStringList &v)
std::shared_ptr< ModuleIndex > moduleIndexWithUri(const DomItem &self, const QString &uri, int majorVersion, EnvLookup lookup, Changeable changeable, const ErrorHandler &errorHandler=nullptr)
Path canonicalPath() const override
std::shared_ptr< ExternalItemInfoBase > qmlDirWithPath(const DomItem &self, const QString &path, EnvLookup options=EnvLookup::Normal) const
void addJsFile(const std::shared_ptr< JsFile > &file, AddOption option=AddOption::KeepExisting)
DomItem field(const DomItem &self, QStringView name) const final override
void removePath(const QString &path)
bool commitToBase(const DomItem &self, const std::shared_ptr< DomEnvironment > &validEnv=nullptr)
QSet< QString > qmlFilePaths(const DomItem &self, EnvLookup lookup=EnvLookup::Normal) const
DomEnvironment(const std::shared_ptr< DomEnvironment > &parent, const QStringList &loadPaths, Options options=Option::SingleThreaded, DomCreationOption domCreationOption=Default)
std::shared_ptr< ExternalItemInfo< QmlDirectory > > qmlDirectoryWithPath(const DomItem &self, const QString &path, EnvLookup options=EnvLookup::Normal) const
std::shared_ptr< ExternalItemInfo< GlobalScope > > globalScopeWithName(const DomItem &self, const QString &name, EnvLookup lookup=EnvLookup::Normal) const
QSet< QString > qmlDirPaths(const DomItem &self, EnvLookup options=EnvLookup::Normal) const
std::shared_ptr< ExternalItemInfo< GlobalScope > > ensureGlobalScopeWithName(const DomItem &self, const QString &name, EnvLookup lookup=EnvLookup::Normal)
static ErrorGroups myErrors()
QSet< int > moduleIndexMajorVersions(const DomItem &self, const QString &uri, EnvLookup lookup=EnvLookup::Normal) const
static QList< Import > defaultImplicitImports()
QSet< QString > qmldirFilePaths(const DomItem &self, EnvLookup options=EnvLookup::Normal) const
void setLoadPaths(const QStringList &v)
QSet< QString > globalScopeNames(const DomItem &self, EnvLookup lookup=EnvLookup::Normal) const
std::shared_ptr< DomEnvironment > base() const
std::shared_ptr< DomEnvironment > makeCopy(const DomItem &self) const
void loadBuiltins(const Callback &callback=nullptr, const ErrorHandler &h=nullptr)
std::shared_ptr< ModuleIndex > moduleIndexWithUri(const DomItem &self, const QString &uri, int majorVersion, EnvLookup lookup=EnvLookup::Normal) const
QSet< QString > qmlDirectoryPaths(const DomItem &self, EnvLookup options=EnvLookup::Normal) const
QList< Path > loadInfoPaths() const
void addQmltypesFile(const std::shared_ptr< QmltypesFile > &file, AddOption option=AddOption::KeepExisting)
std::shared_ptr< ExternalItemInfo< JsFile > > jsFileWithPath(const DomItem &self, const QString &path, EnvLookup options=EnvLookup::Normal) const
void addWorkForLoadInfo(const Path &elementCanonicalPath)
std::shared_ptr< OwningItem > doCopy(const DomItem &self) const override
std::shared_ptr< ExternalItemInfo< QmltypesFile > > qmltypesFileWithPath(const DomItem &self, const QString &path, EnvLookup options=EnvLookup::Normal) const
static constexpr DomType kindValue
void addLoadInfo(const DomItem &self, const std::shared_ptr< LoadInfo > &loadInfo)
DomEnvironment(const QStringList &loadPaths, Options options=Option::SingleThreaded, DomCreationOption domCreationOption=Default, const std::shared_ptr< DomUniverse > &universe=nullptr)
void loadFile(const FileToLoad &file, const Callback &callback, std::optional< DomType > fileType=std::optional< DomType >(), const ErrorHandler &h=nullptr)
void loadModuleDependency(const QString &uri, Version v, const Callback &callback=nullptr, const ErrorHandler &=nullptr)
std::shared_ptr< DomUniverse > universe() const
DomCreationOption domCreationOption() const
QList< Import > implicitImports() const
QHash< Path, std::shared_ptr< LoadInfo > > loadInfos() const
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override
std::shared_ptr< ExternalItemInfo< QmldirFile > > qmldirFileWithPath(const DomItem &self, const QString &path, EnvLookup options=EnvLookup::Normal) const
QSet< QString > qmltypesFilePaths(const DomItem &self, EnvLookup lookup=EnvLookup::Normal) const
DomType kind() const override
void addAllLoadedCallback(const DomItem &self, Callback c)
QStringList loadPaths() const
QSet< QString > jsFilePaths(const DomItem &self, EnvLookup lookup=EnvLookup::Normal) const
A value type that references any element of the Dom.
DomItem bindings() const
DomItem top() const
DomItem goUp(int) const
QDateTime createdAt() const
T const * as() const
bool resolve(const Path &path, Visitor visitor, const ErrorHandler &errorHandler, ResolveOptions options=ResolveOption::None, const Path &fullPath=Path(), QList< Path > *visitedRefs=nullptr) const
std::shared_ptr< OwningItem > owningItemPtr() const
DomItem operator[](const QString &component) const
QString toString() const
void writeOutPost(OutWriter &lw) const
bool visitTree(const Path &basePath, ChildrenVisitor visitor, VisitOptions options=VisitOption::Default, ChildrenVisitor openingVisitor=emptyChildrenVisitor, ChildrenVisitor closingVisitor=emptyChildrenVisitor, const FieldFilter &filter=FieldFilter::noFilter()) const
Visits recursively all the children of this item using the given visitors.
DomItem path(const Path &p, const ErrorHandler &h=&defaultErrorHandler) const
DomItem containingFile() const
DomItem filterUp(function_ref< bool(DomType k, const DomItem &)> filter, FilterUpOptions options) const
DomItem methods() const
QString internalKindStr() const
DomItem scope(FilterUpOptions options=FilterUpOptions::ReturnOuter) const
DomItem enumerations() const
DomItem subOwnerItem(const PathEls::PathComponent &c, Owner o) const
bool visitLookup1(const QString &symbolName, function_ref< bool(const DomItem &)> visitor, LookupOptions=LookupOption::Normal, const ErrorHandler &h=nullptr, QSet< quintptr > *visited=nullptr, QList< Path > *visitedRefs=nullptr) const
DomItem child(index_type i) const
DomItem key(QStringView name) const
std::shared_ptr< T > ownerAs() const
DomItem get(const ErrorHandler &h=nullptr, QList< Path > *visitedRefs=nullptr) const
static ErrorGroups myErrors()
DomItem operator[](const char16_t *component) const
bool visitUp(function_ref< bool(const DomItem &)> visitor) const
Let the visitor visit the Dom Tree hierarchy of this DomItem.
index_type indexes() const
bool hasAnnotations() const
bool iterateSubOwners(function_ref< bool(const DomItem &owner)> visitor) const
MutableDomItem makeCopy(CopyOption option=CopyOption::EnvConnected) const
DomItem refreshed() const
function< void(const Path &, const DomItem &, const DomItem &)> Callback
bool iterateErrors(function_ref< bool(const DomItem &, const ErrorMessage &)> visitor, bool iterate, Path inPath=Path()) const
DomItem pragmas() const
DomItem proceedToScope(const ErrorHandler &h=nullptr, QList< Path > *visitedRefs=nullptr) const
Dereference DomItems pointing to other DomItems.
QList< DomItem > values() const
DomItem universe() const
bool iterateDirectSubpaths(DirectVisitor v) const
DomItem container() const
void clearErrors(const ErrorGroups &groups=ErrorGroups({}), bool iterate=true) const
quintptr id() const
QList< QString > fields() const
DomItem globalScope() const
static DomItem fromCode(const QString &code, DomType fileType=DomType::QmlFile)
Creates a new document with the given code.
QString idStr() const
DomItem(const std::shared_ptr< DomEnvironment > &)
DomItem copy(const T &base) const
bool visitScopeChain(function_ref< bool(const DomItem &)> visitor, LookupOptions=LookupOption::Normal, const ErrorHandler &h=nullptr, QSet< quintptr > *visited=nullptr, QList< Path > *visitedRefs=nullptr) const
Let the visitor visit the QML scope hierarchy of this DomItem.
std::shared_ptr< DomTop > topPtr() const
QCborValue value() const
index_type size() const
QDateTime frozenAt() const
DomItem subListItem(const List &list) const
DomItem component(GoTo option=GoTo::Strict) const
bool visitLookup(const QString &symbolName, function_ref< bool(const DomItem &)> visitor, LookupType type=LookupType::Symbol, LookupOptions=LookupOption::Normal, const ErrorHandler &errorHandler=nullptr, QSet< quintptr > *visited=nullptr, QList< Path > *visitedRefs=nullptr) const
bool invokeVisitorOnField(DirectVisitor visitor, QStringView f, T &obj) const
void writeOutPre(OutWriter &lw) const
DomItem lookupFirst(const QString &symbolName, LookupType type=LookupType::Symbol, LookupOptions=LookupOption::Normal, const ErrorHandler &errorHandler=nullptr) const
bool visitIndexes(function_ref< bool(const DomItem &)> visitor) const
DomItem fileObject(GoTo option=GoTo::Strict) const
bool visitKeys(function_ref< bool(const QString &, const DomItem &)> visitor) const
bool visitStaticTypePrototypeChains(function_ref< bool(const DomItem &)> visitor, VisitPrototypesOptions options=VisitPrototypesOption::Normal, const ErrorHandler &h=nullptr, QSet< quintptr > *visited=nullptr, QList< Path > *visitedRefs=nullptr) const
DomItem::visitStaticTypePrototypeChains.
QQmlJSScope::ConstPtr semanticScope() const
bool invokeVisitorOnValue(DirectVisitor visitor, const PathEls::PathComponent &c, const T &value, ConstantData::Options options=ConstantData::Options::MapIsMap) const
bool writeOutForFile(OutWriter &ow, WriteOutChecks extraChecks) const
bool commitToBase(const std::shared_ptr< DomEnvironment > &validPtr=nullptr) const
DomItem ids() const
DomItem copy(const Owner &owner, const Path &ownerPath) const
FileWriter::Status dump(const QString &path, function_ref< bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)> filter=noFilter, int nBackups=2, int indent=0, FileWriter *fw=nullptr) const
bool visitSubSymbolsNamed(const QString &name, function_ref< bool(const DomItem &)> visitor) const
DomItem wrap(const PathEls::PathComponent &c, const T &obj) const
QList< DomItem > lookup(const QString &symbolName, LookupType type=LookupType::Symbol, LookupOptions=LookupOption::Normal, const ErrorHandler &errorHandler=nullptr) const
void dump(const Sink &, int indent=0, function_ref< bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)> filter=noFilter) const
friend QMLDOM_EXPORT bool operator==(const DomItem &, const DomItem &)
QSet< QString > propertyInfoNames() const
static ErrorGroups myResolveErrors()
bool visitDirectAccessibleScopes(function_ref< bool(const DomItem &)> visitor, VisitPrototypesOptions options=VisitPrototypesOption::Normal, const ErrorHandler &h=nullptr, QSet< quintptr > *visited=nullptr, QList< Path > *visitedRefs=nullptr) const
DomItem environment() const
bool isCanonicalChild(const DomItem &child) const
index_type length() const
DomItem operator[](QStringView component) const
DomItem rootQmlObject(GoTo option=GoTo::Strict) const
DomItem subValueItem(const PathEls::PathComponent &c, const T &value, ConstantData::Options options=ConstantData::Options::MapIsMap) const
bool invokeVisitorOnLazyField(DirectVisitor visitor, QStringView f, F valueF, ConstantData::Options options=ConstantData::Options::MapIsMap) const
DomItem directParent() const
DomItem annotations() const
Path canonicalPath() const
QStringList sortedKeys() const
void addError(ErrorMessage &&msg) const
DomItem containingObject() const
DomItem containingScriptExpression() const
QList< DomItem > getAll(const ErrorHandler &h=nullptr, QList< Path > *visitedRefs=nullptr) const
bool visitPrototypeChain(function_ref< bool(const DomItem &)> visitor, VisitPrototypesOptions options=VisitPrototypesOption::Normal, const ErrorHandler &h=nullptr, QSet< quintptr > *visited=nullptr, QList< Path > *visitedRefs=nullptr) const
DomKind domKind() const
bool isContainer() const
DomItem index(index_type) const
DomItem subReferencesItem(const PathEls::PathComponent &c, const QList< Path > &paths) const
DomItem subMapItem(const Map &map) const
bool invokeVisitorOnReference(DirectVisitor visitor, QStringView f, const Path &referencedObject) const
bool visitLocalSymbolsNamed(const QString &name, function_ref< bool(const DomItem &)> visitor) const
bool isExternalItem() const
DomItem subReferenceItem(const PathEls::PathComponent &c, const Path &referencedObject) const
void dumpPtr(const Sink &sink) const
auto visitEl(F f) const
InternalKind internalKind() const
DomItem path(const QString &p, const ErrorHandler &h=&defaultErrorHandler) const
bool isOwningItem() const
DomItem owner() const
The owner of an element, for an qmlObject this is the containing qml file.
ErrorHandler errorHandler() const
DomItem operator[](const Path &path) const
static DomItem empty
DomItem subDataItem(const PathEls::PathComponent &c, const T &value, ConstantData::Options options=ConstantData::Options::MapIsMap) const
QQmlJSScope::ConstPtr nearestSemanticScope() const
QString canonicalFilePath() const
void writeOut(OutWriter &lw) const
bool writeOut(const QString &path, int nBackups=2, const LineWriterOptions &opt=LineWriterOptions(), FileWriter *fw=nullptr, WriteOutChecks extraChecks=WriteOutCheck::Default) const
Path pathFromOwner() const
DomItem qmlObject(GoTo option=GoTo::Strict, FilterUpOptions options=FilterUpOptions::ReturnOuter) const
Returns the QmlObject that this belongs to.
DomItem subScriptElementWrapperItem(const ScriptElementVariant &obj) const
DomItem path(QStringView p, const ErrorHandler &h=&defaultErrorHandler) const
DomItem copy(const Owner &owner, const Path &ownerPath, const T &base) const
DomItem key(const QString &name) const
PropertyInfo propertyInfoWithName(const QString &name) const
QSet< QString > keys() const
QString name() const
DomItem children() const
DomItem field(QStringView name) const
DomItem propertyDefs() const
bool invokeVisitorOnReferences(DirectVisitor visitor, QStringView f, const QList< Path > &paths) const
DomItem goToFile(const QString &filePath) const
QDateTime lastDataUpdateAt() const
DomItem(const std::shared_ptr< DomUniverse > &)
static ErrorGroup domErrorGroup
DomItem propertyInfos() const
Path canonicalPath(const DomItem &) const override
QQml::Dom::DomTop::loadFile.
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override
QMap< QString, OwnerT > extraOwningItems() const
virtual Path canonicalPath() const =0
DomItem containingObject(const DomItem &) const override
void setExtraOwningItem(const QString &fieldName, const std::shared_ptr< T > &item)
QSet< QString > globalScopeNames() const
static DomItem create(const QString &universeName)
std::shared_ptr< ExternalItemPair< GlobalScope > > ensureGlobalScopeWithName(const QString &name)
std::shared_ptr< ExternalItemPair< JsFile > > jsFileWithPath(const QString &path) const
static ErrorGroups myErrors()
QSet< QString > qmltypesFilePaths() const
std::shared_ptr< OwningItem > doCopy(const DomItem &self) const override
static std::shared_ptr< DomUniverse > guaranteeUniverse(const std::shared_ptr< DomUniverse > &univ)
std::shared_ptr< ExternalItemPair< QmldirFile > > qmldirFileWithPath(const QString &path) const
void removePath(const QString &dir)
DomUniverse(const QString &universeName)
DomUniverse(const DomUniverse &)=delete
std::shared_ptr< ExternalItemPair< GlobalScope > > globalScopeWithName(const QString &name) const
std::shared_ptr< ExternalItemPair< QmlFile > > qmlFileWithPath(const QString &path) const
QSet< QString > qmlDirectoryPaths() const
LoadResult loadFile(const FileToLoad &file, DomType fileType, DomCreationOption creationOption={})
QSet< QString > jsFilePaths() const
std::shared_ptr< ExternalItemPair< QmltypesFile > > qmltypesFileWithPath(const QString &path) const
QSet< QString > qmldirFilePaths() const
std::shared_ptr< ExternalItemPair< QmlDirectory > > qmlDirectoryWithPath(const QString &path) const
DomType kind() const override
static constexpr DomType kindValue
Path canonicalPath() const override
std::shared_ptr< DomUniverse > makeCopy(const DomItem &self) const
QSet< QString > qmlFilePaths() const
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override
Helper class to accept eithe a string or a dumper (a function that writes to a sink).
void operator()(const Sink &s) const
void dump(const DomItem &, const Sink &s, int indent, function_ref< bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)> filter) const override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override
static constexpr DomType kindValue
Path pathFromOwner() const override
Path canonicalPath(const DomItem &self) const override
const Empty & operator*() const
const Empty * operator->() const
DomType kind() const override
DomItem containingObject(const DomItem &self) const override
quintptr id() const override
const QList< QmlObject > & annotations() const &
const QList< EnumItem > & values() const &
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
void setAlias(const QString &aliasName)
void setAnnotations(const QList< QmlObject > &annotations)
EnumDecl(const QString &name=QString(), const QList< EnumItem > &values=QList< EnumItem >(), const Path &pathFromOwner=Path())
void writeOut(const DomItem &self, OutWriter &lw) const override
void updatePathFromOwner(const Path &newP) override
void setName(const QString &name)
Path addAnnotation(const QmlObject &child, QmlObject **cPtr=nullptr)
Path addValue(const EnumItem &value)
static constexpr DomType kindValue
void setValues(const QList< EnumItem > &values)
DomType kind() const override
EnumItem(const QString &name=QString(), int value=0, ValueKind valueKind=ValueKind::ImplicitValue)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
const RegionComments & comments() const
RegionComments & comments()
void writeOut(const DomItem &self, OutWriter &lw) const
static constexpr DomType kindValue
convenience macro creating a new ErrorGroup and registering its groupId as translatable string
QLatin1String groupId() const
void dumpId(const Sink &sink) const
Represents a set of tags grouping a set of related error messages.
ErrorMessage debug(const Dumper &message) const
ErrorMessage error(const QString &message) const
ErrorMessage errorMessage(const DiagnosticMessage &msg, const Path &element=Path(), const QString &canonicalFilePath=QString()) const
ErrorMessage warning(const Dumper &message) const
static int cmp(const ErrorGroups &g1, const ErrorGroups &g2)
ErrorMessage debug(const QString &message) const
void dumpId(const Sink &sink) const
ErrorMessage info(const QString &message) const
ErrorMessage warning(const QString &message) const
ErrorMessage errorMessage(const Dumper &msg, ErrorLevel level, const Path &element=Path(), const QString &canonicalFilePath=QString(), SourceLocation location=SourceLocation()) const
ErrorMessage info(const Dumper &message) const
void fatal(const Dumper &msg, const Path &element=Path(), QStringView canonicalFilePath=u"", SourceLocation location=SourceLocation()) const
ErrorMessage error(const Dumper &message) const
Represents an error message connected to the dom.
ErrorMessage & withPath(const Path &)
ErrorMessage & withErrorId(QLatin1String errorId)
ErrorMessage(const ErrorGroups &errorGroups, const DiagnosticMessage &msg, const Path &path=Path(), const QString &file=QString(), QLatin1String errorId=QLatin1String(""))
static QLatin1String msg(QLatin1String errorId, ErrorMessage &&err)
ErrorMessage & withLocation(SourceLocation)
ErrorMessage handle(const ErrorHandler &errorHandler=nullptr)
static QLatin1String msg(const char *errorId, ErrorMessage &&err)
ErrorMessage & withFile(const QString &)
ErrorMessage & withItem(const DomItem &)
static ErrorMessage load(const char *errorId)
static ErrorMessage load(QLatin1String errorId, T... args)
ErrorMessage(const QString &message, const ErrorGroups &errorGroups, Level level=Level::Warning, const Path &path=Path(), const QString &file=QString(), SourceLocation location=SourceLocation(), QLatin1String errorId=QLatin1String(""))
void dump(const Sink &s) const
ErrorMessage & withFile(QStringView)
static ErrorMessage load(QLatin1String errorId)
friend int compare(const ErrorMessage &msg1, const ErrorMessage &msg2)
static void visitRegisteredMessages(function_ref< bool(const ErrorMessage &)> visitor)
static Export fromString(const Path &source, QStringView exp, const Path &typePath, const ErrorHandler &h)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
QString canonicalFilePath(const DomItem &) const final override
ExternalItemInfoBase(const ExternalItemInfoBase &o)=default
void setCurrentExposedAt(QDateTime d)
std::shared_ptr< ExternalItemInfoBase > makeCopy(const DomItem &self) const
DomType kind() const final override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const final override
int lastValidRevision(const DomItem &self) const
ExternalItemInfoBase(const Path &canonicalPath, const QDateTime &currentExposedAt=QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC), int derivedFrom=0, const QDateTime &lastDataUpdateAt=QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC))
QStringList logicalFilePaths() const
int lastRevision(const DomItem &self) const
virtual std::shared_ptr< ExternalOwningItem > currentItem() const =0
DomItem field(const DomItem &self, QStringView name) const final override
Path canonicalPath(const DomItem &) const final override
int currentRevision(const DomItem &self) const
static constexpr DomType kindValue
void refreshedDataAt(QDateTime tNew) final override
virtual DomItem currentItem(const DomItem &) const =0
void ensureLogicalFilePath(const QString &path)
QDateTime lastDataUpdateAt() const final override
std::shared_ptr< OwningItem > doCopy(const DomItem &) const override
static constexpr DomType kindValue
ExternalItemInfo(const std::shared_ptr< T > &current=std::shared_ptr< T >(), const QDateTime &currentExposedAt=QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC), int derivedFrom=0, const QDateTime &lastDataUpdateAt=QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC))
std::shared_ptr< T > current
ExternalItemInfo(const QString &canonicalPath)
std::shared_ptr< ExternalItemInfo > makeCopy(const DomItem &self) const
DomItem currentItem(const DomItem &self) const override
ExternalItemInfo(const ExternalItemInfo &o)
std::shared_ptr< ExternalOwningItem > currentItem() const override
ExternalItemPairBase(const ExternalItemPairBase &o)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const final override
DomType kind() const final override
QString canonicalFilePath(const DomItem &) const final override
void refreshedDataAt(QDateTime tNew) final override
Path canonicalPath(const DomItem &self) const final override
virtual DomItem validItem(const DomItem &self) const =0
ExternalItemPairBase(const QDateTime &validExposedAt=QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC), const QDateTime &currentExposedAt=QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC), int derivedFrom=0, const QDateTime &lastDataUpdateAt=QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC))
QDateTime lastDataUpdateAt() const final override
std::shared_ptr< ExternalItemPairBase > makeCopy(const DomItem &self) const
virtual std::shared_ptr< ExternalOwningItem > currentItem() const =0
virtual std::shared_ptr< ExternalOwningItem > validItem() const =0
virtual DomItem currentItem(const DomItem &self) const =0
DomItem field(const DomItem &self, QStringView name) const final override
static constexpr DomType kindValue
std::shared_ptr< T > valid
static constexpr DomType kindValue
std::shared_ptr< T > current
std::shared_ptr< OwningItem > doCopy(const DomItem &) const override
std::shared_ptr< ExternalOwningItem > validItem() const override
DomItem validItem(const DomItem &self) const override
DomItem currentItem(const DomItem &self) const override
ExternalItemPair(const ExternalItemPair &o)
ExternalItemPair(const std::shared_ptr< T > &valid={}, const std::shared_ptr< T > &current={}, const QDateTime &validExposedAt=QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC), const QDateTime &currentExposedAt=QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC), int derivedFrom=0, const QDateTime &lastDataUpdateAt=QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC))
std::shared_ptr< ExternalOwningItem > currentItem() const override
std::shared_ptr< ExternalItemPair > makeCopy(const DomItem &self) const
static FieldFilter noLocationFilter()
const QMultiMap< QString, QString > & fieldFilterAdd() const
bool operator()(const DomItem &, const Path &, const DomItem &) const
bool addFilter(const QString &f)
bool operator()(const DomItem &, const PathEls::PathComponent &c, const DomItem &) const
static FieldFilter compareNoCommentsFilter()
static FieldFilter defaultFilter()
static FieldFilter compareFilter()
static FieldFilter noFilter()
FieldFilter(const QMultiMap< QString, QString > &fieldFilterAdd={}, const QMultiMap< QString, QString > &fieldFilterRemove={})
QMultiMap< QString, QString > fieldFilterRemove() const
Represents a Node of FileLocations tree.
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
std::shared_ptr< OwningItem > doCopy(const DomItem &) const override
Node::Ptr makeCopy(const DomItem &self) const
Path canonicalPath(const DomItem &self) const override
static Ptr instantiate(const Ptr &parent=nullptr, const Path &p=Path())
QString logicalPath() const
QString canonicalPath() const
std::shared_ptr< DomEnvironment > environment() const
void setCanonicalPath(const QString &canonicalPath)
void setLogicalPath(const QString &logicalPath)
std::optional< InMemoryContents > content() const
static FileToLoad fromFileSystem(const std::weak_ptr< DomEnvironment > &environment, const QString &canonicalPath)
static FileToLoad fromMemory(const std::weak_ptr< DomEnvironment > &environment, const QString &path, const QString &data)
FileToLoad(const std::weak_ptr< DomEnvironment > &environment, const QString &canonicalPath, const QString &logicalPath, const std::optional< InMemoryContents > &content)
Status write(const QString &targetFile, function_ref< bool(QTextStream &)> write, int nBk=2)
GlobalComponent(const Path &pathFromOwner=Path())
DomType kind() const override
static constexpr DomType kindValue
Path addAnnotation(const Path &selfPathFromOwner, const QmlObject &ann, QmlObject **aPtr=nullptr)
RegionComments comments
std::shared_ptr< ScriptExpression > value
static constexpr DomType kindValue
Id(const QString &idName=QString(), const Path &referredObject=Path())
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const
void updatePathFromOwner(const Path &pathFromOwner)
QList< QmlObject > annotations
const QList< Path > & importSourcePaths() const &
const QMap< QString, ImportScope > & subImports() const &
QList< DomItem > importedItemsWithName(const DomItem &self, const QString &name) const
QList< Export > importedExportsWithName(const DomItem &self, const QString &name) const
QSet< QString > importedNames(const DomItem &self) const
void addImport(const QStringList &p, const Path &targetExports)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
QList< Path > allSources(const DomItem &self) const
Import(const QmlUri &uri=QmlUri(), Version version=Version(), const QString &importId=QString())
Import baseImport() const
friend bool operator==(const Import &i1, const Import &i2)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const
static QRegularExpression importRe()
void writeOut(const DomItem &self, OutWriter &ow) const
static Import fromFileString(const QString &importStr, const QString &importId=QString(), const ErrorHandler &handler=nullptr)
friend bool operator!=(const Import &i1, const Import &i2)
static Import fromUriString(const QString &importStr, Version v=Version(), const QString &importId=QString(), const ErrorHandler &handler=nullptr)
IndentInfo(QStringView line, int tabSize, int initialColumn=0)
JsResource(const Path &pathFromOwner=Path())
DomType kind() const override
bool iterateDirectSubpaths(const DomItem &, DirectVisitor) const override
static constexpr DomType kindValue
const QString & currentLine() const
LineWriter & write(QStringView v, TextAddType tType=TextAddType::Normal)
LineWriter & ensureSemicolon(TextAddType t=TextAddType::Extra)
void handleTrailingSpace(LineWriterOptions::TrailingSpace s)
LineWriter & ensureNewline(int nNewlines=1, TextAddType t=TextAddType::Extra)
QMap< int, std::function< bool(LineWriter &, TextAddType)> > m_textAddCallbacks
LineWriter & ensureSpace(TextAddType t=TextAddType::Extra)
const LineWriterOptions & options() const
void eof(bool ensureNewline=true)
void addInnerSink(const SinkF &s)
std::function< void(QStringView)> sink()
int addNewlinesAutospacerCallback(int nLines)
virtual void reindentAndSplit(const QString &eol, bool eof=false)
void commitLine(const QString &eol, TextAddType t=TextAddType::Normal, int untilChar=-1)
SourceLocation currentSourceLocation() const
LineWriter & ensureSpace(QStringView space, TextAddType t=TextAddType::Extra)
SourceLocation committedLocation() const
void setLineIndent(int indentAmount)
int addTextAddCallback(std::function< bool(LineWriter &, TextAddType)> callback)
void textAddCallback(TextAddType t)
LineWriter(const SinkF &innerSink, const QString &fileName, const LineWriterOptions &options=LineWriterOptions(), int lineNr=0, int columnNr=0, int utf16Offset=0, const QString &currentLine=QString())
quintptr id() const override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor v) const override
void writeOut(const DomItem &self, OutWriter &ow, bool compact) const
static constexpr DomType kindValue
index_type indexes(const DomItem &) const override
virtual void copyTo(ListPBase *) const
virtual void moveTo(ListPBase *) const
void writeOut(const DomItem &self, OutWriter &ow) const override
DomType kind() const override
QList< const void * > m_pList
ListPBase(const Path &pathFromOwner, const QList< const void * > &pList, const QString &elType)
void moveTo(ListPBase *t) const override
ListPT(const Path &pathFromOwner, const QList< T * > &pList, const QString &elType=QString(), ListOptions options=ListOptions::Normal)
DomItem index(const DomItem &self, index_type index) const override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor v) const override
void copyTo(ListPBase *t) const override
static constexpr DomType kindValue
static constexpr DomType kindValue
ListPBase & operator*()
ListPBase * operator->()
const ListPBase * operator->() const
ListP(const Path &pathFromOwner, const QList< T * > &pList, const QString &elType=QString(), ListOptions options=ListOptions::Normal)
const ListPBase & operator*() const
void writeOut(const DomItem &self, OutWriter &ow, bool compact) const
std::function< bool(const DomItem &, function_ref< bool(index_type, function_ref< DomItem()>)>)> IteratorFunction
List(const Path &pathFromOwner, const LookupFunction &lookup, const Length &length, const IteratorFunction &iterator, const QString &elType)
DomType kind() const override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override
const List & operator*() const
static List fromQList(const Path &pathFromOwner, const QList< T > &list, const std::function< DomItem(const DomItem &, const PathEls::PathComponent &, const T &)> &elWrapper, ListOptions options=ListOptions::Normal)
static List fromQListRef(const Path &pathFromOwner, const QList< T > &list, const std::function< DomItem(const DomItem &, const PathEls::PathComponent &, const T &)> &elWrapper, ListOptions options=ListOptions::Normal)
void dump(const DomItem &, const Sink &s, int indent, function_ref< bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)>) const override
std::function< DomItem(const DomItem &, index_type)> LookupFunction
void writeOut(const DomItem &self, OutWriter &ow) const override
quintptr id() const override
static constexpr DomType kindValue
const List * operator->() const
index_type indexes(const DomItem &self) const override
DomItem index(const DomItem &self, index_type index) const override
std::function< index_type(const DomItem &)> Length
void addEndCallback(const DomItem &self, std::function< void(Path, const DomItem &, const DomItem &)> callback)
void finishedLoadingDep(const DomItem &self, const Dependency &d)
Status status() const
void addError(const DomItem &self, ErrorMessage &&msg) override
DomType kind() const override
LoadInfo(const Path &elPath=Path(), Status status=Status::NotStarted, int nLoaded=0, int derivedFrom=0, const QDateTime &lastDataUpdateAt=QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC))
static constexpr DomType kindValue
void execEnd(const DomItem &self)
void advanceLoad(const DomItem &self)
std::shared_ptr< OwningItem > doCopy(const DomItem &self) const override
Path canonicalPath(const DomItem &self) const override
Path elementCanonicalPath() const
QList< Dependency > toDo() const
std::shared_ptr< LoadInfo > makeCopy(const DomItem &self) const
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override
LoadInfo(const LoadInfo &o)
QList< Dependency > inProgress() const
std::function< DomItem(const DomItem &, QString)> LookupFunction
static Map fromMultiMapRef(const Path &pathFromOwner, const QMultiMap< QString, T > &mmap)
const Map * operator->() const
static Map fromFileRegionMap(const Path &pathFromOwner, const QMap< FileLocationRegion, T > &map)
Map(const Path &pathFromOwner, const LookupFunction &lookup, const Keys &keys, const QString &targetType)
const Map & operator*() const
static Map fromMapRef(const Path &pathFromOwner, const QMap< QString, T > &mmap, const std::function< DomItem(const DomItem &, const PathEls::PathComponent &, const T &)> &elWrapper)
static Map fromMultiMap(const Path &pathFromOwner, const QMultiMap< QString, T > &mmap)
std::function< QSet< QString >(const DomItem &)> Keys
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override
QSet< QString > const keys(const DomItem &self) const override
quintptr id() const override
DomItem key(const DomItem &self, const QString &name) const override
static constexpr DomType kindValue
DomType kind() const override
std::shared_ptr< ScriptExpression > body
Path typePath(const DomItem &) const
QList< MethodParameter > parameters
std::shared_ptr< ScriptExpression > returnType
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
void writeOut(const DomItem &self, OutWriter &ow) const
void writePre(const DomItem &self, OutWriter &ow) const
QString signature(const DomItem &self) const
std::shared_ptr< ScriptExpression > defaultValue
void writeOut(const DomItem &self, OutWriter &ow) const
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
void writeOutSignal(const DomItem &self, OutWriter &ow) const
TypeAnnotationStyle typeAnnotationStyle
static constexpr DomType kindValue
std::shared_ptr< ScriptExpression > value
QMap< QString, QMap< QString, MockObject > > subMaps
friend bool operator==(const ModuleAutoExport &i1, const ModuleAutoExport &i2)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
friend bool operator!=(const ModuleAutoExport &i1, const ModuleAutoExport &i2)
static constexpr DomType kindValue
std::shared_ptr< T > ownerAs() const
MutableDomItem addChild(QmlObject child)
FileWriter::Status dump(const QString &path, function_ref< bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)> filter=noFilter, int nBackups=2, int indent=0, FileWriter *fw=nullptr)
bool writeOut(const QString &path, int nBackups=2, const LineWriterOptions &opt=LineWriterOptions(), FileWriter *fw=nullptr)
friend bool operator==(const MutableDomItem &o1, const MutableDomItem &o2)
MutableDomItem addPropertyDef(const PropertyDefinition &propertyDef, AddOption option=AddOption::Overwrite)
bool commitToBase(const std::shared_ptr< DomEnvironment > &validEnvPtr=nullptr)
QString canonicalFilePath() const
MutableDomItem fileObject(GoTo option=GoTo::Strict)
MutableDomItem operator[](const char16_t *component)
MutableDomItem key(QStringView name)
MutableDomItem operator[](const QString &component)
MutableDomItem addMethod(const MethodInfo &functionDef, AddOption option=AddOption::Overwrite)
MutableDomItem field(QStringView name)
void dump(const Sink &s, int indent=0, function_ref< bool(const DomItem &, const PathEls::PathComponent &, const DomItem &)> filter=noFilter)
void writeOut(OutWriter &lw)
MutableDomItem(const DomItem &owner, const Path &pathFromOwner)
MutableDomItem containingObject()
void addError(ErrorMessage &&msg)
MutableDomItem path(const QString &p)
std::shared_ptr< DomTop > topPtr()
MutableDomItem key(const QString &name)
QSet< QString > const keys()
MutableDomItem qmlObject(GoTo option=GoTo::Strict, FilterUpOptions fOptions=FilterUpOptions::ReturnOuter)
QList< QString > const fields()
MutableDomItem component(GoTo option=GoTo::Strict)
MutableDomItem path(const Path &p)
MutableDomItem makeCopy(CopyOption option=CopyOption::EnvConnected)
MutableDomItem operator[](const Path &path)
MutableDomItem index(index_type i)
MutableDomItem child(index_type i)
MutableDomItem(const DomItem &item)
std::shared_ptr< OwningItem > owningItemPtr()
friend bool operator!=(const MutableDomItem &o1, const MutableDomItem &o2)
MutableDomItem rootQmlObject(GoTo option=GoTo::Strict)
DomItem::CopyOption CopyOption
MutableDomItem operator[](QStringView component)
MutableDomItem path(QStringView p)
MutableDomItem addBinding(Binding binding, AddOption option=AddOption::Overwrite)
A DomItem that owns other DomItems and is managed through a shared pointer.
QDateTime createdAt() const
virtual bool iterateSubOwners(const DomItem &self, function_ref< bool(const DomItem &owner)> visitor)
virtual int revision() const
QBasicMutex * mutex() const
DomItem containingObject(const DomItem &self) const override
virtual std::shared_ptr< OwningItem > doCopy(const DomItem &self) const =0
std::shared_ptr< OwningItem > makeCopy(const DomItem &self) const
Path pathFromOwner() const override final
OwningItem(const OwningItem &&)=delete
bool iterateErrors(const DomItem &self, function_ref< bool(const DomItem &source, const ErrorMessage &msg)> visitor, const Path &inPath=Path())
virtual void addError(const DomItem &self, ErrorMessage &&msg)
QDateTime frozenAt() const
void addErrorLocal(ErrorMessage &&msg)
virtual QDateTime lastDataUpdateAt() const
void clearErrors(const ErrorGroups &groups=ErrorGroups({}))
Path canonicalPath(const DomItem &self) const override=0
QMultiMap< Path, ErrorMessage > localErrors() const
OwningItem & operator=(const OwningItem &&)=delete
OwningItem(int derivedFrom, const QDateTime &lastDataUpdateAt)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override
virtual bool frozen() const
virtual void refreshedDataAt(QDateTime tNew)
OwningItem(int derivedFrom=0)
OwningItem(const OwningItem &o)
void dump(const Sink &sink) const
bool checkName(QStringView s) const
index_type index(index_type defaultValue=-1) const
QStringView stringView() const
void dump(const Sink &sink, const QString &name, bool hasSquareBrackets) const
void dump(const Sink &sink) const
QStringView stringView() const
bool checkName(QStringView s) const
void dump(const Sink &sink) const
bool checkName(QStringView s) const
bool checkName(QStringView s) const
QStringView stringView() const
void dump(const Sink &sink) const
bool checkName(QStringView s) const
void dump(const Sink &sink) const
Filter(const std::function< bool(const DomItem &)> &f, QStringView filterDescription=u"<native code filter>")
QStringView stringView() const
std::function< bool(const DomItem &)> filterFunction
index_type index(index_type=-1) const
bool checkName(QStringView s) const
void dump(const Sink &sink) const
void dump(const Sink &sink) const
bool checkName(QStringView s) const
QStringView stringView() const
bool checkName(QStringView s) const
static int cmp(const PathComponent &p1, const PathComponent &p2)
PathComponent & operator=(PathComponent &&)=default
PathComponent & operator=(const PathComponent &)=default
index_type index(index_type defaultValue=-1) const
PathComponent(const PathComponent &)=default
PathComponent(PathComponent &&)=default
void dump(const Sink &sink) const
const Current * asCurrent() const
PathData(const QStringList &strData, const QList< PathComponent > &components)
std::shared_ptr< PathData > parent
QList< PathComponent > components
PathData(const QStringList &strData, const QList< PathComponent > &components, const std::shared_ptr< PathData > &parent)
void dump(const Sink &sink) const
QStringView stringView() const
bool checkName(QStringView s) const
bool operator==(const PathIterator &o) const
PathIterator operator++(int)
bool operator!=(const PathIterator &o) const
Path withCurrent(const QString &s) const
PathCurrent headCurrent() const
Path dropTail(int n=1) const
Path withEmpty() const
index_type headIndex(index_type defaultValue=-1) const
Path withIndex(index_type i) const
static int cmp(const Path &p1, const Path &p2)
static Path fromField(const QString &s)
static Path fromField(QStringView s=u"")
static Path fromRoot(QStringView s=u"")
Path expandBack() const
Expand a path suffix hidden by slicing.
Path withKey(QStringView name) const
Path withPath(const Path &toAdd, bool avoidToAddAsBase=false) const
Returns a copy of this with toAdd appended to it.
static Path fromString(QStringView s, const ErrorHandler &errorHandler=nullptr)
QString headName() const
Source split() const
Splits the path at the last field, root or current Component.
const Component * pointer
PathIterator begin() const
PathEls::Kind Kind
static Path fromRoot(PathRoot r)
static Path fromCurrent(const QString &s)
Path withComponent(const PathEls::PathComponent &c)
static ErrorGroups myErrors()
Path withAny() const
bool checkHeadName(QStringView name) const
Path operator[](int i) const
static Path fromCurrent(QStringView s=u"")
Path withKey(const QString &name) const
Path head() const
Path withCurrent(QStringView s=u"") const
Path mid(int offset, int length) const
Path expandFront() const
Expand a path prefix hidden by slicing.
Path withFilter(const std::function< bool(const DomItem &)> &, QStringView desc=u"<native code filter>") const
Path withCurrent(PathCurrent s) const
void dump(const Sink &sink) const
Path last() const
Kind headKind() const
Path withFilter(const std::function< bool(const DomItem &)> &, const QString &) const
Path mid(int offset) const
const Path & reference
static Path fromString(const QString &s, const ErrorHandler &errorHandler=nullptr)
QString toString() const
static Path fromKey(const QString &s)
PathIterator end() const
Path withField(QStringView name) const
std::function< bool(const DomItem &)> headFilter() const
Path dropFront(int n=1) const
Path withField(const QString &name) const
static Path fromRoot(const QString &s)
PathEls::PathComponent Component
static Path fromCurrent(PathCurrent c)
PathRoot headRoot() const
static Path fromKey(QStringView s=u"")
Path(const PathEls::PathComponent &c)
static Path fromIndex(index_type i)
std::forward_iterator_tag iterator_category
Pragma(const QString &pragmaName=QString(), const QStringList &pragmaValues={})
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
void writeOut(const DomItem &self, OutWriter &ow) const
static constexpr DomType kindValue
static constexpr DomType kindValue
ScriptElementVariant m_nameIdentifiers
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
void writeOut(const DomItem &self, OutWriter &lw) const
ScriptElementVariant nameIdentifiers() const
void setNameIdentifiers(const ScriptElementVariant &name)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
static constexpr DomType kindValue
QQmlDomAstCreatorBase(const MutableDomItem &qmlFile)
void endVisit(AST::UiProgram *) override
void throwRecursionDepthError() override
void endVisitHelper(AST::PatternElement *pe, const std::shared_ptr< ScriptElements::GenericScriptElement > &element)
void loadAnnotations(AST::UiObjectMember *el)
bool visit(AST::UiProgram *program) override
void enableLoadFileLazily(bool enable=true)
void enableScriptExpressions(bool enable=true)
virtual QQmlJSASTClassListToVisit void throwRecursionDepthError() override
QQmlDomAstCreatorWithQQmlJSScope(const QQmlJSScope::Ptr &current, MutableDomItem &qmlFile, QQmlJSLogger *logger, QQmlJSImporter *importer)
QQmlJSScope::ConstPtr semanticScope() const
void setIds(const QMultiMap< QString, Id > &ids)
void setNextComponentPath(const Path &p)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override
QList< DomItem > subComponents(const DomItem &self) const
const QMultiMap< QString, Id > & ids() const &
void updatePathFromOwner(const Path &newPath) override
void setNameIdentifiers(const ScriptElementVariant &name)
static constexpr DomType kindValue
void writeOut(const DomItem &self, OutWriter &) const override
void setSemanticScope(const QQmlJSScope::ConstPtr &scope)
QmlComponent(const QString &name=QString())
QList< QString > subComponentsNames(const DomItem &self) const
Path addId(const Id &id, AddOption option=AddOption::Overwrite, Id **idPtr=nullptr)
ScriptElementVariant nameIdentifiers() const
DomType kind() const override
QList< QString > fields(const DomItem &) const override
void setNameIdentifiers(const ScriptElementVariant &name)
Path addChild(const QmlObject &child, QmlObject **cPtr=nullptr)
MutableDomItem addBinding(MutableDomItem &self, const Binding &binding, AddOption option)
void setMethods(const QMultiMap< QString, MethodInfo > &functionDefs)
void writeOutSortedEnumerations(const QList< DomItem > &descs, OutWriter &ow) const
void writeOut(const DomItem &self, OutWriter &ow, const QString &onTarget) const
ScriptElementVariant nameIdentifiers() const
void setName(const QString &name)
QList< std::pair< SourceLocation, DomItem > > orderOfAttributes(const DomItem &self, const DomItem &component) const
bool iterateSubOwners(const DomItem &self, function_ref< bool(const DomItem &owner)> visitor) const
MutableDomItem addChild(MutableDomItem &self, const QmlObject &child)
void setAnnotations(const QList< QmlObject > &annotations)
const QMultiMap< QString, Binding > & bindings() const &
DomType kind() const override
void setNextScopePath(const Path &nextScopePath)
void updatePathFromOwner(const Path &newPath) override
void setChildren(const QList< QmlObject > &children)
Path addBinding(const Binding &binding, AddOption option, Binding **bPtr=nullptr)
static constexpr DomType kindValue
Path addAnnotation(const QmlObject &annotation, QmlObject **aPtr=nullptr)
LocallyResolvedAlias resolveAlias(const DomItem &self, std::shared_ptr< ScriptExpression > accessSequence) const
void writeOutId(const DomItem &self, OutWriter &ow) const
QList< QmlObject > children() const
LocallyResolvedAlias resolveAlias(const DomItem &self, const QStringList &accessSequence) const
const QList< Path > & prototypePaths() const &
void writeOutSortedPropertyDefinition(const DomItem &self, OutWriter &ow, QSet< QString > &mergedDefBinding, const QStringList &keys) const
Path addPropertyDef(const PropertyDefinition &propertyDef, AddOption option, PropertyDefinition **pDef=nullptr)
const QMultiMap< QString, MethodInfo > & methods() const &
MutableDomItem addPropertyDef(MutableDomItem &self, const PropertyDefinition &propertyDef, AddOption option)
DomItem field(const DomItem &self, QStringView name) const override
void setBindings(const QMultiMap< QString, Binding > &bindings)
QString localDefaultPropertyName() const
QString defaultPropertyName(const DomItem &self) const
void setPropertyDefs(const QMultiMap< QString, PropertyDefinition > &propertyDefs)
QmlObject(const Path &pathFromOwner=Path())
void writeOutSortedAttributes(const DomItem &self, OutWriter &ow, const DomItem &component) const
MutableDomItem addMethod(MutableDomItem &self, const MethodInfo &functionDef, AddOption option)
void writeOutAttributes(const DomItem &self, OutWriter &ow, const DomItem &component, const QString &code) const
void setIdStr(const QString &id)
QQmlJSScope::ConstPtr semanticScope() const
const QMultiMap< QString, PropertyDefinition > & propertyDefs() const &
void writeOut(const DomItem &self, OutWriter &lw) const override
Path addPrototypePath(const Path &prototypePath)
void setSemanticScope(const QQmlJSScope::ConstPtr &scope)
void setDefaultPropertyName(const QString &name)
void setPrototypePaths(const QList< Path > &prototypePaths)
QList< QmlObject > annotations() const
QList< QString > fields() const
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override
Path addMethod(const MethodInfo &functionDef, AddOption option, MethodInfo **mPtr=nullptr)
bool iterateBaseDirectSubpaths(const DomItem &self, DirectVisitor) const
static QmlUri fromString(const QString &importStr)
QString absoluteLocalPath(const QString &basePath=QString()) const
QString directoryString() const
static QmlUri fromUriString(const QString &importStr)
QString localPath() const
QString moduleUri() const
friend bool operator==(const QmlUri &i1, const QmlUri &i2)
static QmlUri fromDirectoryString(const QString &importStr)
friend bool operator!=(const QmlUri &i1, const QmlUri &i2)
void setInterfaceNames(const QStringList &interfaces)
void setMetaRevisions(const QList< int > &metaRevisions)
QQmlJSScope::AccessSemantics accessSemantics() const
void setFileName(const QString &fileName)
static constexpr DomType kindValue
QQmlJSScope::ConstPtr semanticScope() const
void setAccessSemantics(QQmlJSScope::AccessSemantics v)
void setSemanticScope(const QQmlJSScope::ConstPtr &scope)
bool iterateDirectSubpaths(const DomItem &, DirectVisitor) const override
void setExtensionTypeName(const QString &name)
void setElementTypeName(const QString &name)
const QList< int > & metaRevisions() const &
const QList< Export > & exports() const &
void setExports(const QList< Export > &exports)
void addExport(const Export &exportedEntry)
const QStringList & interfaceNames() const &
QmltypesComponent(const Path &pathFromOwner=Path())
DomType kind() const override
static bool addForPath(const DomItem &el, const Path &canonicalPath, const RefCacheEntry &entry, AddOption addOption=AddOption::KeepExisting)
QList< QString > fields(const DomItem &self) const override
quintptr id() const override
static constexpr DomType kindValue
const Reference & operator*() const
DomItem index(const DomItem &, index_type) const override
DomItem field(const DomItem &self, QStringView name) const override
DomItem get(const DomItem &self, const ErrorHandler &h=nullptr, QList< Path > *visitedRefs=nullptr) const
QList< DomItem > getAll(const DomItem &self, const ErrorHandler &h=nullptr, QList< Path > *visitedRefs=nullptr) const
index_type indexes(const DomItem &) const override
DomType kind() const override
QSet< QString > const keys(const DomItem &) const override
const Reference * operator->() const
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const override
Reference(const Path &referredObject=Path(), const Path &pathFromOwner=Path(), const SourceLocation &loc=SourceLocation())
DomItem key(const DomItem &, const QString &) const override
Keeps the comments associated with a DomItem.
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const
friend bool operator!=(const RegionComments &c1, const RegionComments &c2)
const QMap< FileLocationRegion, CommentedElement > & regionComments() const
friend bool operator==(const RegionComments &c1, const RegionComments &c2)
Path addComment(const Comment &comment, FileLocationRegion region)
static constexpr DomType kindValue
const DomBase & operator*() const
const DomBase * operator->() const
static constexpr DomType kindValue
ScriptElementVariant element() const
ScriptElementDomWrapper(const ScriptElementVariant &element)
Use this to contain any script element.
void visitConst(F &&visitor) const
std::optional< ScriptElementT > data()
ScriptElement::PointerType< ScriptElement > base() const
Returns a pointer to the virtual base for virtual method calls.
static ScriptElementVariant fromElement(const T &element)
void setData(const ScriptElementT &data)
void setLeft(const ScriptElementVariant &newLeft)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
void createFileLocations(const FileLocations::Tree &base) override
void setRight(const ScriptElementVariant &newRight)
void createFileLocations(const FileLocations::Tree &base) override
void setStatements(const ScriptList &statements)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
void setInitializer(const ScriptElementVariant &newInitializer)
void setExpression(const ScriptElementVariant &newExpression)
void setCondition(const ScriptElementVariant &newCondition)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
void createFileLocations(const FileLocations::Tree &base) override
void setDeclarations(const ScriptElementVariant &newDeclaration)
void setBody(const ScriptElementVariant &newBody)
void createFileLocations(const FileLocations::Tree &base) override
void insertValue(QStringView name, const QCborValue &v)
std::variant< ScriptElementVariant, ScriptList > VariantT
decltype(auto) insertChild(QStringView name, VariantT v)
ScriptElementVariant elementChild(const QQmlJS::Dom::FieldType &field)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
void setCondition(const ScriptElementVariant &condition)
void setConsequence(const ScriptElementVariant &consequence)
void setAlternative(const ScriptElementVariant &alternative)
void createFileLocations(const FileLocations::Tree &base) override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
void createFileLocations(const FileLocations::Tree &base) override
void setExpression(ScriptElementVariant expression)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
void setMainRegionLocation(const QQmlJS::SourceLocation &location)
ScriptElementBase(QQmlJS::SourceLocation combinedLocation=QQmlJS::SourceLocation{})
void addLocation(FileLocationRegion region, QQmlJS::SourceLocation location)
void createFileLocations(const FileLocations::Tree &base) override
QQmlJS::SourceLocation mainRegionLocation() const
All of the following overloads are only required for optimization purposes.
std::vector< std::pair< FileLocationRegion, QQmlJS::SourceLocation > > m_locations
ScriptElementBase(QQmlJS::SourceLocation first, QQmlJS::SourceLocation last)
void createFileLocations(const FileLocations::Tree &base) override
void replaceKindForGenericChildren(DomType oldType, DomType newType)
void append(const ScriptElementVariant &statement)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
const QList< ScriptElementVariant > & qList() const
void createFileLocations(const FileLocations::Tree &base) override
void setIdentifier(const ScriptElementVariant &identifier)
void setInitializer(const ScriptElementVariant &initializer)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
void createFileLocations(const FileLocations::Tree &base) override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
QStringView loc2Str(const SourceLocation &) const
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
DomType kind() const override
std::shared_ptr< AstComments > astComments() const
std::shared_ptr< QQmlJS::Engine > engine() const
ScriptExpression(const QString &code, ExpressionType expressionType)
static constexpr DomType kindValue
SourceLocation locationToLocal(const SourceLocation &x) const
std::shared_ptr< ScriptExpression > makeCopy(const DomItem &self) const
ScriptExpression(const ScriptExpression &e)
ExpressionType expressionType() const
void writeOut(const DomItem &self, OutWriter &lw) const override
SourceLocation globalLocation(const DomItem &self) const
ScriptExpression(QStringView code, const std::shared_ptr< QQmlJS::Engine > &engine, AST::Node *ast, const std::shared_ptr< AstComments > &comments, ExpressionType expressionType, const SourceLocation &localOffset=SourceLocation())
void setScriptElement(const ScriptElementVariant &p)
std::shared_ptr< OwningItem > doCopy(const DomItem &) const override
ScriptElementVariant scriptElement()
void astDumper(const Sink &s, AstDumperOptions options) const
SourceLocation localOffset() const
Path canonicalPath(const DomItem &self) const override
static constexpr DomType kindValue
bool iterateDirectSubpaths(const DomItem &, DirectVisitor) const override
SimpleObjectWrapBase(const Path &pathFromOwner, const QVariant &value, quintptr idValue, DomType kind=kindValue, SimpleWrapOptions options=SimpleWrapOption::None)
virtual void moveTo(SimpleObjectWrapBase *) const
DomKind domKind() const final override
virtual void copyTo(SimpleObjectWrapBase *) const
DomType kind() const final override
quintptr id() const final override
SimpleObjectWrapT(const Path &pathFromOwner, const QVariant &v, quintptr idValue, SimpleWrapOptions o)
void moveTo(SimpleObjectWrapBase *target) const override
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor visitor) const override
static constexpr DomType kindValue
void writeOut(const DomItem &self, OutWriter &lw) const override
void copyTo(SimpleObjectWrapBase *target) const override
const SimpleObjectWrapBase & operator*() const
SimpleObjectWrapBase & operator*()
static SimpleObjectWrap fromObjectRef(const Path &pathFromOwner, T &value)
const SimpleObjectWrapBase * operator->() const
static constexpr DomType kindValue
SimpleObjectWrapBase * operator->()
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const
QString majorString() const
static constexpr DomType kindValue
Version(qint32 majorVersion=Undefined, qint32 minorVersion=Undefined)
QString minorString() const
int compare(Version o) const
static Version fromString(QStringView v)
QString stringValue() const
static constexpr qint32 Undefined
static constexpr qint32 Latest
QString majorSymbolicString() const
A vistor that visits all the AST:Node.
bool visit(AST::UiPublicMember *el) override
void throwRecursionDepthError() override
static QSet< int > uiKinds()
returns a set with all Ui* Nodes (i.e.
void endVisit(AST::UiImport *el) override
Provides entities to maintain mappings between elements and their location in a file.
void addRegion(const Tree &fLoc, FileLocationRegion region, SourceLocation loc)
Tree createTree(const Path &basePath)
QString canonicalPathForTesting(const Tree &base)
QQmlJS::SourceLocation region(const Tree &fLoc, FileLocationRegion region)
bool visitTree(const Tree &base, function_ref< bool(const Path &, const Tree &)> visitor, const Path &basePath=Path())
Tree ensure(const Tree &base, const Path &basePath)
Tree find(const Tree &self, const Path &p)
bool operator>=(const PathComponent &lhs, const PathComponent &rhs)
bool operator<=(const PathComponent &lhs, const PathComponent &rhs)
bool operator==(const PathComponent &lhs, const PathComponent &rhs)
bool operator!=(const PathComponent &lhs, const PathComponent &rhs)
bool operator>(const PathComponent &lhs, const PathComponent &rhs)
bool operator<(const PathComponent &lhs, const PathComponent &rhs)
Path lookupTypePath(const QString &name)
Path loadInfoPath(const Path &el)
Path moduleScopePath(const QString &uri, const ErrorHandler &errorHandler=nullptr)
Path qmltypesFilePath(const QString &path)
Path jsFilePath(const QString &path)
Path lookupCppTypePath(const QString &name)
Path qmlFileInfoPath(const QString &canonicalFilePath)
Path moduleIndexPath(const QString &uri, int majorVersion, const ErrorHandler &errorHandler=nullptr)
Path qmlFilePath(const QString &canonicalFilePath)
Path globalScopePath(const QString &name)
Path moduleScopePath(const QString &uri, const QString &version, const ErrorHandler &errorHandler=nullptr)
Path lookupSymbolPath(const QString &name)
Path jsFileInfoPath(const QString &path)
Path lookupPropertyPath(const QString &name)
Path moduleScopePath(const QString &uri, Version version, const ErrorHandler &errorHandler=nullptr)
Path qmlDirPath(const QString &path)
Path qmlDirectoryPath(const QString &path)
Path qmldirFilePath(const QString &path)
Path qmlDirectoryInfoPath(const QString &path)
Path qmltypesFileInfoPath(const QString &path)
Path qmldirFileInfoPath(const QString &path)
Path qmlDirInfoPath(const QString &path)
Path qmlFileObjectPath(const QString &canonicalFilePath)
Path globalScopeInfoPath(const QString &name)
bool operator>(Version v1, Version v2)
QMLDOM_EXPORT bool domTypeIsContainer(DomType k)
bool operator==(Version v1, Version v2)
QMLDOM_EXPORT void dumperToQDebug(const Dumper &dumper, QDebug debug)
void devNull(QStringView)
QMLDOM_EXPORT void errorToQDebug(const ErrorMessage &)
writes an ErrorMessage to QDebug
constexpr bool domTypeIsOwningItem(DomType)
Path appendUpdatableElementInQList(const Path &listPathFromOwner, QList< T > &list, const T &value, T **vPtr=nullptr)
bool operator<=(const ErrorMessage &e1, const ErrorMessage &e2)
QMLDOM_EXPORT void dumpErrorLevel(const Sink &s, ErrorLevel level)
Dumps a string describing the given error level (ErrorLevel::Error -> Error,...).
constexpr bool domTypeIsValueWrap(DomType k)
void sinkInt(const Sink &s, T i)
QMLDOM_EXPORT void silentError(const ErrorMessage &)
Error handler that ignores all errors (excluding fatal ones).
Path insertUpdatableElementInMultiMap(const Path &mapPathFromOwner, QMultiMap< K, T > &mmap, K key, const T &value, AddOption option=AddOption::KeepExisting, T **valuePtr=nullptr)
size_t qHash(const CommentAnchor &key, size_t seed=0) noexcept
bool noFilter(const DomItem &, const PathEls::PathComponent &, const DomItem &)
QMLDOM_EXPORT void dumperToQDebug(const Dumper &dumper, ErrorLevel level=ErrorLevel::Debug)
writes the dumper to the QDebug object corrsponding to the given error level
QMLDOM_EXPORT void sinkNewline(const Sink &s, int indent=0)
sinks a neline and indents by the given amount
bool operator>=(const ErrorGroups &lhs, const ErrorGroups &rhs)
QMLDOM_EXPORT void setDefaultErrorHandler(const ErrorHandler &h)
Sets the default error handler.
QMLDOM_EXPORT ErrorLevel errorLevelFromQtMsgType(QtMsgType msgType)
QMLDOM_EXPORT QMap< DomKind, QString > domKindToStringMap()
size_t qHash(const Path &, size_t)
QMLDOM_EXPORT QDebug operator<<(QDebug debug, const DomItem &c)
std::shared_ptr< ExternalOwningItem > getFileItemOwner(const DomItem &fileItem)
DomKind kind2domKind(DomType k)
bool operator==(const ErrorGroups &lhs, const ErrorGroups &rhs)
static DomItem keyMultiMapHelper(const DomItem &self, const QString &key, const QMultiMap< QString, T > &mmap)
bool operator!=(const DomItem &o1, const DomItem &o2)
QMLDOM_EXPORT bool domTypeIsExternalItem(DomType k)
constexpr bool domTypeIsUnattachedOwningItem(DomType)
QMLDOM_EXPORT QMap< DomType, QString > domTypeToStringMap()
QMLDOM_EXPORT bool domTypeIsScope(DomType k)
bool operator!=(const ErrorMessage &e1, const ErrorMessage &e2)
bool operator<=(const Path &lhs, const Path &rhs)
bool operator==(const ErrorMessage &e1, const ErrorMessage &e2)
QMLDOM_EXPORT QDebug operator<<(QDebug debug, const MutableDomItem &c)
std::disjunction< std::is_same< U, V >... > IsInList
bool operator>(const Path &lhs, const Path &rhs)
bool operator<(const ErrorMessage &e1, const ErrorMessage &e2)
QMLDOM_EXPORT QString domTypeToString(DomType k)
auto writeOutWrap(const T &, const DomItem &, OutWriter &, rank< 0 >) -> void
constexpr bool domTypeIsScriptElement(DomType)
QMLDOM_EXPORT QString domKindToString(DomKind k)
bool operator>=(const ErrorMessage &e1, const ErrorMessage &e2)
constexpr bool domTypeIsDomElement(DomType)
void updatePathFromOwnerQList(QList< T > &list, const Path &newPath)
constexpr bool domTypeCanBeInline(DomType k)
bool operator<(Version v1, Version v2)
bool operator<=(Version v1, Version v2)
bool operator!=(const ErrorGroups &lhs, const ErrorGroups &rhs)
QMLDOM_EXPORT QDebug operator<<(QDebug d, const Dumper &dumper)
auto writeOutWrap(const T &t, const DomItem &self, OutWriter &lw) -> void
QDebug operator<<(QDebug debug, const Path &p)
bool operator>=(const Path &lhs, const Path &rhs)
auto writeOutWrap(const T &t, const DomItem &self, OutWriter &lw, rank< 1 >) -> decltype(t.writeOut(self, lw))
bool operator!=(Version v1, Version v2)
bool operator>=(Version v1, Version v2)
bool operator<=(const ErrorGroups &lhs, const ErrorGroups &rhs)
bool operator!=(const Path &lhs, const Path &rhs)
bool operator<(const Path &lhs, const Path &rhs)
std::variant< std::monostate, std::shared_ptr< ModuleIndex >, std::shared_ptr< MockOwner >, std::shared_ptr< ExternalItemInfoBase >, std::shared_ptr< ExternalItemPairBase >, std::shared_ptr< QmlDirectory >, std::shared_ptr< QmldirFile >, std::shared_ptr< JsFile >, std::shared_ptr< QmlFile >, std::shared_ptr< QmltypesFile >, std::shared_ptr< GlobalScope >, std::shared_ptr< ScriptExpression >, std::shared_ptr< AstComments >, std::shared_ptr< LoadInfo >, std::shared_ptr< FileLocations::Node >, std::shared_ptr< DomEnvironment >, std::shared_ptr< DomUniverse > > OwnerT
bool visitWithCustomListIteration(T *t, AST::Visitor *visitor)
std::function< void(const ErrorMessage &)> ErrorHandler
QMLDOM_EXPORT void sinkIndent(const Sink &s, int indent)
sinks the requested amount of spaces
bool operator>(const ErrorGroups &lhs, const ErrorGroups &rhs)
QMLDOM_EXPORT bool domTypeIsTopItem(DomType k)
QMLDOM_EXPORT void defaultErrorHandler(const ErrorMessage &)
Calls the default error handler (by default errorToQDebug).
std::variant< ConstantData, Empty, List, ListP, Map, Reference, ScriptElementDomWrapper, SimpleObjectWrap, const AstComments *, const FileLocations::Node *, const DomEnvironment *, const DomUniverse *, const EnumDecl *, const ExternalItemInfoBase *, const ExternalItemPairBase *, const GlobalComponent *, const GlobalScope *, const JsFile *, const JsResource *, const LoadInfo *, const MockObject *, const MockOwner *, const ModuleIndex *, const ModuleScope *, const QmlComponent *, const QmlDirectory *, const QmlFile *, const QmlObject *, const QmldirFile *, const QmltypesComponent *, const QmltypesFile *, const ScriptExpression * > ElementT
void updatePathFromOwnerMultiMap(QMultiMap< K, T > &mmap, const Path &newPath)
bool operator<(const ErrorGroups &lhs, const ErrorGroups &rhs)
constexpr bool domTypeIsObjWrap(DomType k)
QMLDOM_EXPORT void sinkEscaped(const Sink &sink, QStringView s, EscapeOptions options=EscapeOptions::OuterQuotes)
dumps a string as quoted string (escaping things like quotes or newlines)
bool operator==(const Path &lhs, const Path &rhs)
bool operator>(const ErrorMessage &e1, const ErrorMessage &e2)
bool emptyChildrenVisitor(Path, const DomItem &, bool)
QMLDOM_EXPORT QString dumperToString(const Dumper &writer)
Converts a dumper to a string.
static ErrorGroups importErrors
std::variant< std::monostate, std::shared_ptr< DomEnvironment >, std::shared_ptr< DomUniverse > > TopT
Combined button and popup list for selecting options.
QT_BEGIN_NAMESPACE Q_STATIC_LOGGING_CATEGORY(lcSynthesizedIterableAccess, "qt.iterable.synthesized", QtWarningMsg)
#define QMLDOM_EXPORT
#define Q_SCRIPTELEMENT_EXIT_IF(check)
#define Q_SCRIPTELEMENT_DISABLE()
#define NewErrorGroup(name)
QT_BEGIN_NAMESPACE QT_DECLARE_EXPORTED_QT_LOGGING_CATEGORY(writeOutLog, QMLDOM_EXPORT)
#define QMLDOM_FIELD(name)
#define QMLDOM_USTRING(s)
friend bool comparesEqual(const CommentAnchor &a, const CommentAnchor &b) noexcept
static CommentAnchor from(const SourceLocation &sl)
bool iterateDirectSubpaths(const DomItem &self, DirectVisitor) const
QMap< FileLocationRegion, SourceLocation > regions
A common base class for all the script elements.
void setSemanticScope(const QQmlJSScope::ConstPtr &scope)
virtual void createFileLocations(const std::shared_ptr< FileLocations::Node > &fileLocationOfOwner)=0
std::shared_ptr< T > PointerType
QQmlJSScope::ConstPtr semanticScope()
SubclassStorage & operator=(const SubclassStorage &o)
SubclassStorage(const SubclassStorage &&o)
SubclassStorage(const SubclassStorage &o)