diff options
Diffstat (limited to 'tools/qmllint/findunqualified.h')
-rw-r--r-- | tools/qmllint/findunqualified.h | 87 |
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 |