aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaximilian Goldstein <max.goldstein@qt.io>2020-10-07 12:46:24 +0200
committerMaximilian Goldstein <max.goldstein@qt.io>2020-10-08 09:57:47 +0200
commit61417ad3525d33c41e7d8423103e876a922d5f8b (patch)
tree76568d9cfccbe25059e3c0f0e23a3894a5b9ffe6
parentb0652fe3d7a77d38ac2bd427fba6e542d363eec6 (diff)
qmlformat: Make arrow functions one liners
Fixes: QTBUG-87179 Change-Id: Ieb7dffab59923bcb2ce8745c499eff7de44134b1 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
-rw-r--r--tests/auto/qml/qmlformat/data/arrowFunctions.formatted.qml5
-rw-r--r--tests/auto/qml/qmlformat/data/arrowFunctions.qml5
-rw-r--r--tests/auto/qml/qmlformat/tst_qmlformat.cpp2
-rw-r--r--tools/qmlformat/dumpastvisitor.cpp20
4 files changed, 28 insertions, 4 deletions
diff --git a/tests/auto/qml/qmlformat/data/arrowFunctions.formatted.qml b/tests/auto/qml/qmlformat/data/arrowFunctions.formatted.qml
new file mode 100644
index 0000000000..e4bc1f6747
--- /dev/null
+++ b/tests/auto/qml/qmlformat/data/arrowFunctions.formatted.qml
@@ -0,0 +1,5 @@
+Item {
+ arrow1: (x) => x
+ arrow2: (x) => x + x
+ arrow3: () => x > 3 ? x * x : x
+}
diff --git a/tests/auto/qml/qmlformat/data/arrowFunctions.qml b/tests/auto/qml/qmlformat/data/arrowFunctions.qml
new file mode 100644
index 0000000000..e4bc1f6747
--- /dev/null
+++ b/tests/auto/qml/qmlformat/data/arrowFunctions.qml
@@ -0,0 +1,5 @@
+Item {
+ arrow1: (x) => x
+ arrow2: (x) => x + x
+ arrow3: () => x > 3 ? x * x : x
+}
diff --git a/tests/auto/qml/qmlformat/tst_qmlformat.cpp b/tests/auto/qml/qmlformat/tst_qmlformat.cpp
index 45a51dec21..dfe41a77d8 100644
--- a/tests/auto/qml/qmlformat/tst_qmlformat.cpp
+++ b/tests/auto/qml/qmlformat/tst_qmlformat.cpp
@@ -237,6 +237,8 @@ void TestQmlformat::testFormat_data()
<< "propertyNames.formatted.qml" << false << true;
QTest::newRow("empty object") << "emptyObject.qml"
<< "emptyObject.formatted.qml" << false << true;
+ QTest::newRow("arrow functions") << "arrowFunctions.qml"
+ << "arrowFunctions.formatted.qml" << false << true;
}
void TestQmlformat::testFormat()
diff --git a/tools/qmlformat/dumpastvisitor.cpp b/tools/qmlformat/dumpastvisitor.cpp
index 47ea76b119..24286ba69b 100644
--- a/tools/qmlformat/dumpastvisitor.cpp
+++ b/tools/qmlformat/dumpastvisitor.cpp
@@ -321,6 +321,7 @@ QString DumpAstVisitor::parseFunctionExpression(FunctionExpression *functExpr, b
{
m_indentLevel++;
QString result;
+ bool hasBraces = true;
if (!functExpr->isArrowFunction) {
result += omitFunction ? "" : "function";
@@ -343,12 +344,23 @@ QString DumpAstVisitor::parseFunctionExpression(FunctionExpression *functExpr, b
if (functExpr->typeAnnotation != nullptr)
result += " : " + parseType(functExpr->typeAnnotation->type);
- result += " => {\n" + parseStatementList(functExpr->body);
+ result += " => ";
+
+ if (functExpr->body == nullptr) {
+ result += "{}";
+ } else if (functExpr->body->next == nullptr && functExpr->body->statement->kind == Node::Kind_ReturnStatement) {
+ m_indentLevel--;
+ result += parseExpression(cast<ReturnStatement *>(functExpr->body->statement)->expression);
+ hasBraces = false;
+ } else {
+ result += "{\n" + parseStatementList(functExpr->body);
+ }
}
- m_indentLevel--;
-
- result += formatLine("}", false);
+ if (hasBraces) {
+ m_indentLevel--;
+ result += formatLine("}", false);
+ }
return result;