diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp index 1eb049fe5b03950879f546f9c4e2ae1ea7e2fcb6..33aa6aedefd445ad01824aac552336fc4d733837 100644 --- a/src/plugins/cpptools/cppcodeformatter.cpp +++ b/src/plugins/cpptools/cppcodeformatter.cpp @@ -110,6 +110,7 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block) case class_start: switch (kind) { case T_SEMICOLON: leave(); break; + case T_LPAREN: turnInto(declaration_start); continue; // "struct Foo bar() {" case T_LBRACE: enter(class_open); break; } break; @@ -123,6 +124,7 @@ void CodeFormatter::recalculateStateAfter(const QTextBlock &block) case enum_start: switch (kind) { case T_SEMICOLON: leave(); break; + case T_LPAREN: turnInto(declaration_start); continue; // "enum Foo bar() {" case T_LBRACE: enter(enum_open); break; } break; diff --git a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp index 17bc24be036fa823532d366d898d01a72860a58e..d0c3ee811a0e3eb6770926087911ffc83993522b 100644 --- a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp +++ b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp @@ -91,6 +91,7 @@ private Q_SLOTS: void whitesmithsStyleSwitch(); void indentToNextToken(); void labels(); + void functionsWithExtraSpecifier(); }; struct Line { @@ -1178,6 +1179,19 @@ void tst_CodeFormatter::labels() checkIndent(data); } +void tst_CodeFormatter::functionsWithExtraSpecifier() +{ + QList<Line> data; + data << Line("extern void foo() {}") + << Line("struct Foo bar() {}") + << Line("enum Foo bar() {}") + << Line("namespace foo {") + << Line("}") + << Line("int a;") + ; + checkIndent(data); +} + QTEST_APPLESS_MAIN(tst_CodeFormatter) #include "tst_codeformatter.moc"