From 7a31af140b3a7beada378700a4795e38dd886188 Mon Sep 17 00:00:00 2001 From: Daniel Jasper Date: Fri, 25 Jan 2013 15:43:32 +0000 Subject: [PATCH] Fix some alignment and line break decisions. This combines two small changes: 1) Put a penalty on breaking after "<" 2) Only produce a hanging indent when parameters are separated by commas. Before: aaaaaaaaaaaaaaaaaaaaaaaa< aaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaa>(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa); aaaaaa(new Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa( aaaaaaaaaaaaaaaaaaaaaaaaaaaaa)); After: aaaaaaaaaaaaaaaaaaaaaaaa( aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa); aaaaaa(new Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa( aaaaaaaaaaaaaaaaaaaaaaaaaaaaa)); This changes one ObjC test, but AFAICT this is not according to any style guide (neither before nor after). We probably should be aligning on the ":" there according to: http://google-styleguide.googlecode.com/svn/trunk/objcguide.xml?showone=Method_Invocations#Method_Invocations llvm-svn: 173457 --- clang/lib/Format/Format.cpp | 4 ++-- clang/unittests/Format/FormatTest.cpp | 13 +++++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index 1cac334125b3..ed7f35486c63 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -609,7 +609,7 @@ private: // Treat the condition inside an if as if it was a second function // parameter, i.e. let nested calls have an indent of 4. State.Stack.back().LastSpace = State.Column + 1; // 1 is length of "(". - else if (Spaces > 0 && ParenLevel != 0) + else if (Previous.is(tok::comma) && ParenLevel != 0) // Top-level spaces are exempt as that mostly leads to better results. State.Stack.back().LastSpace = State.Column; } @@ -706,7 +706,7 @@ private: if (Right.is(tok::colon) && Right.Type == TT_ObjCMethodExpr) return 20; - if (Left.is(tok::l_paren)) + if (Left.is(tok::l_paren) || Left.Type == TT_TemplateOpener) return 20; if (Left.is(tok::question) || Left.Type == TT_ConditionalExpr) diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 2250c03b583b..7d274832a304 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -909,7 +909,7 @@ TEST_F(FormatTest, ConstructorInitializers) { // This test takes VERY long when memoization is broken. std::string input = "Constructor()\n" - " : aaaa(a,\n"; + " : aaaa(a,\n"; for (unsigned i = 0, e = 80; i != e; ++i) { input += " a,\n"; } @@ -952,6 +952,12 @@ TEST_F(FormatTest, BreaksDesireably) { verifyFormat( "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&\n" " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);"); + verifyFormat( + "aaaaaa(new Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n" + " aaaaaaaaaaaaaaaaaaaaaaaaaaaaa));"); + verifyFormat( + "aaaaaa(aaa, new Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n" + " aaaaaaaaaaaaaaaaaaaaaaaaaaaaa));"); // This test case breaks on an incorrect memoization, i.e. an optimization not // taking into account the StopAt value. @@ -1202,6 +1208,9 @@ TEST_F(FormatTest, WrapsTemplateDeclarations) { "template \n" "void f();"); + verifyFormat( + "aaaaaaaaaaaaaaaaaaaaaaaa(\n" + " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);"); } TEST_F(FormatTest, WrapsAtNestedNameSpecifiers) { @@ -2071,7 +2080,7 @@ TEST_F(FormatTest, FormatObjCMethodExpr) { verifyFormat( "void f() {\n" " if ((self = [super initWithContentRect:contentRect styleMask:styleMask\n" - " backing:NSBackingStoreBuffered defer:YES]))"); + " backing:NSBackingStoreBuffered defer:YES]))"); verifyFormat("[foo checkThatBreakingAfterColonWorksOk:\n" " [bar ifItDoes:reduceOverallLineLengthLikeInThisCase]];");