summaryrefslogtreecommitdiff
path: root/src/libs/qmljs/qmljscodeformatter.cpp
diff options
context:
space:
mode:
authorRobert Loehning <robert.loehning@nokia.com>2012-02-29 17:19:39 +0100
committerEike Ziller <eike.ziller@nokia.com>2012-03-01 08:27:40 +0100
commitff58b3102c4507517dfc65591de97116ab22b25e (patch)
tree0e8fbe18516f974ea03e5c21ca11a2bf5c5fb702 /src/libs/qmljs/qmljscodeformatter.cpp
parentcb6e324738d57ce5dd870aec0fb29eef210bf36c (diff)
downloadqt-creator-ff58b3102c4507517dfc65591de97116ab22b25e.tar.gz
QmlJS indenter: Fix hang with invalid code.
Task-number: QTCREATORBUG-7005 (cherry picked from commit 0c597a6f070ebd434d93cc4052f8445e4ba434dc) Change-Id: I2e343fbcc6931530e7db142bf6e268dac696970f Reviewed-by: Christian Kamm <christian.d.kamm@nokia.com>
Diffstat (limited to 'src/libs/qmljs/qmljscodeformatter.cpp')
-rw-r--r--src/libs/qmljs/qmljscodeformatter.cpp16
1 files changed, 13 insertions, 3 deletions
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: