From 86d5df063cda54c6eb2e32fb6496a23c8ef0de81 Mon Sep 17 00:00:00 2001
From: Christian Kamm <christian.d.kamm@nokia.com>
Date: Thu, 19 May 2011 13:06:49 +0200
Subject: [PATCH] C++ indenter: Fix extra specifier in return type of func
 decl.

Like
struct Foo bar() { }

Change-Id: I946937c23d1660909757952a5a3bd400c4781826
Reviewed-on: http://codereview.qt.nokia.com/13
Reviewed-by: Erik Verbruggen <erik.verbruggen@nokia.com>
---
 src/plugins/cpptools/cppcodeformatter.cpp          |  2 ++
 .../cplusplus/codeformatter/tst_codeformatter.cpp  | 14 ++++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp
index 1eb049fe5b0..33aa6aedefd 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 17bc24be036..d0c3ee811a0 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"
 
-- 
GitLab