diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp index 89915daef5e631ac03a9287ee674b4413e1eebf1..1c84bae4b822ef8463609a15a9e9cb8240dcc55e 100644 --- a/src/plugins/cpptools/cppcodeformatter.cpp +++ b/src/plugins/cpptools/cppcodeformatter.cpp @@ -72,16 +72,8 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block) switch (m_currentState.top().type) { case topmost_intro: - if (tryDeclaration()) - break; - switch (kind) { - case T_NAMESPACE: enter(namespace_start); break; - case T_STRUCT: - case T_UNION: - case T_CLASS: enter(class_start); break; - case T_ENUM: enter(enum_start); break; - case T_USING: enter(using_start); break; - } break; + tryDeclaration(); + break; case namespace_start: switch (kind) { @@ -93,13 +85,7 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block) if (tryDeclaration()) break; switch (kind) { - case T_NAMESPACE: enter(namespace_start); break; case T_RBRACE: leave(); continue; // always nested in namespace_start - case T_STRUCT: - case T_UNION: - case T_CLASS: enter(class_start); break; - case T_ENUM: enter(enum_start); break; - case T_USING: enter(using_start); break; } break; case class_start: @@ -113,11 +99,6 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block) break; switch (kind) { case T_RBRACE: leave(); continue; // always nested in class_start - case T_STRUCT: - case T_UNION: - case T_CLASS: enter(class_start); break; - case T_ENUM: enter(enum_start); break; - case T_USING: enter(using_start); break; } break; case enum_start: @@ -704,6 +685,24 @@ bool CodeFormatter::tryDeclaration() enter(template_start); return true; + case T_NAMESPACE: + enter(namespace_start); + return true; + + case T_STRUCT: + case T_UNION: + case T_CLASS: + enter(class_start); + return true; + + case T_ENUM: + enter(enum_start); + return true; + + case T_USING: + enter(using_start); + return true; + default: return false; } diff --git a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp index e8be0dcfb85d1b1ebd0dd1edf9f20d9caa17a19d..2cc5ee9737b48369bc991c12173416a48105a223 100644 --- a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp +++ b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp @@ -42,6 +42,7 @@ private Q_SLOTS: void operatorOverloads(); void gnuStyle(); void whitesmithsStyle(); + void singleLineEnum(); }; struct Line { @@ -755,6 +756,19 @@ void tst_CodeFormatter::whitesmithsStyle() checkIndent(data, 2); } +void tst_CodeFormatter::singleLineEnum() +{ + enum { a, b}; + QList<Line> data; + data << Line("enum { foo, bar, car = 2 };") + << Line("void blah() {") + << Line(" enum { foo, bar, car = 2 };") + << Line(" int i;") + << Line("}") + ; + checkIndent(data); +} + QTEST_APPLESS_MAIN(tst_CodeFormatter) #include "tst_codeformatter.moc"