forked from qt-creator/qt-creator
QmlJS indenter: Fix indentation for property initializers.
property int foo: { used to start an object literal but is a block statement now. Change-Id: I9ffbce4927b444314f1a43aba65ca3d9d234e47c Reviewed-on: http://codereview.qt-project.org/4339 Reviewed-by: Fawzi Mohamed <fawzi.mohamed@nokia.com>
This commit is contained in:
@@ -166,21 +166,6 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block)
|
|||||||
default: enter(expression); continue;
|
default: enter(expression); continue;
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
// property inits don't take statements
|
|
||||||
case property_initializer:
|
|
||||||
switch (kind) {
|
|
||||||
case Semicolon: leave(true); break;
|
|
||||||
case LeftBrace: enter(objectliteral_open); break;
|
|
||||||
case On:
|
|
||||||
case As:
|
|
||||||
case List:
|
|
||||||
case Import:
|
|
||||||
case Signal:
|
|
||||||
case Property:
|
|
||||||
case Identifier: enter(expression_or_objectdefinition); break;
|
|
||||||
default: enter(expression); continue;
|
|
||||||
} break;
|
|
||||||
|
|
||||||
case objectdefinition_open:
|
case objectdefinition_open:
|
||||||
switch (kind) {
|
switch (kind) {
|
||||||
case RightBrace: leave(true); break;
|
case RightBrace: leave(true); break;
|
||||||
@@ -222,7 +207,7 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block)
|
|||||||
|
|
||||||
case property_maybe_initializer:
|
case property_maybe_initializer:
|
||||||
switch (kind) {
|
switch (kind) {
|
||||||
case Colon: enter(property_initializer); break;
|
case Colon: turnInto(binding_assignment); break;
|
||||||
default: leave(true); continue;
|
default: leave(true); continue;
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
@@ -127,7 +127,6 @@ public: // must be public to make Q_GADGET introspection work
|
|||||||
binding_or_objectdefinition, // after an identifier
|
binding_or_objectdefinition, // after an identifier
|
||||||
|
|
||||||
binding_assignment, // after : in a binding
|
binding_assignment, // after : in a binding
|
||||||
property_initializer, // after : in a property
|
|
||||||
objectdefinition_open, // after {
|
objectdefinition_open, // after {
|
||||||
|
|
||||||
expression,
|
expression,
|
||||||
|
@@ -101,7 +101,7 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
|
|||||||
switch (newState) {
|
switch (newState) {
|
||||||
case objectdefinition_open: {
|
case objectdefinition_open: {
|
||||||
// special case for things like "gradient: Gradient {"
|
// special case for things like "gradient: Gradient {"
|
||||||
if (parentState.type == binding_assignment || parentState.type == property_initializer)
|
if (parentState.type == binding_assignment)
|
||||||
*savedIndentDepth = state(1).savedIndentDepth;
|
*savedIndentDepth = state(1).savedIndentDepth;
|
||||||
|
|
||||||
if (firstToken)
|
if (firstToken)
|
||||||
@@ -117,7 +117,6 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case binding_assignment:
|
case binding_assignment:
|
||||||
case property_initializer:
|
|
||||||
case objectliteral_assignment:
|
case objectliteral_assignment:
|
||||||
if (lastToken)
|
if (lastToken)
|
||||||
*indentDepth = *savedIndentDepth + 4;
|
*indentDepth = *savedIndentDepth + 4;
|
||||||
@@ -134,7 +133,6 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
|
|||||||
// ternary already adjusts indents nicely
|
// ternary already adjusts indents nicely
|
||||||
if (parentState.type != expression_or_objectdefinition
|
if (parentState.type != expression_or_objectdefinition
|
||||||
&& parentState.type != binding_assignment
|
&& parentState.type != binding_assignment
|
||||||
&& parentState.type != property_initializer
|
|
||||||
&& parentState.type != ternary_op) {
|
&& parentState.type != ternary_op) {
|
||||||
*indentDepth += 2 * m_indentSize;
|
*indentDepth += 2 * m_indentSize;
|
||||||
}
|
}
|
||||||
@@ -155,8 +153,7 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case bracket_open:
|
case bracket_open:
|
||||||
if (parentState.type == expression && (state(1).type == binding_assignment
|
if (parentState.type == expression && state(1).type == binding_assignment) {
|
||||||
|| state(1).type == property_initializer)) {
|
|
||||||
*savedIndentDepth = state(2).savedIndentDepth;
|
*savedIndentDepth = state(2).savedIndentDepth;
|
||||||
*indentDepth = *savedIndentDepth + m_indentSize;
|
*indentDepth = *savedIndentDepth + m_indentSize;
|
||||||
} else if (!lastToken) {
|
} else if (!lastToken) {
|
||||||
@@ -201,16 +198,15 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
|
|||||||
}
|
}
|
||||||
// fallthrough
|
// fallthrough
|
||||||
case substatement_open:
|
case substatement_open:
|
||||||
// special case for foo: {
|
// special case for "foo: {" and "property int foo: {"
|
||||||
if (parentState.type == binding_assignment && state(1).type == binding_or_objectdefinition)
|
if (parentState.type == binding_assignment)
|
||||||
*savedIndentDepth = state(1).savedIndentDepth;
|
*savedIndentDepth = state(1).savedIndentDepth;
|
||||||
*indentDepth = *savedIndentDepth + m_indentSize;
|
*indentDepth = *savedIndentDepth + m_indentSize;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case objectliteral_open:
|
case objectliteral_open:
|
||||||
if (parentState.type == expression
|
if (parentState.type == expression
|
||||||
|| parentState.type == objectliteral_assignment
|
|| parentState.type == objectliteral_assignment) {
|
||||||
|| parentState.type == property_initializer) {
|
|
||||||
// undo the continuation indent of the expression
|
// undo the continuation indent of the expression
|
||||||
*indentDepth = parentState.savedIndentDepth;
|
*indentDepth = parentState.savedIndentDepth;
|
||||||
*savedIndentDepth = *indentDepth;
|
*savedIndentDepth = *indentDepth;
|
||||||
@@ -293,7 +289,6 @@ void QtStyleCodeFormatter::adjustIndent(const QList<Token> &tokens, int lexerSta
|
|||||||
case LeftBrace:
|
case LeftBrace:
|
||||||
if (topState.type == substatement
|
if (topState.type == substatement
|
||||||
|| topState.type == binding_assignment
|
|| topState.type == binding_assignment
|
||||||
|| topState.type == property_initializer
|
|
||||||
|| topState.type == case_cont) {
|
|| topState.type == case_cont) {
|
||||||
*indentDepth = topState.savedIndentDepth;
|
*indentDepth = topState.savedIndentDepth;
|
||||||
}
|
}
|
||||||
|
@@ -87,7 +87,7 @@ private Q_SLOTS:
|
|||||||
void objectLiteral2();
|
void objectLiteral2();
|
||||||
void objectLiteral3();
|
void objectLiteral3();
|
||||||
void objectLiteral4();
|
void objectLiteral4();
|
||||||
void objectLiteral5();
|
void propertyWithStatement();
|
||||||
void keywordStatement();
|
void keywordStatement();
|
||||||
void namespacedObjects();
|
void namespacedObjects();
|
||||||
};
|
};
|
||||||
@@ -1031,24 +1031,28 @@ void tst_QMLCodeFormatter::objectLiteral4()
|
|||||||
checkIndent(data);
|
checkIndent(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QMLCodeFormatter::objectLiteral5()
|
void tst_QMLCodeFormatter::propertyWithStatement()
|
||||||
{
|
{
|
||||||
QList<Line> data;
|
QList<Line> data;
|
||||||
data << Line("Rectangle {")
|
data << Line("Rectangle {")
|
||||||
<< Line(" property int x: { a: 12, b: 13 }")
|
<< Line(" property int x: { if (a) break }")
|
||||||
<< Line(" property int y: {")
|
<< Line(" property int y: {")
|
||||||
<< Line(" a: 1 +")
|
<< Line(" if (a)")
|
||||||
<< Line(" 2 + 3")
|
<< Line(" break")
|
||||||
<< Line(" + 4")
|
<< Line(" switch (a) {")
|
||||||
|
<< Line(" case 1:")
|
||||||
|
<< Line(" case 2:")
|
||||||
|
<< Line(" continue")
|
||||||
|
<< Line(" }")
|
||||||
<< Line(" }")
|
<< Line(" }")
|
||||||
<< Line(" property int y: {")
|
<< Line(" property int y:")
|
||||||
<< Line(" a: 1 +")
|
<< Line(" {")
|
||||||
<< Line(" 2 + 3")
|
<< Line(" if (a)")
|
||||||
<< Line(" + 4,")
|
<< Line(" break")
|
||||||
<< Line(" b: {")
|
<< Line(" switch (a) {")
|
||||||
<< Line(" adef: 1 +")
|
<< Line(" case 1:")
|
||||||
<< Line(" 2 + 3")
|
<< Line(" case 2:")
|
||||||
<< Line(" + 4,")
|
<< Line(" continue")
|
||||||
<< Line(" }")
|
<< Line(" }")
|
||||||
<< Line(" }")
|
<< Line(" }")
|
||||||
<< Line("}")
|
<< Line("}")
|
||||||
|
Reference in New Issue
Block a user