diff options
author | Maximilian Goldstein <max.goldstein@qt.io> | 2021-10-26 19:21:43 +0200 |
---|---|---|
committer | Maximilian Goldstein <max.goldstein@qt.io> | 2021-10-29 17:49:13 +0200 |
commit | 171219a5ccd10d92127b246579e5a324614f1880 (patch) | |
tree | 596654d2df58b844722cbe7959b5f9ccf7f78675 /tools/qmllint/main.cpp | |
parent | 363c23357501bdbacf9407ef46e7808261486aa8 (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.cpp | 63 |
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(); |