From d7bf4f515d36f742d7fd28869c97129beff2a7a5 Mon Sep 17 00:00:00 2001 From: Christian Kamm <christian.d.kamm@nokia.com> Date: Fri, 24 Sep 2010 15:08:08 +0200 Subject: [PATCH] C++ indenter: Fix indentation if template and class appear on one line. Task-number: QTCREATORBUG-2427 --- src/plugins/cpptools/cppcodeformatter.cpp | 15 +++++++++------ .../cplusplus/codeformatter/tst_codeformatter.cpp | 13 +++++++++++++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp index 87811c01cdc..30f589e6026 100644 --- a/src/plugins/cpptools/cppcodeformatter.cpp +++ b/src/plugins/cpptools/cppcodeformatter.cpp @@ -1040,16 +1040,18 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd switch (newState) { case namespace_start: - if (firstToken) + if (firstToken) { *savedIndentDepth = tokenPosition; - *indentDepth = tokenPosition; + *indentDepth = tokenPosition; + } break; case enum_start: case class_start: - if (firstToken) + if (firstToken) { *savedIndentDepth = tokenPosition; - *indentDepth = tokenPosition; + *indentDepth = tokenPosition; + } *paddingDepth = 2*m_indentSize; break; @@ -1075,9 +1077,10 @@ void QtStyleCodeFormatter::onEnter(int newState, int *indentDepth, int *savedInd break; case declaration_start: - if (firstToken) + if (firstToken) { *savedIndentDepth = tokenPosition; - *indentDepth = *savedIndentDepth; + *indentDepth = *savedIndentDepth; + } // 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) { diff --git a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp index 9d6f7c6584f..bebe2383c29 100644 --- a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp +++ b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp @@ -48,6 +48,7 @@ private Q_SLOTS: void blockStmtInIf(); void nestedInitializer(); void forStatement(); + void templateSingleline(); }; struct Line { @@ -939,6 +940,18 @@ void tst_CodeFormatter::forStatement() checkIndent(data); } +void tst_CodeFormatter::templateSingleline() +{ + QList<Line> data; + data + << Line("template <typename T> class Foo") + << Line("{") + << Line(" T t;") + << Line("}") + ; + checkIndent(data); +} + QTEST_APPLESS_MAIN(tst_CodeFormatter) #include "tst_codeformatter.moc" -- GitLab