diff options
author | Maximilian Goldstein <max.goldstein@qt.io> | 2020-01-30 14:03:09 +0100 |
---|---|---|
committer | Maximilian Goldstein <max.goldstein@qt.io> | 2020-02-12 12:48:58 +0100 |
commit | 4df24385315c869b804e040a9089f9fa7a1fc57b (patch) | |
tree | 8cbbcd80be39f33f0ba2d52680ef4bcb8046b375 /tools/qmlformat | |
parent | 899de66d41e4e9666187e107516ac714963e7b20 (diff) |
qmlformat: Enforce more of the coding conventions
Now also enforces:
- states and transitions being the last elements in an object
- large bindings being the last bindings
Change-Id: I8be1db4eb2bc9dd429dd5b9abab70a1362f47dfb
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'tools/qmlformat')
-rw-r--r-- | tools/qmlformat/restructureastvisitor.cpp | 55 |
1 files changed, 54 insertions, 1 deletions
diff --git a/tools/qmlformat/restructureastvisitor.cpp b/tools/qmlformat/restructureastvisitor.cpp index f9ac2a20c2..7cce0e8034 100644 --- a/tools/qmlformat/restructureastvisitor.cpp +++ b/tools/qmlformat/restructureastvisitor.cpp @@ -110,6 +110,11 @@ 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); @@ -117,11 +122,47 @@ void RestructureAstVisitor::endVisit(UiObjectMemberList *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 (binding->qualifiedId->name == "id") { + if (parseUiQualifiedId(binding->qualifiedId) == "id") { correctOrder.append(binding); scriptBindings.removeOne(binding); @@ -154,9 +195,14 @@ void RestructureAstVisitor::endVisit(UiObjectMemberList *node) 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); @@ -170,6 +216,13 @@ void RestructureAstVisitor::endVisit(UiObjectMemberList *node) 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(); |