diff options
author | Qt Forward Merge Bot <qt_forward_merge_bot@qt-project.org> | 2020-03-26 01:00:11 +0100 |
---|---|---|
committer | Fabian Kosmale <fabian.kosmale@qt.io> | 2020-04-09 10:08:41 +0200 |
commit | 2812184e1bb87cd94d2989162bc6ea954bb585c4 (patch) | |
tree | 25460548730e2ddc1f6f328d54e97d3fbfb49d21 /tools/qmllint | |
parent | cd4a99a7ba92968bf88da9af2624bb738d71e726 (diff) | |
parent | bf205b45a29ba80d94df3b6bac5fec4c7cd79bf9 (diff) |
Merge remote-tracking branch 'origin/5.15' into dev
Conflicts:
src/qml/jsruntime/qv4executablecompilationunit.cpp
src/qml/jsruntime/qv4executablecompilationunit_p.h
src/qml/qml/qqmlobjectcreator.cpp
src/qml/qml/qqmlpropertycachecreator_p.h
src/qml/qml/qqmltypecompiler.cpp
src/qml/qml/qqmltypedata.cpp
tests/auto/qml/qmlformat/tst_qmlformat.cpp
tools/qmllint/scopetree.cpp
src/qml/qml/qqmlapplicationengine_p.h
Adjusted tools/qmllint/findunqualified.cpp to use newer API
Change-Id: Ibfb4678ca39d626d47527265e3c96e43313873d4
Diffstat (limited to 'tools/qmllint')
-rw-r--r-- | tools/qmllint/findunqualified.cpp | 41 | ||||
-rw-r--r-- | tools/qmllint/findunqualified.h | 3 | ||||
-rw-r--r-- | tools/qmllint/main.cpp | 24 |
3 files changed, 52 insertions, 16 deletions
diff --git a/tools/qmllint/findunqualified.cpp b/tools/qmllint/findunqualified.cpp index baae3a3ce7..604cf49122 100644 --- a/tools/qmllint/findunqualified.cpp +++ b/tools/qmllint/findunqualified.cpp @@ -183,8 +183,6 @@ QStringList completeImportPaths(const QString &uri, const QString &basePath, QTy } static const QLatin1String SlashQmldir = QLatin1String("/qmldir"); -static const QLatin1String SlashAppDotQmltypes = QLatin1String("/app.qmltypes"); -static const QLatin1String SlashLibDotQmltypes = QLatin1String("/lib.qmltypes"); static const QLatin1String SlashPluginsDotQmltypes = QLatin1String("/plugins.qmltypes"); void FindUnqualifiedIDVisitor::readQmltypes(const QString &filename, @@ -287,16 +285,29 @@ void FindUnqualifiedIDVisitor::importHelper(const QString &module, const QString break; } - Import result; - if (QFile::exists(qmltypesPath + SlashAppDotQmltypes)) - readQmltypes(qmltypesPath + SlashAppDotQmltypes, result); - else if (QFile::exists(qmltypesPath + SlashLibDotQmltypes)) - readQmltypes(qmltypesPath + SlashLibDotQmltypes, result); - else + if (!m_qmltypeFiles.isEmpty()) continue; + + Import result; + + QDirIterator it { qmltypesPath, QStringList() << QLatin1String("*.qmltypes"), QDir::Files }; + + while (it.hasNext()) + readQmltypes(it.next(), result); + processImport(prefix, result); } } + + if (!m_qmltypeFiles.isEmpty()) + { + Import result; + + for (const auto &qmltypeFile : m_qmltypeFiles) + readQmltypes(qmltypeFile, result); + + processImport("", result); + } } ScopeTree::Ptr FindUnqualifiedIDVisitor::localFile2ScopeTree(const QString &filePath) @@ -433,6 +444,17 @@ bool FindUnqualifiedIDVisitor::visit(QQmlJS::AST::UiProgram *) m_colorOut.writeUncolored(reader.errorMessage()); } } + + if (!m_qmltypeFiles.isEmpty()) + { + for (const auto &qmltypeFile : m_qmltypeFiles) { + auto reader = createQmltypesReaderForFile(qmltypeFile); + auto succ = reader(&objects, &dependencies); + if (!succ) + m_colorOut.writeUncolored(reader.errorMessage()); + } + } + // add builtins for (auto objectIt = objects.begin(); objectIt != objects.end(); ++objectIt) { auto val = objectIt.value(); @@ -644,10 +666,11 @@ bool FindUnqualifiedIDVisitor::visit(QQmlJS::AST::IdentifierExpression *idexp) return true; } -FindUnqualifiedIDVisitor::FindUnqualifiedIDVisitor(QStringList qmltypeDirs, QString code, +FindUnqualifiedIDVisitor::FindUnqualifiedIDVisitor(QStringList qmltypeDirs, QStringList qmltypeFiles, QString code, QString fileName, bool silent) : m_rootScope(ScopeTree::create(ScopeType::JSFunctionScope, "global")), m_qmltypeDirs(std::move(qmltypeDirs)), + m_qmltypeFiles(std::move(qmltypeFiles)), m_code(std::move(code)), m_rootId(QLatin1String("<id>")), m_filePath(std::move(fileName)), diff --git a/tools/qmllint/findunqualified.h b/tools/qmllint/findunqualified.h index 1c1751fafb..1782012424 100644 --- a/tools/qmllint/findunqualified.h +++ b/tools/qmllint/findunqualified.h @@ -52,7 +52,7 @@ class FindUnqualifiedIDVisitor : public QQmlJS::AST::Visitor { Q_DISABLE_COPY_MOVE(FindUnqualifiedIDVisitor) public: - explicit FindUnqualifiedIDVisitor(QStringList qmltypeDirs, QString code, + explicit FindUnqualifiedIDVisitor(QStringList qmltypeDirs, QStringList qmltypeFiles, QString code, QString fileName, bool silent); ~FindUnqualifiedIDVisitor() override = default; bool check(); @@ -69,6 +69,7 @@ private: QHash<QString, ScopeTree::ConstPtr> m_types; QHash<QString, ScopeTree::ConstPtr> m_exportedName2Scope; QStringList m_qmltypeDirs; + QStringList m_qmltypeFiles; QString m_code; QHash<QString, ScopeTree::ConstPtr> m_qmlid2scope; QString m_rootId; diff --git a/tools/qmllint/main.cpp b/tools/qmllint/main.cpp index fa601986b2..05519fc8d8 100644 --- a/tools/qmllint/main.cpp +++ b/tools/qmllint/main.cpp @@ -48,7 +48,7 @@ #endif static bool lint_file(const QString &filename, const bool silent, const bool warnUnqualied, - const QStringList &qmltypeDirs) + const QStringList &qmltypeDirs, const QStringList &qmltypeFiles) { QFile file(filename); if (!file.open(QFile::ReadOnly)) { @@ -84,7 +84,7 @@ static bool lint_file(const QString &filename, const bool silent, const bool war if (success && !isJavaScript && warnUnqualied) { auto root = parser.rootNode(); - FindUnqualifiedIDVisitor v { qmltypeDirs, code, filename, silent }; + FindUnqualifiedIDVisitor v { qmltypeDirs, qmltypeFiles, code, filename, silent }; root->accept(&v); success = v.check(); } @@ -118,6 +118,13 @@ int main(int argv, char *argc[]) QLatin1String("directory")); parser.addOption(qmltypesDirsOption); + QCommandLineOption qmltypesFilesOption( + QStringList() << "i" + << "qmltypes", + QLatin1String("Include the specified qmltypes files"), + QLatin1String("qmltypes")); + parser.addOption(qmltypesFilesOption); + parser.addPositionalArgument(QLatin1String("files"), QLatin1String("list of qml or js files to verify")); @@ -134,15 +141,20 @@ int main(int argv, char *argc[]) QStringList qmltypeDirs = parser.isSet(qmltypesDirsOption) ? parser.values(qmltypesDirsOption) # ifndef QT_BOOTSTRAPPED - : QStringList { QLibraryInfo::location(QLibraryInfo::Qml2ImportsPath), - QLatin1String(".") }; + : QStringList { QLibraryInfo::location(QLibraryInfo::Qml2ImportsPath) }; # else - : QStringList { QLatin1String(".") }; + : QStringList {}; # endif + + if (!parser.isSet(qmltypesFilesOption)) + qmltypeDirs << "."; + + QStringList qmltypeFiles = parser.isSet(qmltypesFilesOption) ? parser.values(qmltypesFilesOption) : QStringList {}; #else bool silent = false; bool warnUnqualified = false; QStringList qmltypeDirs {}; + QStringList qmltypeFiles {}; #endif bool success = true; #if QT_CONFIG(commandlineparser) @@ -151,7 +163,7 @@ int main(int argv, char *argc[]) const auto arguments = app.arguments(); for (const QString &filename : arguments) #endif - success &= lint_file(filename, silent, warnUnqualified, qmltypeDirs); + success &= lint_file(filename, silent, warnUnqualified, qmltypeDirs, qmltypeFiles); return success ? 0 : -1; } |