summaryrefslogtreecommitdiffstats
path: root/src/qdoc/qdoc/src/qdoc/qmlvisitor.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/qdoc/qdoc/src/qdoc/qmlvisitor.h')
-rw-r--r--src/qdoc/qdoc/src/qdoc/qmlvisitor.h93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/qdoc/qdoc/src/qdoc/qmlvisitor.h b/src/qdoc/qdoc/src/qdoc/qmlvisitor.h
new file mode 100644
index 000000000..201dc0e61
--- /dev/null
+++ b/src/qdoc/qdoc/src/qdoc/qmlvisitor.h
@@ -0,0 +1,93 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef QMLVISITOR_H
+#define QMLVISITOR_H
+
+#include "node.h"
+#include "qmltypenode.h"
+
+#include <QtCore/qstring.h>
+
+#include <private/qqmljsastvisitor_p.h>
+#include <private/qqmljsengine_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class Aggregate;
+
+struct QmlPropArgs
+{
+ QString m_type {};
+ QString m_module {};
+ QString m_component {};
+ QString m_name;
+
+ void clear()
+ {
+ m_type.clear();
+ m_module.clear();
+ m_component.clear();
+ m_name.clear();
+ }
+};
+
+class QmlDocVisitor : public QQmlJS::AST::Visitor
+{
+public:
+ QmlDocVisitor(const QString &filePath, const QString &code, QQmlJS::Engine *engine,
+ const QSet<QString> &commands, const QSet<QString> &topics);
+ ~QmlDocVisitor() override = default;
+
+ bool visit(QQmlJS::AST::UiImport *import) override;
+ void endVisit(QQmlJS::AST::UiImport *definition) override;
+
+ bool visit(QQmlJS::AST::UiObjectDefinition *definition) override;
+ void endVisit(QQmlJS::AST::UiObjectDefinition *definition) override;
+
+ bool visit(QQmlJS::AST::UiPublicMember *member) override;
+ void endVisit(QQmlJS::AST::UiPublicMember *definition) override;
+
+ bool visit(QQmlJS::AST::UiObjectBinding *) override;
+ void endVisit(QQmlJS::AST::UiObjectBinding *) override;
+ void endVisit(QQmlJS::AST::UiArrayBinding *) override;
+ bool visit(QQmlJS::AST::UiArrayBinding *) override;
+
+ bool visit(QQmlJS::AST::IdentifierPropertyName *idproperty) override;
+
+ bool visit(QQmlJS::AST::FunctionDeclaration *) override;
+ void endVisit(QQmlJS::AST::FunctionDeclaration *) override;
+
+ bool visit(QQmlJS::AST::UiScriptBinding *) override;
+ void endVisit(QQmlJS::AST::UiScriptBinding *) override;
+
+ bool visit(QQmlJS::AST::UiQualifiedId *) override;
+ void endVisit(QQmlJS::AST::UiQualifiedId *) override;
+
+ void throwRecursionDepthError() final;
+ [[nodiscard]] bool hasError() const;
+
+private:
+ QString getFullyQualifiedId(QQmlJS::AST::UiQualifiedId *id);
+ [[nodiscard]] QQmlJS::SourceLocation precedingComment(quint32 offset) const;
+ Node *applyDocumentation(QQmlJS::SourceLocation location, Node *node);
+ void applyMetacommands(QQmlJS::SourceLocation location, Node *node, Doc &doc);
+ bool splitQmlPropertyArg(const Doc &doc, const QString &arg, QmlPropArgs &qpa);
+
+ QQmlJS::Engine *m_engine { nullptr };
+ quint32 m_lastEndOffset {};
+ quint32 m_nestingLevel {};
+ QString m_filePath {};
+ QString m_name {};
+ QString m_document {};
+ ImportList m_importList {};
+ QSet<QString> m_commands {};
+ QSet<QString> m_topics {};
+ QSet<quint32> m_usedComments {};
+ Aggregate *m_current { nullptr };
+ bool hasRecursionDepthError { false };
+};
+
+QT_END_NAMESPACE
+
+#endif