From 9b1f2a7d0efa42f0f07afd398794a3e6fd20db31 Mon Sep 17 00:00:00 2001 From: Fabian Kosmale Date: Mon, 17 Jun 2019 16:02:23 +0200 Subject: extend grammar for better version parsing support Be more strict in parsing version numbers This also makes it easier to access the version number in other places using the Visitor interface, like (soon) the linter and avoids reparsing the text twice. Potential disadvantages: previously allowed import statements will rejected at parse time, e.g. import QtQuick 0b10 Potential further advantage: Weird import statements like import QtQuick 0b10 will be rejected earlier Change-Id: Ifcd187b79a90952bc964c688afa4ea9b158e5109 Reviewed-by: Simon Hausmann --- tools/qmlimportscanner/main.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'tools') diff --git a/tools/qmlimportscanner/main.cpp b/tools/qmlimportscanner/main.cpp index ee69a0ed42..05d1f7fdc0 100644 --- a/tools/qmlimportscanner/main.cpp +++ b/tools/qmlimportscanner/main.cpp @@ -86,7 +86,7 @@ void printUsage(const QString &appNameIn) << '\n'; } -QVariantList findImportsInAst(QQmlJS::AST::UiHeaderItemList *headerItemList, const QString &code, const QString &path) +QVariantList findImportsInAst(QQmlJS::AST::UiHeaderItemList *headerItemList, const QString &path) { QVariantList imports; @@ -120,7 +120,8 @@ QVariantList findImportsInAst(QQmlJS::AST::UiHeaderItemList *headerItemList, con if (!name.isEmpty()) import[nameLiteral()] = name; import[typeLiteral()] = moduleLiteral(); - import[versionLiteral()] = code.mid(importNode->versionToken.offset, importNode->versionToken.length); + auto versionString = importNode->version ? QString::number(importNode->version->majorVersion) + QLatin1Char('.') + QString::number(importNode->version->minorVersion) : QString(); + import[versionLiteral()] = versionString; } imports.append(import); @@ -277,7 +278,7 @@ QVariantList findQmlImportsInQmlCode(const QString &filePath, const QString &cod } return QVariantList(); } - return findImportsInAst(parser.ast()->headers, code, filePath); + return findImportsInAst(parser.ast()->headers, filePath); } // Scan a single qml file for import statements -- cgit v1.2.3