aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs
diff options
context:
space:
mode:
authorChristian Stenger <christian.stenger@qt.io>2023-04-21 08:14:54 +0200
committerChristian Stenger <christian.stenger@qt.io>2023-04-24 11:37:58 +0000
commit5bc60ac8de01372505c870469063723b3aaa3955 (patch)
tree6e30921269f573f5c8e7fe968ed0a41ec194e118 /src/libs
parent9a25a8849ba98dcd3e5eab321b0baf059695dccd (diff)
QmlJS: Stop suggesting versions for imports if possible
Fixes: QTCREATORBUG-28649 Change-Id: I918b229855c18519800a54a73b56eaffa40524e5 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Ulf Hermann <ulf.hermann@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Diffstat (limited to 'src/libs')
-rw-r--r--src/libs/qmljs/qmljsbundle.cpp19
-rw-r--r--src/libs/qmljs/qmljsbundle.h5
2 files changed, 17 insertions, 7 deletions
diff --git a/src/libs/qmljs/qmljsbundle.cpp b/src/libs/qmljs/qmljsbundle.cpp
index c55edcdf5e..e4d536a3da 100644
--- a/src/libs/qmljs/qmljsbundle.cpp
+++ b/src/libs/qmljs/qmljsbundle.cpp
@@ -7,6 +7,7 @@
#include <QString>
#include <QFile>
+#include <QRegularExpression>
#include <QTextStream>
#include <QHash>
@@ -186,8 +187,10 @@ QString QmlBundle::toString(const QString &indent)
}
QStringList QmlBundle::maybeReadTrie(Trie &trie, Utils::JsonObjectValue *config,
- const QString &path, const QString &propertyName, bool required)
+ const QString &path, const QString &propertyName,
+ bool required, bool stripVersions)
{
+ static const QRegularExpression versionNumberAtEnd("^(.+)( \\d+\\.\\d+)$");
QStringList res;
if (!config->hasMember(propertyName)) {
if (required)
@@ -202,7 +205,13 @@ QStringList QmlBundle::maybeReadTrie(Trie &trie, Utils::JsonObjectValue *config,
for (Utils::JsonValue *v : elements) {
Utils::JsonStringValue *impStr = ((v != nullptr) ? v->toString() : nullptr);
if (impStr != nullptr) {
- trie.insert(impStr->value());
+ QString value = impStr->value();
+ if (stripVersions) {
+ const QRegularExpressionMatch match = versionNumberAtEnd.match(value);
+ if (match.hasMatch())
+ value = match.captured(1);
+ }
+ trie.insert(value);
} else {
res.append(QString::fromLatin1("Expected all elements of array in property \"%1\" "
"to be strings in QmlBundle at %2.")
@@ -217,7 +226,7 @@ QStringList QmlBundle::maybeReadTrie(Trie &trie, Utils::JsonObjectValue *config,
return res;
}
-bool QmlBundle::readFrom(QString path, QStringList *errors)
+bool QmlBundle::readFrom(QString path, bool stripVersions, QStringList *errors)
{
Utils::JsonMemoryPool pool;
@@ -249,8 +258,8 @@ bool QmlBundle::readFrom(QString path, QStringList *errors)
}
errs << maybeReadTrie(m_searchPaths, config, path, QLatin1String("searchPaths"));
errs << maybeReadTrie(m_installPaths, config, path, QLatin1String("installPaths"));
- errs << maybeReadTrie(m_supportedImports, config, path, QLatin1String("supportedImports")
- , true);
+ errs << maybeReadTrie(m_supportedImports, config, path, QLatin1String("supportedImports"),
+ true, stripVersions);
errs << maybeReadTrie(m_implicitImports, config, path, QLatin1String("implicitImports"));
if (errors)
(*errors) << errs;
diff --git a/src/libs/qmljs/qmljsbundle.h b/src/libs/qmljs/qmljsbundle.h
index 8cf3145671..5d2058eef4 100644
--- a/src/libs/qmljs/qmljsbundle.h
+++ b/src/libs/qmljs/qmljsbundle.h
@@ -53,14 +53,15 @@ public:
bool writeTo(const QString &path) const;
bool writeTo(QTextStream &stream, const QString &indent = QString()) const;
QString toString(const QString &indent = QString());
- bool readFrom(QString path, QStringList *errors);
+ bool readFrom(QString path, bool stripVersions, QStringList *errors);
bool operator==(const QmlBundle &o) const;
bool operator!=(const QmlBundle &o) const;
private:
static void printEscaped(QTextStream &s, const QString &str);
static void writeTrie(QTextStream &stream, const Trie &t, const QString &indent);
QStringList maybeReadTrie(Trie &trie, Utils::JsonObjectValue *config, const QString &path,
- const QString &propertyName, bool required = false);
+ const QString &propertyName, bool required = false,
+ bool stripVersions = false);
QString m_name;
Trie m_searchPaths;