diff options
author | Maximilian Goldstein <max.goldstein@qt.io> | 2020-12-10 15:58:36 +0100 |
---|---|---|
committer | Maximilian Goldstein <max.goldstein@qt.io> | 2020-12-11 11:40:12 +0100 |
commit | cf3e0559b01b249a6ec06f8826e8e05aca1301ec (patch) | |
tree | f7b693b785ed61a2fce7b1561667cee7e8a124ad | |
parent | 4db89266087f43e2652143094050b48c7ee3159b (diff) |
qmlformat: Remove import sorting
Remove import sorting due to the fact that sorting imports can break code.
[ChangeLog][QML Tooling][qmlformat] Remove import sorting and the (now obsolete) -n parameter to disable it
Fixes: QTBUG-89295
Pick-to: 6.0
Change-Id: I5ff13d0ae3c715db7645b412152aadb31811ce5a
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
-rw-r--r-- | tests/auto/qml/qmlformat/data/Annotations.formatted.nosort.qml | 106 | ||||
-rw-r--r-- | tests/auto/qml/qmlformat/data/Annotations.formatted.qml | 4 | ||||
-rw-r--r-- | tests/auto/qml/qmlformat/data/Example1.formatted.2spaces.qml | 12 | ||||
-rw-r--r-- | tests/auto/qml/qmlformat/data/Example1.formatted.nosort.qml | 151 | ||||
-rw-r--r-- | tests/auto/qml/qmlformat/data/Example1.formatted.qml | 12 | ||||
-rw-r--r-- | tests/auto/qml/qmlformat/data/Example1.formatted.tabs.qml | 12 | ||||
-rw-r--r-- | tests/auto/qml/qmlformat/tst_qmlformat.cpp | 12 | ||||
-rw-r--r-- | tools/qmlformat/main.cpp | 14 | ||||
-rw-r--r-- | tools/qmlformat/restructureastvisitor.cpp | 39 | ||||
-rw-r--r-- | tools/qmlformat/restructureastvisitor.h | 5 |
10 files changed, 30 insertions, 337 deletions
diff --git a/tests/auto/qml/qmlformat/data/Annotations.formatted.nosort.qml b/tests/auto/qml/qmlformat/data/Annotations.formatted.nosort.qml deleted file mode 100644 index a05c2125dc..0000000000 --- a/tests/auto/qml/qmlformat/data/Annotations.formatted.nosort.qml +++ /dev/null @@ -1,106 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Charts module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 or (at your option) any later version -** approved by the KDE Free Qt Foundation. The licenses are as published by -** the Free Software Foundation and appearing in the file LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//![2] -import QtQuick 2.0 -//![2] -import QtCharts 2.0 - -@Pippo { - atg1: 3 -} -@Annotation2 { -} -Item { - //![1] - - @AnnotateMore { - property int x: 5 - } - @AnnotateALot { - } - - property variant othersSlice: 0 - @Annotate { - } - - anchors.fill: parent - @SuperComplete { - binding: late - } - Component.onCompleted: { - // You can also manipulate slices dynamically, like append a slice or set a slice exploded - othersSlice = pieSeries.append("Others", 52); - pieSeries.find("Volkswagen").exploded = true; - } - //![1] - ChartView { - id: chart - - title: "Top-5 car brand shares in Finland" - anchors.fill: parent - legend.alignment: Qt.AlignBottom - antialiasing: true - - @ExtraAnnotation { - signal pippo() - } - PieSeries { - id: pieSeries - - PieSlice { - label: "Volkswagen" - value: 13.5 - } - - PieSlice { - label: "Toyota" - value: 10.9 - } - - PieSlice { - label: "Ford" - value: 8.6 - } - - PieSlice { - label: "Skoda" - value: 8.2 - } - - PieSlice { - label: "Volvo" - value: 6.8 - } - - } - - } - -} diff --git a/tests/auto/qml/qmlformat/data/Annotations.formatted.qml b/tests/auto/qml/qmlformat/data/Annotations.formatted.qml index a142d4cb74..a05c2125dc 100644 --- a/tests/auto/qml/qmlformat/data/Annotations.formatted.qml +++ b/tests/auto/qml/qmlformat/data/Annotations.formatted.qml @@ -28,9 +28,9 @@ ****************************************************************************/ //![2] -import QtCharts 2.0 -//![2] import QtQuick 2.0 +//![2] +import QtCharts 2.0 @Pippo { atg1: 3 diff --git a/tests/auto/qml/qmlformat/data/Example1.formatted.2spaces.qml b/tests/auto/qml/qmlformat/data/Example1.formatted.2spaces.qml index 20d2a03421..5e27aeec22 100644 --- a/tests/auto/qml/qmlformat/data/Example1.formatted.2spaces.qml +++ b/tests/auto/qml/qmlformat/data/Example1.formatted.2spaces.qml @@ -3,19 +3,19 @@ 2. Goodbye */ -import A.B.B.A -import A.LLOHA // Importing this is very important import QtQuick 5.15 // Muddling the waters! import QtQuick.Models 3.14 as muddle +// Importing that is important too +import Z import That import This // THIS IS VERY IMPORTANT! -import X.Y -import X.Z import Y -// Importing that is important too -import Z +import X.Z +import X.Y +import A.LLOHA +import A.B.B.A // This comment is related to Item Item { diff --git a/tests/auto/qml/qmlformat/data/Example1.formatted.nosort.qml b/tests/auto/qml/qmlformat/data/Example1.formatted.nosort.qml deleted file mode 100644 index fdc0b1f68c..0000000000 --- a/tests/auto/qml/qmlformat/data/Example1.formatted.nosort.qml +++ /dev/null @@ -1,151 +0,0 @@ -/* This file is licensed under the not a license license - 1. You may not comply - 2. Goodbye -*/ - -// Importing this is very important -import QtQuick 5.15 -// Muddling the waters! -import QtQuick.Models 3.14 as muddle -// Importing that is important too -import Z -import That -import This // THIS IS VERY IMPORTANT! -import Y -import X.Z -import X.Y -import A.LLOHA -import A.B.B.A - -// This comment is related to Item -Item { - // Orphan comment - // Another orphan - // More orphans - - // This to id - // Also id. (line 2) - // This is the third id - // fourth id comment - id: foo - - // This to enum - enum Foo { - A = 3, // This is A - B, // This is B - C = 4, // This is C - D // This is D - } - - property bool some_bool: false - property variant some_array_literal: [30, 20, Math["PI"], [4, 3, 2], "foo", 0.3] - property bool something_computed: function(x) { - // This is an orphan inside something_computed - // Are these getting duplicated? - // Another orphan inside something_computed - - const PI = 3, DAYS_PER_YEAR = 365.25; - var x = 3 + 2; - x["bla"] = 50; - // This one to var few! - var few = new WhatEver(); - x += Math.sin(3); - x--; - --x; - x++; - ++x; - for (var x = 0; x < 100; x++) { - x++; - console.log("Foo"); - } - for (var x in [3, 2, 1]) { - y++; - console.log("Bar"); - } - while (true) - console.log("Wee"); - - with (foo) { - bar; - x += 5; - } // This is related to with! - x3: - do { - console.log("Hello"); - } while (3 == 0); - try { - dangerous(); - } catch (e) { - console.log(e); - } finally { - dangerous(); - } - switch (x) { - case 0: - x = 1; - break; - case 1: - x = 5; - break; - case 4: - x = 100; - break; - } - if (x == 50) - console.log("true"); - else if (x == 50) - console.log("other thing"); - else - console.log("false"); - if (x == 50) { - console.log("true"); - } else if (x == 50) { - console.log("other thing"); - x--; - } else { - console.log("false"); - } - return "foobar"; - }() - default property bool some_default_bool: 500 % 5 !== 0 // some_default_bool - // some_read_only_bool - readonly property bool some_read_only_bool: Math.sin(3) && (aFunc()[30] + 5) | 2 != 0 - - signal say(string name, bool caps) - - // This one to aFunc() - function aFunc() { - var x = 3; - return x; - } - - x: 3 // Very cool - Component.onCompleted: console.log("Foo!") - myFavouriteThings: [ - // This is an orphan - - // This is a cool text - Text { - }, - // This is a cool rectangle - Rectangle { - } - ] - - Text { - required property string batman - - signal boo(int count, int times, real duration) - - text: "Bla" - } - - // This comment is related to the property animation - PropertyAnimation on x { - id: foo - - x: 3 - y: x + 3 - } - -} diff --git a/tests/auto/qml/qmlformat/data/Example1.formatted.qml b/tests/auto/qml/qmlformat/data/Example1.formatted.qml index 5f12517781..fdc0b1f68c 100644 --- a/tests/auto/qml/qmlformat/data/Example1.formatted.qml +++ b/tests/auto/qml/qmlformat/data/Example1.formatted.qml @@ -3,19 +3,19 @@ 2. Goodbye */ -import A.B.B.A -import A.LLOHA // Importing this is very important import QtQuick 5.15 // Muddling the waters! import QtQuick.Models 3.14 as muddle +// Importing that is important too +import Z import That import This // THIS IS VERY IMPORTANT! -import X.Y -import X.Z import Y -// Importing that is important too -import Z +import X.Z +import X.Y +import A.LLOHA +import A.B.B.A // This comment is related to Item Item { diff --git a/tests/auto/qml/qmlformat/data/Example1.formatted.tabs.qml b/tests/auto/qml/qmlformat/data/Example1.formatted.tabs.qml index d569c414d2..d1c17c4c6b 100644 --- a/tests/auto/qml/qmlformat/data/Example1.formatted.tabs.qml +++ b/tests/auto/qml/qmlformat/data/Example1.formatted.tabs.qml @@ -3,19 +3,19 @@ 2. Goodbye */ -import A.B.B.A -import A.LLOHA // Importing this is very important import QtQuick 5.15 // Muddling the waters! import QtQuick.Models 3.14 as muddle +// Importing that is important too +import Z import That import This // THIS IS VERY IMPORTANT! -import X.Y -import X.Z import Y -// Importing that is important too -import Z +import X.Z +import X.Y +import A.LLOHA +import A.B.B.A // This comment is related to Item Item { diff --git a/tests/auto/qml/qmlformat/tst_qmlformat.cpp b/tests/auto/qml/qmlformat/tst_qmlformat.cpp index f114704b0a..165be7e973 100644 --- a/tests/auto/qml/qmlformat/tst_qmlformat.cpp +++ b/tests/auto/qml/qmlformat/tst_qmlformat.cpp @@ -201,21 +201,17 @@ void TestQmlformat::testFormat_data() QTest::addColumn<QString>("fileFormatted"); QTest::addColumn<QStringList>("args"); - QTest::newRow("example1 (sorted)") << "Example1.qml" - << "Example1.formatted.qml" << QStringList {}; - QTest::newRow("example1 (not sorted)") + QTest::newRow("example1") << "Example1.qml" - << "Example1.formatted.nosort.qml" << QStringList { "-n" }; + << "Example1.formatted.qml" << QStringList {}; QTest::newRow("example1 (tabs)") << "Example1.qml" << "Example1.formatted.tabs.qml" << QStringList { "-t" }; QTest::newRow("example1 (two spaces)") << "Example1.qml" << "Example1.formatted.2spaces.qml" << QStringList { "-w", "2" }; - QTest::newRow("annotation (sorted)") << "Annotations.qml" - << "Annotations.formatted.qml" << QStringList {}; - QTest::newRow("annotation (not sorted)") + QTest::newRow("annotation") << "Annotations.qml" - << "Annotations.formatted.nosort.qml" << QStringList { "-n" }; + << "Annotations.formatted.qml" << QStringList {}; QTest::newRow("front inline") << "FrontInline.qml" << "FrontInline.formatted.qml" << QStringList {}; QTest::newRow("if blocks") << "IfBlocks.qml" diff --git a/tools/qmlformat/main.cpp b/tools/qmlformat/main.cpp index a021971710..a7e6c64bf3 100644 --- a/tools/qmlformat/main.cpp +++ b/tools/qmlformat/main.cpp @@ -44,7 +44,7 @@ #include "dumpastvisitor.h" #include "restructureastvisitor.h" -bool parseFile(const QString &filename, bool inplace, bool verbose, bool sortImports, bool force, +bool parseFile(const QString &filename, bool inplace, bool verbose, bool force, int indentWidth, bool tabs, const QString &newline) { QFile file(filename); @@ -91,11 +91,8 @@ bool parseFile(const QString &filename, bool inplace, bool verbose, bool sortImp qWarning().noquote() << orphaned << "comments are orphans."; } - if (verbose && sortImports) - qWarning().noquote() << "Sorting imports"; - // Do the actual restructuring - RestructureAstVisitor restructure(parser.rootNode(), sortImports); + RestructureAstVisitor restructure(parser.rootNode()); // Turn AST back into source code if (verbose) @@ -185,9 +182,6 @@ int main(int argc, char *argv[]) parser.addOption(QCommandLineOption({"V", "verbose"}, QStringLiteral("Verbose mode. Outputs more detailed information."))); - parser.addOption(QCommandLineOption({"n", "no-sort"}, - QStringLiteral("Do not sort imports."))); - parser.addOption(QCommandLineOption({"i", "inplace"}, QStringLiteral("Edit file in-place instead of outputting to stdout."))); @@ -248,7 +242,7 @@ int main(int argc, char *argv[]) if (file.isEmpty()) continue; - if (!parseFile(file, true, parser.isSet("verbose"), !parser.isSet("no-sort"), + if (!parseFile(file, true, parser.isSet("verbose"), parser.isSet("force"), indentWidth, parser.isSet("tabs"), parser.value("newline"))) success = false; @@ -256,7 +250,7 @@ int main(int argc, char *argv[]) } else { for (const QString &file : parser.positionalArguments()) { if (!parseFile(file, parser.isSet("inplace"), parser.isSet("verbose"), - !parser.isSet("no-sort"), parser.isSet("force"), indentWidth, + parser.isSet("force"), indentWidth, parser.isSet("tabs"), parser.value("newline"))) success = false; } diff --git a/tools/qmlformat/restructureastvisitor.cpp b/tools/qmlformat/restructureastvisitor.cpp index 7cce0e8034..45957230d8 100644 --- a/tools/qmlformat/restructureastvisitor.cpp +++ b/tools/qmlformat/restructureastvisitor.cpp @@ -30,7 +30,7 @@ #include <QList> -RestructureAstVisitor::RestructureAstVisitor(Node *rootNode, bool sortImports) : m_sortImports(sortImports) +RestructureAstVisitor::RestructureAstVisitor(Node *rootNode) { rootNode->accept(this); } @@ -69,43 +69,6 @@ static QString parseUiQualifiedId(UiQualifiedId *id) return name; } -void RestructureAstVisitor::endVisit(UiHeaderItemList *node) -{ - QList<Node *> correctOrder; - - auto imports = findKind<UiImport>(node); - - if (!m_sortImports) - return; - - // Sort imports - std::sort(imports.begin(), imports.end(), [](UiImport *a, UiImport *b) - { - auto nameA = a->fileName.isEmpty() ? parseUiQualifiedId(a->importUri) - : a->fileName.toString(); - auto nameB = b->fileName.isEmpty() ? parseUiQualifiedId(b->importUri) - : b->fileName.toString(); - - return nameA < nameB; - }); - - // Add imports - for (auto *import : imports) - correctOrder.append(import); - - // Add all the other items - for (auto *item = node; item != nullptr; item = item->next) { - if (!correctOrder.contains(item->headerItem)) - correctOrder.append(item->headerItem); - } - - // Rebuild member list from correctOrder - for (auto *item = node; item != nullptr; item = item->next) { - item->headerItem = correctOrder.front(); - correctOrder.pop_front(); - } -} - void RestructureAstVisitor::endVisit(UiObjectMemberList *node) { QList<UiObjectMember*> correctOrder; diff --git a/tools/qmlformat/restructureastvisitor.h b/tools/qmlformat/restructureastvisitor.h index a2195c8c2e..7b3573300f 100644 --- a/tools/qmlformat/restructureastvisitor.h +++ b/tools/qmlformat/restructureastvisitor.h @@ -37,14 +37,11 @@ using namespace QQmlJS::AST; class RestructureAstVisitor : protected Visitor { public: - RestructureAstVisitor(Node *rootNode, bool sortImports); + RestructureAstVisitor(Node *rootNode); void throwRecursionDepthError() override {} void endVisit(UiObjectMemberList *node) override; - void endVisit(UiHeaderItemList *node) override; -private: - bool m_sortImports = false; }; #endif // RESTRUCTUREASTVISITOR_H |