From ff58b3102c4507517dfc65591de97116ab22b25e Mon Sep 17 00:00:00 2001 From: Robert Loehning Date: Wed, 29 Feb 2012 17:19:39 +0100 Subject: QmlJS indenter: Fix hang with invalid code. Task-number: QTCREATORBUG-7005 (cherry picked from commit 0c597a6f070ebd434d93cc4052f8445e4ba434dc) Change-Id: I2e343fbcc6931530e7db142bf6e268dac696970f Reviewed-by: Christian Kamm --- src/libs/qmljs/qmljscodeformatter.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'src/libs/qmljs/qmljscodeformatter.cpp') diff --git a/src/libs/qmljs/qmljscodeformatter.cpp b/src/libs/qmljs/qmljscodeformatter.cpp index 77bd008de6..7b1a5e250b 100644 --- a/src/libs/qmljs/qmljscodeformatter.cpp +++ b/src/libs/qmljs/qmljscodeformatter.cpp @@ -167,6 +167,11 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block) case Signal: case Property: case Identifier: enter(expression_or_objectdefinition); break; + + // error recovery + case RightBracket: + case RightParenthesis: leave(true); break; + default: enter(expression); continue; } break; @@ -251,9 +256,14 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block) case expression_or_objectdefinition: switch (kind) { case Dot: - case Identifier: break; // need to become an objectdefinition_open in cases like "width: Qt.Foo {" - case LeftBrace: turnInto(objectdefinition_open); break; - default: enter(expression); continue; // really? identifier and more tokens might already be gone + case Identifier: break; // need to become an objectdefinition_open in cases like "width: Qt.Foo {" + case LeftBrace: turnInto(objectdefinition_open); break; + + // propagate 'leave' from expression state + case RightBracket: + case RightParenthesis: leave(); continue; + + default: enter(expression); continue; // really? identifier and more tokens might already be gone } break; case expression_or_label: -- cgit v1.2.1