aboutsummaryrefslogtreecommitdiffstats
path: root/tools/qmllint/findunqualified.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/qmllint/findunqualified.h')
-rw-r--r--tools/qmllint/findunqualified.h87
1 files changed, 61 insertions, 26 deletions
diff --git a/tools/qmllint/findunqualified.h b/tools/qmllint/findunqualified.h
index 80413bd402..6668b53b08 100644
--- a/tools/qmllint/findunqualified.h
+++ b/tools/qmllint/findunqualified.h
@@ -29,32 +29,49 @@
#ifndef FINDUNQUALIFIED_H
#define FINDUNQUALIFIED_H
-#include "qmljstypedescriptionreader.h"
-#include "qcoloroutput_p.h"
-
-#include <private/qqmljsastvisitor_p.h>
-#include <private/qqmljsast_p.h>
-
-#include <QScopedPointer>
-
-class ScopeTree;
-enum class ScopeType;
-
-class FindUnqualifiedIDVisitor : public QQmlJS::AST::Visitor {
-
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+
+#include "typedescriptionreader.h"
+#include "scopetree.h"
+#include "qcoloroutput.h"
+
+#include <QtQml/private/qqmljsastvisitor_p.h>
+#include <QtQml/private/qqmljsast_p.h>
+
+#include <QtCore/qscopedpointer.h>
+
+class FindUnqualifiedIDVisitor : public QQmlJS::AST::Visitor
+{
+ Q_DISABLE_COPY_MOVE(FindUnqualifiedIDVisitor)
public:
- explicit FindUnqualifiedIDVisitor(QStringList const &qmltypeDirs, const QString& code,
- const QString& fileName, bool silent);
- ~FindUnqualifiedIDVisitor() override;
+ explicit FindUnqualifiedIDVisitor(QStringList qmltypeDirs, QString code,
+ QString fileName, bool silent);
+ ~FindUnqualifiedIDVisitor() override = default;
bool check();
private:
+ struct Import {
+ QHash<QString, ScopeTree::ConstPtr> objects;
+ QList<ModuleApiInfo> moduleApis;
+ QStringList dependencies;
+ };
+
QScopedPointer<ScopeTree> m_rootScope;
ScopeTree *m_currentScope;
- QHash<QString, LanguageUtils::FakeMetaObject::ConstPtr> m_exportedName2MetaObject;
+ QQmlJS::AST::ExpressionNode *m_fieldMemberBase = nullptr;
+ QHash<QString, ScopeTree::ConstPtr> m_types;
+ QHash<QString, ScopeTree::ConstPtr> m_exportedName2Scope;
QStringList m_qmltypeDirs;
- const QString& m_code;
- QHash<QString, LanguageUtils::FakeMetaObject::ConstPtr> m_qmlid2meta;
+ QString m_code;
+ QHash<QString, const ScopeTree *> m_qmlid2scope;
QString m_rootId;
QString m_filePath;
QSet<QPair<QString, QString>> m_alreadySeenImports;
@@ -62,17 +79,31 @@ private:
ColorOutput m_colorOut;
bool m_visitFailed = false;
- struct OutstandingConnection {QString targetName; ScopeTree *scope; QQmlJS::AST::UiObjectDefinition *uiod;};
+ struct OutstandingConnection
+ {
+ QString targetName;
+ ScopeTree *scope;
+ QQmlJS::AST::UiObjectDefinition *uiod;
+ };
QVarLengthArray<OutstandingConnection, 3> m_outstandingConnections; // Connections whose target we have not encountered
- void enterEnvironment(ScopeType type, QString name);
+ void enterEnvironment(ScopeType type, const QString &name);
void leaveEnvironment();
- void importHelper(QString id, QString prefix, int major, int minor);
- LanguageUtils::FakeMetaObject* localQmlFile2FakeMetaObject(QString filePath);
+ void importHelper(const QString &module, const QString &prefix = QString(),
+ int major = -1, int minor = -1);
- void importDirectory(const QString &directory, const QString &prefix);
- void importExportedNames(QStringRef prefix, QString name);
+ void readQmltypes(const QString &filename, Import &result);
+ Import readQmldir(const QString &dirname);
+ void processImport(const QString &prefix, const Import &import);
+
+ ScopeTree *localFile2ScopeTree(const QString &filePath);
+
+ void importFileOrDirectory(const QString &directory, const QString &prefix);
+ void importExportedNames(const QStringRef &prefix, QString name);
+
+ void parseHeaders(QQmlJS::AST::UiHeaderItemList *headers);
+ ScopeTree *parseProgram(QQmlJS::AST::Program *program, const QString &name);
void throwRecursionDepthError() override;
@@ -128,7 +159,11 @@ private:
bool visit(QQmlJS::AST::IdentifierExpression *idexp) override;
bool visit(QQmlJS::AST::PatternElement *) override;
-};
+ bool visit(QQmlJS::AST::FieldMemberExpression *idprop) override;
+ void endVisit(QQmlJS::AST::FieldMemberExpression *) override;
+ bool visit(QQmlJS::AST::BinaryExpression *) override;
+ void endVisit(QQmlJS::AST::BinaryExpression *) override;
+};
#endif // FINDUNQUALIFIED_H