diff options
author | Maximilian Goldstein <max.goldstein@qt.io> | 2020-06-24 13:05:55 +0200 |
---|---|---|
committer | Maximilian Goldstein <max.goldstein@qt.io> | 2020-06-25 09:02:08 +0200 |
commit | 88b3d1fd26b6b566ef00ae728051bff29455eea5 (patch) | |
tree | 3c84fb5d9820f955051c6b3fcbce9065ce585e48 | |
parent | dd71c43b9718be3523ed6b307a3402f88de070e1 (diff) |
qmlformat: Fix inline components
Fixes: QTBUG-85189
Change-Id: I2b30595b44d14b89406b126d3d148f51f8bfbca4
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
-rw-r--r-- | tests/auto/qml/qmlformat/data/inlineComponents.formatted.qml | 10 | ||||
-rw-r--r-- | tests/auto/qml/qmlformat/data/inlineComponents.qml | 6 | ||||
-rw-r--r-- | tests/auto/qml/qmlformat/tst_qmlformat.cpp | 7 | ||||
-rw-r--r-- | tools/qmlformat/dumpastvisitor.cpp | 41 | ||||
-rw-r--r-- | tools/qmlformat/dumpastvisitor.h | 3 |
5 files changed, 67 insertions, 0 deletions
diff --git a/tests/auto/qml/qmlformat/data/inlineComponents.formatted.qml b/tests/auto/qml/qmlformat/data/inlineComponents.formatted.qml new file mode 100644 index 0000000000..5349280f2b --- /dev/null +++ b/tests/auto/qml/qmlformat/data/inlineComponents.formatted.qml @@ -0,0 +1,10 @@ +Item { + component CustomText: Text { + Text { + color: "red" + text: "Test Text" + } + + } + +} diff --git a/tests/auto/qml/qmlformat/data/inlineComponents.qml b/tests/auto/qml/qmlformat/data/inlineComponents.qml new file mode 100644 index 0000000000..6eeb3dd965 --- /dev/null +++ b/tests/auto/qml/qmlformat/data/inlineComponents.qml @@ -0,0 +1,6 @@ +Item { +component CustomText: Text { +color: "red" +text: "Test Text" +} +} diff --git a/tests/auto/qml/qmlformat/tst_qmlformat.cpp b/tests/auto/qml/qmlformat/tst_qmlformat.cpp index 9e72b587b9..cda7f0d80f 100644 --- a/tests/auto/qml/qmlformat/tst_qmlformat.cpp +++ b/tests/auto/qml/qmlformat/tst_qmlformat.cpp @@ -54,6 +54,7 @@ private Q_SLOTS: void testStatesAndTransitions(); void testLargeBindings(); void testVerbatimStrings(); + void testInlineComponents(); void testQtbug85003(); @@ -240,6 +241,12 @@ void TestQmlformat::testVerbatimStrings() readTestFile("verbatimString.formatted.qml")); } +void TestQmlformat::testInlineComponents() +{ + QCOMPARE(runQmlformat(testFile("inlineComponents.qml"), false, true), + readTestFile("inlineComponents.formatted.qml")); +} + void TestQmlformat::testNestedIf() { QCOMPARE(runQmlformat(testFile("nestedIf.qml"), false, true), diff --git a/tools/qmlformat/dumpastvisitor.cpp b/tools/qmlformat/dumpastvisitor.cpp index c8fb0b511f..6868a3e21b 100644 --- a/tools/qmlformat/dumpastvisitor.cpp +++ b/tools/qmlformat/dumpastvisitor.cpp @@ -1030,6 +1030,47 @@ QHash<QString, UiObjectMember*> findBindings(UiObjectMemberList *list) { return bindings; } +bool DumpAstVisitor::visit(UiInlineComponent *node) +{ + if (scope().m_firstObject) { + if (scope().m_firstOfAll) + scope().m_firstOfAll = false; + else + addNewLine(); + + scope().m_firstObject = false; + } + + addLine(getComment(node, Comment::Location::Front)); + addLine(getComment(node, Comment::Location::Front_Inline)); + addLine("component " + node->name + ": " + + parseUiQualifiedId(node->component->qualifiedTypeNameId) + " {"); + + m_indentLevel++; + + ScopeProperties props; + props.m_bindings = findBindings(node->component->initializer->members); + m_scope_properties.push(props); + + m_result += getOrphanedComments(node); + + return true; +} + +void DumpAstVisitor::endVisit(UiInlineComponent *node) +{ + m_indentLevel--; + + m_scope_properties.pop(); + + bool need_comma = scope().m_inArrayBinding && scope().m_lastInArrayBinding != node; + + addLine(need_comma ? "}," : "}"); + addLine(getComment(node, Comment::Location::Back)); + if (!scope().m_inArrayBinding) + addNewLine(); +} + bool DumpAstVisitor::visit(UiObjectDefinition *node) { if (scope().m_firstObject) { if (scope().m_firstOfAll) diff --git a/tools/qmlformat/dumpastvisitor.h b/tools/qmlformat/dumpastvisitor.h index 01b7e418e2..9b908dd101 100644 --- a/tools/qmlformat/dumpastvisitor.h +++ b/tools/qmlformat/dumpastvisitor.h @@ -59,6 +59,9 @@ public: bool visit(FunctionDeclaration *node) override; + bool visit(UiInlineComponent *node) override; + void endVisit(UiInlineComponent *node) override; + bool visit(UiObjectDefinition *node) override; void endVisit(UiObjectDefinition *node) override; |