From cf3e0559b01b249a6ec06f8826e8e05aca1301ec Mon Sep 17 00:00:00 2001 From: Maximilian Goldstein Date: Thu, 10 Dec 2020 15:58:36 +0100 Subject: 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 --- tools/qmlformat/main.cpp | 14 ++++------- tools/qmlformat/restructureastvisitor.cpp | 39 +------------------------------ tools/qmlformat/restructureastvisitor.h | 5 +--- 3 files changed, 6 insertions(+), 52 deletions(-) (limited to 'tools/qmlformat') 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 -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 correctOrder; - - auto imports = findKind(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 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 -- cgit v1.2.3