From 567e68a42a0a57f6dc83d39cf664e48c1dee6f9b Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Wed, 19 Oct 2011 09:21:48 +0200 Subject: [PATCH] QmlJS indenter: Fix hang when using 'else (a==a) {}'. Change-Id: Id7b8fba6707b1eaabf8065854f357cf600c809c5 Reviewed-by: Leandro T. C. Melo --- src/libs/qmljs/qmljscodeformatter.cpp | 10 ++++++++-- .../qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp | 15 +++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/libs/qmljs/qmljscodeformatter.cpp b/src/libs/qmljs/qmljscodeformatter.cpp index 782e0f36a5..fa5ef50eea 100644 --- a/src/libs/qmljs/qmljscodeformatter.cpp +++ b/src/libs/qmljs/qmljscodeformatter.cpp @@ -255,8 +255,13 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block) case expression_or_label: switch (kind) { - case Colon: turnInto(labelled_statement); break; - default: enter(expression); continue; + case Colon: turnInto(labelled_statement); break; + + // propagate 'leave' from expression state + case RightBracket: + case RightParenthesis: leave(); continue; + + default: enter(expression); continue; } break; case ternary_op: @@ -756,6 +761,7 @@ bool CodeFormatter::tryStatement() case Function: case Number: case String: + case LeftParenthesis: enter(expression); // look at the token again m_tokenIndex -= 1; diff --git a/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp b/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp index 046540befe..938f20df71 100644 --- a/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp +++ b/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp @@ -97,6 +97,7 @@ private Q_SLOTS: void labelledStatements3(); void json1(); void multilineTernaryInProperty(); + void bug1(); }; struct Line { @@ -1277,6 +1278,20 @@ void tst_QMLCodeFormatter::multilineTernaryInProperty() checkIndent(data); } +void tst_QMLCodeFormatter::bug1() +{ + QList data; + data << Line("Item {") + << Line(" x: {") + << Line(" if (a==a) {}") + << Line(" else (b==b) {}") + << Line(" foo()") + << Line(" }") + << Line("}") + ; + checkIndent(data); +} + QTEST_APPLESS_MAIN(tst_QMLCodeFormatter) #include "tst_qmlcodeformatter.moc" -- 2.11.0