diff --git a/src/libs/qmljs/qmljscodeformatter.cpp b/src/libs/qmljs/qmljscodeformatter.cpp index 468d112cbcbfe4bacb5e6bb85e8132bc5a9f55b6..0da48216b3e7246f6d582bd51cb75f55d82f9d8c 100644 --- a/src/libs/qmljs/qmljscodeformatter.cpp +++ b/src/libs/qmljs/qmljscodeformatter.cpp @@ -70,8 +70,9 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block) for (; m_tokenIndex < m_tokens.size(); ) { m_currentToken = tokenAt(m_tokenIndex); const int kind = extendedTokenKind(m_currentToken); - //dump(); + //qDebug() << "Token" << m_currentLine.mid(m_currentToken.begin(), m_currentToken.length) << m_tokenIndex << "in line" << block.blockNumber() + 1; + //dump(); if (kind == Comment && state().type != multiline_comment_cont @@ -285,6 +286,13 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block) case RightBracket: leave(); break; } break; + case objectliteral_open: + if (tryInsideExpression()) + break; + switch (kind) { + case RightBrace: leave(); break; + } break; + case bracket_element_start: switch (kind) { case Identifier: turnInto(bracket_element_maybe_objectdefinition); break; @@ -612,6 +620,7 @@ bool CodeFormatter::tryInsideExpression(bool alsoExpression) switch (kind) { case LeftParenthesis: newState = paren_open; break; case LeftBracket: newState = bracket_open; break; + case LeftBrace: newState = objectliteral_open; break; case Function: newState = function_start; break; case Question: newState = ternary_op; break; } diff --git a/src/libs/qmljs/qmljscodeformatter.h b/src/libs/qmljs/qmljscodeformatter.h index 571bfedf65a54c0b291a88a28f0f8325192fba25..b4a0855546ef887c34cbbc642d51ea267e7f7c0d 100644 --- a/src/libs/qmljs/qmljscodeformatter.h +++ b/src/libs/qmljs/qmljscodeformatter.h @@ -134,6 +134,7 @@ public: // must be public to make Q_GADGET introspection work paren_open, // opening ( in expression bracket_open, // opening [ in expression + objectliteral_open, // opening { in expression bracket_element_start, // after starting bracket_open or after ',' in bracket_open bracket_element_maybe_objectdefinition, // after an identifier in bracket_element_start diff --git a/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp b/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp index 49c30915f3400792b022f831e259d3439acea00e..7c5cf69784247b5c46bd46c065a5b2885e6418f8 100644 --- a/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp +++ b/tests/auto/qml/qmleditor/qmlcodeformatter/tst_qmlcodeformatter.cpp @@ -49,6 +49,7 @@ private Q_SLOTS: // void gnuStyle(); // void whitesmithsStyle(); void expressionContinuation(); + void objectLiteral(); }; struct Line { @@ -883,6 +884,18 @@ void tst_QMLCodeFormatter::expressionContinuation() checkIndent(data); } +void tst_QMLCodeFormatter::objectLiteral() +{ + QList data; + data << Line("function shuffle() {") + << Line(" for (var i = 0; i < 10; ++i) {") + << Line(" x[i] = { index: i }") + << Line(" }") + << Line("}") + ; + checkIndent(data); +} + QTEST_APPLESS_MAIN(tst_QMLCodeFormatter) #include "tst_qmlcodeformatter.moc"