diff options
Diffstat (limited to 'tools/qmlformat/restructureastvisitor.cpp')
-rw-r--r-- | tools/qmlformat/restructureastvisitor.cpp | 194 |
1 files changed, 0 insertions, 194 deletions
diff --git a/tools/qmlformat/restructureastvisitor.cpp b/tools/qmlformat/restructureastvisitor.cpp deleted file mode 100644 index 45957230d8..0000000000 --- a/tools/qmlformat/restructureastvisitor.cpp +++ /dev/null @@ -1,194 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2019 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the tools applications of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL-EXCEPT$ -** 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 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** 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$ -** -****************************************************************************/ - -#include "restructureastvisitor.h" - -#include <QList> - -RestructureAstVisitor::RestructureAstVisitor(Node *rootNode) -{ - rootNode->accept(this); -} - -template<typename T> -static QList<T *> findKind(UiObjectMemberList *list) -{ - QList<T *> members; - for (auto *item = list; item != nullptr; item = item->next) { - if (cast<T *>(item->member) != nullptr) - members.append(cast<T *>(item->member)); - } - - return members; -} - -template<typename T> -static QList<T *> findKind(UiHeaderItemList *list) -{ - QList<T *> members; - for (auto *item = list; item != nullptr; item = item->next) { - if (cast<T *>(item->headerItem) != nullptr) - members.append(cast<T *>(item->headerItem)); - } - - return members; -} - -static QString parseUiQualifiedId(UiQualifiedId *id) -{ - QString name = id->name.toString(); - for (auto *item = id->next; item != nullptr; item = item->next) { - name += "." + item->name; - } - - return name; -} - -void RestructureAstVisitor::endVisit(UiObjectMemberList *node) -{ - QList<UiObjectMember*> correctOrder; - - QList<UiScriptBinding*> largeScriptBinding; - - UiObjectMember *states = nullptr; - UiObjectMember *transitions = nullptr; - - auto enumDeclarations = findKind<UiEnumDeclaration>(node); - auto scriptBindings = findKind<UiScriptBinding>(node); - auto arrayBindings = findKind<UiArrayBinding>(node); - auto publicMembers = findKind<UiPublicMember>(node); - auto sourceElements = findKind<UiSourceElement>(node); - auto objectDefinitions = findKind<UiObjectDefinition>(node); - - // Look for transitions and states - for (auto *binding : findKind<UiObjectBinding>(node)) { - const QString name = parseUiQualifiedId(binding->qualifiedId); - - if (name == "transitions") - transitions = binding; - else if (name == "states") - states = binding; - } - - for (auto it = arrayBindings.begin(); it != arrayBindings.end();) { - const QString name = parseUiQualifiedId((*it)->qualifiedId); - - if (name == "transitions") { - transitions = *it; - it = arrayBindings.erase(it); - } else if (name == "states") { - states = *it; - it = arrayBindings.erase(it); - } else { - it++; - } - } - - // Find large script bindings - for (auto it = scriptBindings.begin(); it != scriptBindings.end();) { - // A binding is considered large if it uses a block - if ((*it)->statement->kind != Node::Kind_Block) { - it++; - continue; - } - - largeScriptBinding.push_back(*it); - it = scriptBindings.erase(it); - } - - // This structure is based on https://doc.qt.io/qt-5/qml-codingconventions.html - - // 1st id - for (auto *binding : scriptBindings) { - if (parseUiQualifiedId(binding->qualifiedId) == "id") { - correctOrder.append(binding); - - scriptBindings.removeOne(binding); - break; - } - } - - // 2nd enums - for (auto *enumDeclaration : enumDeclarations) - correctOrder.append(enumDeclaration); - - // 3rd property declarations - for (auto *publicMember : publicMembers) { - if (publicMember->type != UiPublicMember::Property) - continue; - - correctOrder.append(publicMember); - } - - // 4th signals - for (auto *publicMember : publicMembers) { - if (publicMember->type != UiPublicMember::Signal) - continue; - - correctOrder.append(publicMember); - } - - // 5th functions - for (auto *source : sourceElements) - correctOrder.append(source); - - // 6th properties - // small script bindings... - for (auto *binding : scriptBindings) - correctOrder.append(binding); - - // ...then large ones - for (auto *binding : largeScriptBinding) - correctOrder.append(binding); - - for (auto *binding : arrayBindings) - correctOrder.append(binding); - - // 7th child objects - for (auto *objectDefinition : objectDefinitions) - correctOrder.append(objectDefinition); - - // 8th all the rest - for (auto *item = node; item != nullptr; item = item->next) { - if (!correctOrder.contains(item->member)) - correctOrder.append(item->member); - } - - // 9th states and transitions - if (states != nullptr) - correctOrder.append(states); - - if (transitions != nullptr) - correctOrder.append(transitions); - - // Rebuild member list from correctOrder - for (auto *item = node; item != nullptr; item = item->next) { - item->member = correctOrder.front(); - correctOrder.pop_front(); - } -} |