diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2019-08-16 17:03:30 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2019-08-30 10:34:38 +0200 |
commit | 8f5f363ce8aa0cc9a4abe33bd9e21e59fe1b575a (patch) | |
tree | 90fe2196625a6030c6bcd037d457e55495ec8b10 /tools/qmllint | |
parent | 8b396cb21606c3b384d1bab71851767ea7b24ca5 (diff) |
qmllint: Handle the default import and .ui.qml files
Change-Id: I9d86daa737d30ea0f76af431c59f44d59d4786e4
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'tools/qmllint')
-rw-r--r-- | tools/qmllint/findunqualified.cpp | 36 | ||||
-rw-r--r-- | tools/qmllint/findunqualified.h | 2 |
2 files changed, 24 insertions, 14 deletions
diff --git a/tools/qmllint/findunqualified.cpp b/tools/qmllint/findunqualified.cpp index fffb1d06fa..42c74059c3 100644 --- a/tools/qmllint/findunqualified.cpp +++ b/tools/qmllint/findunqualified.cpp @@ -170,7 +170,8 @@ FindUnqualifiedIDVisitor::localQmlFile2FakeMetaObject(QString filePath) { using namespace QQmlJS::AST; auto fake = new LanguageUtils::FakeMetaObject; - fake->setClassName(QFileInfo { filePath }.baseName()); + QString baseName = QFileInfo { filePath }.baseName(); + fake->setClassName(baseName.endsWith(".ui") ? baseName.chopped(3) : baseName); QFile file(filePath); if (!file.open(QFile::ReadOnly)) { return fake; @@ -304,6 +305,22 @@ FindUnqualifiedIDVisitor::localQmlFile2FakeMetaObject(QString filePath) return fake; } +void FindUnqualifiedIDVisitor::importDirectory(const QString &directory, const QString &prefix) +{ + QString dirname = directory; + QFileInfo info { dirname }; + if (info.isRelative()) + dirname = QDir(QFileInfo { m_filePath }.path()).filePath(dirname); + + QDirIterator it { dirname, QStringList() << QLatin1String("*.qml"), QDir::NoFilter }; + while (it.hasNext()) { + LanguageUtils::FakeMetaObject *fake = localQmlFile2FakeMetaObject(it.next()); + m_exportedName2MetaObject.insert( + fake->className(), + QSharedPointer<const LanguageUtils::FakeMetaObject>(fake)); + } +} + void FindUnqualifiedIDVisitor::importExportedNames(QStringRef prefix, QString name) { for (;;) { @@ -377,6 +394,8 @@ bool FindUnqualifiedIDVisitor::visit(QQmlJS::AST::UiProgram *) meta->addProperty(LanguageUtils::FakeMetaProperty {"ignoreUnknownSignals", "bool", false, false, false, 0}); meta->addProperty(LanguageUtils::FakeMetaProperty {"target", "QObject", false, false, false, 0}); m_exportedName2MetaObject["Connections"] = LanguageUtils::FakeMetaObject::ConstPtr { meta }; + + importDirectory(".", QString()); return true; } @@ -672,18 +691,9 @@ bool FindUnqualifiedIDVisitor::visit(QQmlJS::AST::UiImport *import) prefix += import->importId + QLatin1Char('.'); } auto dirname = import->fileName.toString(); - if (!dirname.isEmpty()) { - QFileInfo info { dirname }; - if (info.isRelative()) { - dirname = QDir(QFileInfo { m_filePath }.path()).filePath(dirname); - } - QDirIterator it { dirname, QStringList() << QLatin1String("*.qml"), QDir::NoFilter }; - while (it.hasNext()) { - LanguageUtils::FakeMetaObject *fake = localQmlFile2FakeMetaObject(it.next()); - m_exportedName2MetaObject.insert( - fake->className(), QSharedPointer<const LanguageUtils::FakeMetaObject>(fake)); - } - } + if (!dirname.isEmpty()) + importDirectory(dirname, prefix); + QString path {}; if (!import->importId.isEmpty()) { m_qmlid2meta.insert(import->importId.toString(), {}); // TODO: do not put imported ids into the same space as qml IDs diff --git a/tools/qmllint/findunqualified.h b/tools/qmllint/findunqualified.h index 181f42f265..f7d1aab1f4 100644 --- a/tools/qmllint/findunqualified.h +++ b/tools/qmllint/findunqualified.h @@ -70,7 +70,7 @@ private: void importHelper(QString id, QString prefix, int major, int minor); LanguageUtils::FakeMetaObject* localQmlFile2FakeMetaObject(QString filePath); - + void importDirectory(const QString &directory, const QString &prefix); void importExportedNames(QStringRef prefix, QString name); void throwRecursionDepthError() override; |