aboutsummaryrefslogtreecommitdiffstats
path: root/tools/qmllint/main.cpp
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2021-12-09 11:22:52 +0100
committerUlf Hermann <ulf.hermann@qt.io>2021-12-13 11:51:13 +0000
commit576fafd1e69429d7387e4c35f6d15fc42af6513e (patch)
tree0e06903fea45ab0b8cc858756fd8fb0307cf0d32 /tools/qmllint/main.cpp
parent22f4306283d10e9aa5d6acb3e33ab2a8a397bb4c (diff)
Pass qmldir to qmlcachegen, qmllint and qmltc, not the qmltypes file
The tools will still grudgingly accept qmltypes files being passed via the -i option. We generally expect qmldir files, though. Ignoring the qmldir file and importing the qmltypes directly, ignores qmldir imports, dependencies and other component entries. This leads to unresolvable types. [ChangeLog][QML Tooling] qmllint expects qmldir files, not qmltypes files to be passed via the -i option now. This enables it to see the imports and dependencies of the module being imported. For backwards compatibility it still accepts qmltypes files, with a warning. Pick-to: 6.3 Fixes: QTBUG-99043 Change-Id: I5ed32d7e78df1e604aaf1bfa2ebda09d5d57b628 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tools/qmllint/main.cpp')
-rw-r--r--tools/qmllint/main.cpp59
1 files changed, 34 insertions, 25 deletions
diff --git a/tools/qmllint/main.cpp b/tools/qmllint/main.cpp
index 29d52736b4..6d4de2df09 100644
--- a/tools/qmllint/main.cpp
+++ b/tools/qmllint/main.cpp
@@ -130,17 +130,19 @@ All warnings can be set to three levels:
const QString qmlImportNoDefaultSetting = QLatin1String("DisableDefaultImports");
settings.addOption(qmlImportNoDefaultSetting, false);
- QCommandLineOption qmltypesFilesOption(
+ QCommandLineOption qmldirFilesOption(
QStringList() << "i"
<< "qmltypes",
- QLatin1String("Import the specified qmltypes files. By default, all qmltypes files "
- "found in the current directory are used. When this option is set, you "
- "have to explicitly add files from the current directory if you want "
- "them to be used."),
- QLatin1String("qmltypes"));
- parser.addOption(qmltypesFilesOption);
- const QString qmltypesFilesSetting = QLatin1String("OverwriteImportTypes");
- settings.addOption(qmltypesFilesSetting);
+ QLatin1String("Import the specified qmldir files. By default, the qmldir file found "
+ "in the current directory is used if present. If no qmldir file is found,"
+ "but qmltypes files are, those are imported instead. When this option is "
+ "set, you have to explicitly add the qmldir or any qmltypes files in the "
+ "current directory if you want it to be used. Importing qmltypes files "
+ "without their corresponding qmldir file is inadvisable."),
+ QLatin1String("qmldirs"));
+ parser.addOption(qmldirFilesOption);
+ const QString qmldirFilesSetting = QLatin1String("OverwriteImportTypes");
+ settings.addOption(qmldirFilesSetting);
QCommandLineOption absolutePath(
QStringList() << "absolute-path",
@@ -192,18 +194,25 @@ All warnings can be set to three levels:
QStringList qmlImportPaths =
parser.isSet(qmlImportNoDefault) ? QStringList {} : defaultImportPaths;
- QStringList defaultQmltypesFiles;
- if (parser.isSet(qmltypesFilesOption)) {
- defaultQmltypesFiles = parser.values(qmltypesFilesOption);
+ QStringList defaultQmldirFiles;
+ if (parser.isSet(qmldirFilesOption)) {
+ defaultQmldirFiles = parser.values(qmldirFilesOption);
} else {
- // If none are given explicitly, use the qmltypes files from the current directory.
- QDirIterator it(".", {"*.qmltypes"}, QDir::Files);
- while (it.hasNext()) {
- it.next();
- defaultQmltypesFiles.append(it.fileInfo().absoluteFilePath());
+ // If nothing given explicitly, use the qmldir file from the current directory.
+ QFileInfo qmldirFile(QStringLiteral("qmldir"));
+ if (qmldirFile.isFile()) {
+ defaultQmldirFiles.append(qmldirFile.absoluteFilePath());
+ } else {
+ // If no qmldir file is found, use the qmltypes files
+ // from the current directory for backwards compatibility.
+ QDirIterator it(".", {"*.qmltypes"}, QDir::Files);
+ while (it.hasNext()) {
+ it.next();
+ defaultQmldirFiles.append(it.fileInfo().absoluteFilePath());
+ }
}
}
- QStringList qmltypesFiles = defaultQmltypesFiles;
+ QStringList qmldirFiles = defaultQmldirFiles;
const QStringList defaultResourceFiles =
parser.isSet(resourceOption) ? parser.values(resourceOption) : QStringList {};
@@ -241,12 +250,12 @@ All warnings can be set to three levels:
addAbsolutePaths(resourceFiles, settings.value(resourceSetting).toStringList());
- qmltypesFiles = defaultQmltypesFiles;
- if (settings.isSet(qmltypesFilesSetting)
- && !settings.value(qmltypesFilesSetting).toStringList().isEmpty()) {
- qmltypesFiles = {};
- addAbsolutePaths(qmltypesFiles,
- settings.value(qmltypesFilesSetting).toStringList());
+ qmldirFiles = defaultQmldirFiles;
+ if (settings.isSet(qmldirFilesSetting)
+ && !settings.value(qmldirFilesSetting).toStringList().isEmpty()) {
+ qmldirFiles = {};
+ addAbsolutePaths(qmldirFiles,
+ settings.value(qmldirFilesSetting).toStringList());
}
if (parser.isSet(qmlImportNoDefault)
@@ -267,7 +276,7 @@ All warnings can be set to three levels:
for (const QString &filename : arguments) {
#endif
success &= linter.lintFile(filename, nullptr, silent, useJson ? &jsonFiles : nullptr,
- qmlImportPaths, qmltypesFiles, resourceFiles, options);
+ qmlImportPaths, qmldirFiles, resourceFiles, options);
}
if (useJson) {