diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp index 1c84bae4b822ef8463609a15a9e9cb8240dcc55e..ac4d94faf9eed006d2812de3c509ea002c52cc81 100644 --- a/src/plugins/cpptools/cppcodeformatter.cpp +++ b/src/plugins/cpptools/cppcodeformatter.cpp @@ -932,7 +932,6 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd case statement_with_condition: case for_statement: case switch_statement: - case declaration_start: case if_statement: case return_statement: if (firstToken) @@ -940,6 +939,19 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd *indentDepth = *savedIndentDepth + 2*m_indentSize; break; + case declaration_start: + if (firstToken) + *savedIndentDepth = tokenPosition; + // continuation indent in function bodies only, to not indent + // after the return type in "void\nfoo() {}" + for (int i = 0; state(i).type != topmost_intro; ++i) { + if (state(i).type == defun_open) { + *indentDepth = *savedIndentDepth + 2*m_indentSize; + break; + } + } + break; + case arglist_open: case condition_paren_open: if (!lastToken) diff --git a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp index 2cc5ee9737b48369bc991c12173416a48105a223..3141e76002f426a3d71df4301e2a0ec361b935cb 100644 --- a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp +++ b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp @@ -43,6 +43,7 @@ private Q_SLOTS: void gnuStyle(); void whitesmithsStyle(); void singleLineEnum(); + void functionReturnType(); }; struct Line { @@ -758,7 +759,6 @@ void tst_CodeFormatter::whitesmithsStyle() void tst_CodeFormatter::singleLineEnum() { - enum { a, b}; QList<Line> data; data << Line("enum { foo, bar, car = 2 };") << Line("void blah() {") @@ -769,6 +769,23 @@ void tst_CodeFormatter::singleLineEnum() checkIndent(data); } +void tst_CodeFormatter::functionReturnType() +{ + QList<Line> data; + data + << Line("void") + << Line("foo(int) {}") + << Line("") + << Line("const QList<int> &") + << Line("A::foo() {}") + << Line("") + << Line("template <class T>") + << Line("const QList<QMap<T, T> > &") + << Line("A::B::foo() {}") + ; + checkIndent(data); +} + QTEST_APPLESS_MAIN(tst_CodeFormatter) #include "tst_codeformatter.moc"