From d75ff6496bfb599a9edde41681873919d4d44152 Mon Sep 17 00:00:00 2001 From: Daniel Jasper Date: Mon, 28 Jan 2013 15:40:20 +0000 Subject: [PATCH] Don't put a function's return type on its own line in Google style. This would be against the style guide: http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Function_Declarations_and_Definitions#Function_Declarations_and_Definitions Not sure what to do as a last resort if the function signature does not fit onto a single line in Google style .. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@173690 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Format/Format.h | 3 +++ lib/Format/Format.cpp | 4 +++- unittests/Format/FormatTest.cpp | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/include/clang/Format/Format.h b/include/clang/Format/Format.h index 78523ea36e..b21bfd2524 100644 --- a/include/clang/Format/Format.h +++ b/include/clang/Format/Format.h @@ -65,6 +65,9 @@ struct FormatStyle { /// the next line without calling this bin-packing. bool AllowAllParametersOnNextLine; + /// \brief Allow putting the return type of a function onto its own line. + bool AllowReturnTypeOnItsOwnLine; + /// \brief If the constructor initializers don't fit on a line, put each /// initializer on its own line. bool ConstructorInitializerAllOnOneLineOrOnePerLine; diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index 3b5dfc1abd..2199781735 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -176,6 +176,7 @@ FormatStyle getLLVMStyle() { LLVMStyle.SpacesBeforeTrailingComments = 1; LLVMStyle.BinPackParameters = true; LLVMStyle.AllowAllParametersOnNextLine = true; + LLVMStyle.AllowReturnTypeOnItsOwnLine = true; LLVMStyle.ConstructorInitializerAllOnOneLineOrOnePerLine = false; LLVMStyle.AllowShortIfStatementsOnASingleLine = false; LLVMStyle.ObjCSpaceBeforeProtocolList = true; @@ -193,6 +194,7 @@ FormatStyle getGoogleStyle() { GoogleStyle.SpacesBeforeTrailingComments = 2; GoogleStyle.BinPackParameters = false; GoogleStyle.AllowAllParametersOnNextLine = true; + GoogleStyle.AllowReturnTypeOnItsOwnLine = false; GoogleStyle.ConstructorInitializerAllOnOneLineOrOnePerLine = true; GoogleStyle.AllowShortIfStatementsOnASingleLine = false; GoogleStyle.ObjCSpaceBeforeProtocolList = false; @@ -1628,7 +1630,7 @@ private: // Don't break at ':' if identifier before it can beak. return false; } - if (Right.Type == TT_StartOfName) + if (Right.Type == TT_StartOfName && Style.AllowReturnTypeOnItsOwnLine) return true; if (Right.is(tok::colon) && Right.Type == TT_ObjCMethodExpr) return false; diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 6b9b84de26..bdc5f9a5c5 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -1511,6 +1511,9 @@ TEST_F(FormatTest, BreaksFunctionDeclarations) { "TypeSpecDecl *\n" "TypeSpecDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L,\n" " IdentifierIn *II, Type *T) {\n}"); + verifyGoogleFormat( + "TypeSpecDecl* TypeSpecDecl::Create(\n" + " ASTContext& C, DeclContext* DC, SourceLocation L) {\n}"); } TEST_F(FormatTest, LineStartsWithSpecialCharacter) {