C++ indenter: Don't add continuation indent after function return type.

Task-number: QTCREATORBUG-1816
This commit is contained in:
Christian Kamm
2010-07-08 08:48:36 +02:00
parent 6078b36c9c
commit 486b23b8ef
2 changed files with 31 additions and 2 deletions

View File

@@ -932,7 +932,6 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
case statement_with_condition: case statement_with_condition:
case for_statement: case for_statement:
case switch_statement: case switch_statement:
case declaration_start:
case if_statement: case if_statement:
case return_statement: case return_statement:
if (firstToken) if (firstToken)
@@ -940,6 +939,19 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd
*indentDepth = *savedIndentDepth + 2*m_indentSize; *indentDepth = *savedIndentDepth + 2*m_indentSize;
break; 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 arglist_open:
case condition_paren_open: case condition_paren_open:
if (!lastToken) if (!lastToken)

View File

@@ -43,6 +43,7 @@ private Q_SLOTS:
void gnuStyle(); void gnuStyle();
void whitesmithsStyle(); void whitesmithsStyle();
void singleLineEnum(); void singleLineEnum();
void functionReturnType();
}; };
struct Line { struct Line {
@@ -758,7 +759,6 @@ void tst_CodeFormatter::whitesmithsStyle()
void tst_CodeFormatter::singleLineEnum() void tst_CodeFormatter::singleLineEnum()
{ {
enum { a, b};
QList<Line> data; QList<Line> data;
data << Line("enum { foo, bar, car = 2 };") data << Line("enum { foo, bar, car = 2 };")
<< Line("void blah() {") << Line("void blah() {")
@@ -769,6 +769,23 @@ void tst_CodeFormatter::singleLineEnum()
checkIndent(data); 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) QTEST_APPLESS_MAIN(tst_CodeFormatter)
#include "tst_codeformatter.moc" #include "tst_codeformatter.moc"