aboutsummaryrefslogtreecommitdiffstats
path: root/tools/qmllint/main.cpp
diff options
context:
space:
mode:
authorMaximilian Goldstein <max.goldstein@qt.io>2021-10-26 19:21:43 +0200
committerMaximilian Goldstein <max.goldstein@qt.io>2021-10-29 17:49:13 +0200
commit171219a5ccd10d92127b246579e5a324614f1880 (patch)
tree596654d2df58b844722cbe7959b5f9ccf7f78675 /tools/qmllint/main.cpp
parent363c23357501bdbacf9407ef46e7808261486aa8 (diff)
qmllint: Fix some settings not being checked properly
Previously some settings were only checked before any settings file could be loaded, thus resulting in misapplied settings. Now every settings option will be applied on a per-file basis as it should be. Pick-to: 6.2 Change-Id: Ib7c8a8d7dbec2d4379f634488e3899e1746c0c51 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tools/qmllint/main.cpp')
-rw-r--r--tools/qmllint/main.cpp63
1 files changed, 44 insertions, 19 deletions
diff --git a/tools/qmllint/main.cpp b/tools/qmllint/main.cpp
index 7dded2a7f9..503124e64a 100644
--- a/tools/qmllint/main.cpp
+++ b/tools/qmllint/main.cpp
@@ -298,7 +298,8 @@ All warnings can be set to three levels:
QLatin1String("Do not include default import directories or the current directory. "
"This may be used to run qmllint on a project using a different Qt version."));
parser.addOption(qmlImportNoDefault);
- settings.addOption(QLatin1String("DisableDefaultImports"), false);
+ const QString qmlImportNoDefaultSetting = QLatin1String("DisableDefaultImports");
+ settings.addOption(qmlImportNoDefaultSetting, false);
QCommandLineOption qmltypesFilesOption(
QStringList() << "i"
@@ -349,35 +350,28 @@ All warnings can be set to three levels:
bool useJson = parser.isSet(jsonOption);
// use host qml import path as a sane default if not explicitly disabled
- QStringList qmlImportPaths = parser.isSet(qmlImportNoDefault)
- ? QStringList {}
- : QStringList { QLibraryInfo::path(QLibraryInfo::QmlImportsPath), QDir::currentPath() };
+ QStringList defaultImportPaths =
+ QStringList { QLibraryInfo::path(QLibraryInfo::QmlImportsPath), QDir::currentPath() };
- if (parser.isSet(qmlImportPathsOption))
- qmlImportPaths << parser.values(qmlImportPathsOption);
+ QStringList qmlImportPaths =
+ parser.isSet(qmlImportNoDefault) ? QStringList {} : defaultImportPaths;
- qmlImportPaths << settings.value(qmlImportPathsSetting).toStringList();
-
- QStringList qmltypesFiles;
+ QStringList defaultQmltypesFiles;
if (parser.isSet(qmltypesFilesOption)) {
- qmltypesFiles = parser.values(qmltypesFilesOption);
- } else if (settings.isSet(qmltypesFilesSetting)
- && !settings.value(qmltypesFilesSetting).toStringList().isEmpty()) {
- qmltypesFiles = parser.values(qmltypesFilesSetting);
+ defaultQmltypesFiles = parser.values(qmltypesFilesOption);
} else {
// If none are given explicitly, use the qmltypes files from the current directory.
QDirIterator it(".", {"*.qmltypes"}, QDir::Files);
while (it.hasNext()) {
it.next();
- qmltypesFiles.append(it.fileInfo().absoluteFilePath());
+ defaultQmltypesFiles.append(it.fileInfo().absoluteFilePath());
}
}
+ QStringList qmltypesFiles = defaultQmltypesFiles;
- QStringList resourceFiles;
- if (parser.isSet(resourceOption))
- resourceFiles << parser.values(resourceOption);
- else if (settings.isSet(resourceSetting))
- resourceFiles << settings.value(resourceSetting).toStringList();
+ const QStringList defaultResourceFiles =
+ parser.isSet(resourceOption) ? parser.values(resourceOption) : QStringList {};
+ QStringList resourceFiles = defaultResourceFiles;
#else
bool silent = false;
@@ -399,6 +393,37 @@ All warnings can be set to three levels:
if (!parser.isSet(ignoreSettings)) {
settings.search(filename);
updateLogLevels();
+
+ const QDir fileDir = QFileInfo(filename).absoluteDir();
+ auto addAbsolutePaths = [&](QStringList &list, const QStringList &entries) {
+ for (const QString &file : entries)
+ list << (QFileInfo(file).isAbsolute() ? file : fileDir.filePath(file));
+ };
+
+ resourceFiles = defaultResourceFiles;
+
+ addAbsolutePaths(resourceFiles, settings.value(resourceSetting).toStringList());
+
+ qmltypesFiles = defaultQmltypesFiles;
+ if (settings.isSet(qmltypesFilesSetting)
+ && !settings.value(qmltypesFilesSetting).toStringList().isEmpty()) {
+ qmltypesFiles = {};
+ addAbsolutePaths(qmltypesFiles,
+ settings.value(qmltypesFilesSetting).toStringList());
+ }
+
+ if (parser.isSet(qmlImportNoDefault)
+ || (settings.isSet(qmlImportNoDefaultSetting)
+ && settings.value(qmlImportNoDefaultSetting).toBool())) {
+ qmlImportPaths = {};
+ } else {
+ qmlImportPaths = defaultImportPaths;
+ }
+
+ if (parser.isSet(qmlImportPathsOption))
+ qmlImportPaths << parser.values(qmlImportPathsOption);
+
+ addAbsolutePaths(qmlImportPaths, settings.value(qmlImportPathsSetting).toStringList());
}
#else
const auto arguments = app.arguments();