aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorMitch Curtis <mitch.curtis@qt.io>2020-04-29 10:47:19 +0200
committerMitch Curtis <mitch.curtis@qt.io>2020-05-06 13:46:27 +0200
commitaa470fa92d8139ea849c00e01db5ffc537fe6981 (patch)
tree66e90018b1caed54b2413d986e776ddc9b4d50d0 /tools
parentafd6c6b905820529b1b46767970bf090d04973a9 (diff)
qmllint: warn when passing a directory to -i option
It should be a file. Change-Id: I52f4ebcf8bdd8ddd1fedd66ceffe9a060139c1d9 Fixes: QTBUG-83861 Pick-to: 5.15 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tools')
-rw-r--r--tools/qmllint/findwarnings.cpp45
-rw-r--r--tools/qmllint/findwarnings.h3
2 files changed, 25 insertions, 23 deletions
diff --git a/tools/qmllint/findwarnings.cpp b/tools/qmllint/findwarnings.cpp
index 462d762577..25a4975468 100644
--- a/tools/qmllint/findwarnings.cpp
+++ b/tools/qmllint/findwarnings.cpp
@@ -57,14 +57,6 @@ static QQmlDirParser createQmldirParserForFile(const QString &filename)
return parser;
}
-static TypeDescriptionReader createQmltypesReaderForFile(const QString &filename)
-{
- QFile f(filename);
- f.open(QFile::ReadOnly);
- TypeDescriptionReader reader { filename, f.readAll() };
- return reader;
-}
-
void FindWarningVisitor::enterEnvironment(ScopeType type, const QString &name)
{
m_currentScope = ScopeTree::create(type, name, m_currentScope);
@@ -186,10 +178,25 @@ static const QLatin1String SlashQmldir = QLatin1String("/qmldir");
static const QLatin1String SlashPluginsDotQmltypes = QLatin1String("/plugins.qmltypes");
void FindWarningVisitor::readQmltypes(const QString &filename,
- FindWarningVisitor::Import &result)
+ QHash<QString, ScopeTree::ConstPtr> *objects, QStringList *dependencies)
{
- auto reader = createQmltypesReaderForFile(filename);
- auto succ = reader(&result.objects, &result.dependencies);
+ const QFileInfo fileInfo(filename);
+ if (!fileInfo.exists()) {
+ m_colorOut.write(QLatin1String("warning: "), Warning);
+ m_colorOut.writeUncolored(QLatin1String("QML types file does not exist: ") + filename);
+ return;
+ }
+
+ if (fileInfo.isDir()) {
+ m_colorOut.write(QLatin1String("warning: "), Warning);
+ m_colorOut.writeUncolored(QLatin1String("QML types file cannot be a directory: ") + filename);
+ return;
+ }
+
+ QFile file(filename);
+ file.open(QFile::ReadOnly);
+ TypeDescriptionReader reader { filename, file.readAll() };
+ auto succ = reader(objects, dependencies);
if (!succ)
m_colorOut.writeUncolored(reader.errorMessage());
}
@@ -226,7 +233,7 @@ FindWarningVisitor::Import FindWarningVisitor::readQmldir(const QString &path)
result.objects.insert( it.key(), ScopeTree::ConstPtr(it.value()));
if (!reader.plugins().isEmpty() && QFile::exists(path + SlashPluginsDotQmltypes))
- readQmltypes(path + SlashPluginsDotQmltypes, result);
+ readQmltypes(path + SlashPluginsDotQmltypes, &result.objects, &result.dependencies);
return result;
}
@@ -293,7 +300,7 @@ void FindWarningVisitor::importHelper(const QString &module, const QString &pref
QDirIterator it { qmltypesPath, QStringList() << QLatin1String("*.qmltypes"), QDir::Files };
while (it.hasNext())
- readQmltypes(it.next(), result);
+ readQmltypes(it.next(), &result.objects, &result.dependencies);
processImport(prefix, result);
}
@@ -304,7 +311,7 @@ void FindWarningVisitor::importHelper(const QString &module, const QString &pref
Import result;
for (const auto &qmltypeFile : m_qmltypeFiles)
- readQmltypes(qmltypeFile, result);
+ readQmltypes(qmltypeFile, &result.objects, &result.dependencies);
processImport("", result);
}
@@ -442,20 +449,14 @@ bool FindWarningVisitor::visit(QQmlJS::AST::UiProgram *)
QDirIterator it { dir, QStringList() << QLatin1String("builtins.qmltypes"), QDir::NoFilter,
QDirIterator::Subdirectories };
while (it.hasNext()) {
- auto reader = createQmltypesReaderForFile(it.next());
- auto succ = reader(&objects, &dependencies);
- if (!succ)
- m_colorOut.writeUncolored(reader.errorMessage());
+ readQmltypes(it.next(), &objects, &dependencies);
}
}
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());
+ readQmltypes(qmltypeFile, &objects, &dependencies);
}
}
diff --git a/tools/qmllint/findwarnings.h b/tools/qmllint/findwarnings.h
index 2b99beeac9..6e5f3859cc 100644
--- a/tools/qmllint/findwarnings.h
+++ b/tools/qmllint/findwarnings.h
@@ -98,7 +98,8 @@ private:
void importHelper(const QString &module, const QString &prefix = QString(),
QTypeRevision version = QTypeRevision());
- void readQmltypes(const QString &filename, Import &result);
+ void readQmltypes(const QString &filename, QHash<QString, ScopeTree::ConstPtr> *objects,
+ QStringList *dependencies);
Import readQmldir(const QString &dirname);
void processImport(const QString &prefix, const Import &import);