From e20bfaed68017ca2d4b65f8c5095c6fa7433ab78 Mon Sep 17 00:00:00 2001
From: Christian Kamm <christian.d.kamm@nokia.com>
Date: Mon, 27 Sep 2010 10:29:46 +0200
Subject: [PATCH] QmlJS indenter: Fix break/continue/throw in if statement
 without braces.

Reviewed-by: Roberto Raggi
---
 src/libs/qmljs/qmljscodeformatter.cpp         |  8 +++++++
 src/libs/qmljs/qmljscodeformatter.h           |  1 +
 .../qmlcodeformatter/tst_qmlcodeformatter.cpp | 21 +++++++++++++++++++
 3 files changed, 30 insertions(+)

diff --git a/src/libs/qmljs/qmljscodeformatter.cpp b/src/libs/qmljs/qmljscodeformatter.cpp
index 0da48216b3e..3213cf31e2f 100644
--- a/src/libs/qmljs/qmljscodeformatter.cpp
+++ b/src/libs/qmljs/qmljscodeformatter.cpp
@@ -643,6 +643,14 @@ bool CodeFormatter::tryStatement()
         enter(empty_statement);
         leave(true);
         return true;
+    case Break:
+    case Continue:
+        leave(true);
+        return true;
+    case Throw:
+        enter(throw_statement);
+        enter(expression);
+        return true;
     case Return:
         enter(return_statement);
         enter(expression);
diff --git a/src/libs/qmljs/qmljscodeformatter.h b/src/libs/qmljs/qmljscodeformatter.h
index b4a0855546e..aad77a5f527 100644
--- a/src/libs/qmljs/qmljscodeformatter.h
+++ b/src/libs/qmljs/qmljscodeformatter.h
@@ -156,6 +156,7 @@ public: // must be public to make Q_GADGET introspection work
         substatement_open, // The brace that opens a substatement block.
 
         return_statement, // After 'return'
+        throw_statement, // After 'throw'
 
         statement_with_condition, // After the 'for', 'while', 'catch', ... token
         statement_with_condition_paren_open, // While inside the (...)
diff --git a/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp b/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp
index 7c5cf697842..5e1f4c29e70 100644
--- a/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp
+++ b/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp
@@ -50,6 +50,7 @@ private Q_SLOTS:
 //    void whitesmithsStyle();
     void expressionContinuation();
     void objectLiteral();
+    void keywordStatement();
 };
 
 struct Line {
@@ -896,6 +897,26 @@ void tst_QMLCodeFormatter::objectLiteral()
     checkIndent(data);
 }
 
+void tst_QMLCodeFormatter::keywordStatement()
+{
+    QList<Line> data;
+    data << Line("function shuffle() {")
+         << Line("    if (1)")
+         << Line("        break")
+         << Line("    if (1)")
+         << Line("        continue")
+         << Line("    if (1)")
+         << Line("        throw 1")
+         << Line("    if (1)")
+         << Line("        return")
+         << Line("    if (1)")
+         << Line("        return 1")
+         << Line("    var x = 2")
+         << Line("}")
+         ;
+    checkIndent(data);
+}
+
 QTEST_APPLESS_MAIN(tst_QMLCodeFormatter)
 #include "tst_qmlcodeformatter.moc"
 
-- 
GitLab