From c79afdae8a2e12d1e8f27a2ae0a43dfca3b8283b Mon Sep 17 00:00:00 2001 From: Daniel Jasper Date: Fri, 18 Jan 2013 10:56:38 +0000 Subject: [PATCH] Reduce penalty for splitting between ")" and ".". ').' is likely part of a builder pattern statement. This is based upon a patch developed by Nico Weber. Thank you! Before: int foo() { return llvm::StringSwitch(name).StartsWith( ".eh_frame_hdr", ORDER_EH_FRAMEHDR).StartsWith( ".eh_frame", ORDER_EH_FRAME).StartsWith(".init", ORDER_INIT).StartsWith( ".fini", ORDER_FINI).StartsWith(".hash", ORDER_HASH).Default(ORDER_TEXT); } After: int foo() { return llvm::StringSwitch(name) .StartsWith(".eh_frame_hdr", ORDER_EH_FRAMEHDR) .StartsWith(".eh_frame", ORDER_EH_FRAME) .StartsWith(".init", ORDER_INIT).StartsWith(".fini", ORDER_FINI) .StartsWith(".hash", ORDER_HASH).Default(ORDER_TEXT); } Probably not ideal, but makes many cases much more readable. The changes to overriding-ftemplate-comments.cpp don't seem better or worse. We should address those soon. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172804 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Format/Format.cpp | 14 +++++++++----- test/Index/overriding-ftemplate-comments.cpp | 6 +++--- unittests/Format/FormatTest.cpp | 19 ++++++++++++++----- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index 50df593d85..1821937ec3 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -322,7 +322,7 @@ public: : Style(Style), SourceMgr(SourceMgr), Line(Line), FirstIndent(FirstIndent), RootToken(RootToken), Whitespaces(Whitespaces) { - Parameters.PenaltyIndentLevel = 15; + Parameters.PenaltyIndentLevel = 20; Parameters.PenaltyLevelDecrease = 30; Parameters.PenaltyExcessCharacter = 1000000; } @@ -674,8 +674,7 @@ private: (Left.isNot(tok::comma) && Left.isNot(tok::semi))) return 20; - if (Left.is(tok::semi) || Left.is(tok::comma) || - Left.ClosesTemplateDeclaration) + if (Left.is(tok::semi) || Left.is(tok::comma)) return 0; // In Objective-C method expressions, prefer breaking before "param:" over @@ -700,8 +699,11 @@ private: if (Level != prec::Unknown) return Level; - if (Right.is(tok::arrow) || Right.is(tok::period)) + if (Right.is(tok::arrow) || Right.is(tok::period)) { + if (Left.is(tok::r_paren)) + return 15; // Should be smaller than breaking at a nested comma. return 150; + } return 3; } @@ -746,7 +748,9 @@ private: if (NewLine && State.NextToken->Parent->is(tok::comma) && State.Stack.back().HasMultiParameterLine && !Style.BinPackParameters) return UINT_MAX; - if (!NewLine && State.NextToken->Type == TT_CtorInitializerColon) + if (!NewLine && (State.NextToken->Type == TT_CtorInitializerColon || + (State.NextToken->Parent->ClosesTemplateDeclaration && + State.Stack.size() == 1))) return UINT_MAX; unsigned CurrentPenalty = 0; diff --git a/test/Index/overriding-ftemplate-comments.cpp b/test/Index/overriding-ftemplate-comments.cpp index 50d4e87da2..8d4a577d96 100644 --- a/test/Index/overriding-ftemplate-comments.cpp +++ b/test/Index/overriding-ftemplate-comments.cpp @@ -74,13 +74,13 @@ void comment_to_html_conversion_21(); /// \tparam C3 Ccc 3 /// \tparam C4 Ccc 4 /// \tparam BBB Bbb -template class BBB> class AAA> +template class BBB > class AAA > void comment_to_html_conversion_22(); -// CHECK: FullCommentAsXML=[comment_to_html_conversion_22c:@FT@>2#T#t>2#T#t>2#T#Tcomment_to_html_conversion_22#template <class C1,\n template <class C2, template <class C3, class C4>\n class BBB > class AAA > void comment_to_html_conversion_22()C10 Ccc 1 AAA1 Zzz C2 Ccc 2 C3 Ccc 3 C4 Ccc 4 BBB Bbb] +// CHECK: FullCommentAsXML=[comment_to_html_conversion_22c:@FT@>2#T#t>2#T#t>2#T#Tcomment_to_html_conversion_22#template <class C1,\n template <class C2, template <class C3, class C4> class BBB >\n class AAA > void comment_to_html_conversion_22()C10 Ccc 1 AAA1 Zzz C2 Ccc 2 C3 Ccc 3 C4 Ccc 4 BBB Bbb] template class QQQ> class PPP> void comment_to_html_conversion_22(); -// CHECK: FullCommentAsXML=[comment_to_html_conversion_22c:@FT@>2#T#t>2#T#t>2#T#Tcomment_to_html_conversion_22#template <class CCC1,\n template <class CCC2, template <class CCC3, class CCC4>\n class QQQ > class PPP > void comment_to_html_conversion_22()CCC10 Ccc 1 PPP1 Zzz CCC2 Ccc 2 CCC3 Ccc 3 CCC4 Ccc 4 QQQ Bbb] +// CHECK: FullCommentAsXML=[comment_to_html_conversion_22c:@FT@>2#T#t>2#T#t>2#T#Tcomment_to_html_conversion_22#template <class CCC1,\n template <class CCC2, template <class CCC3, class CCC4> class QQQ >\n class PPP > void comment_to_html_conversion_22()CCC10 Ccc 1 PPP1 Zzz CCC2 Ccc 2 CCC3 Ccc 3 CCC4 Ccc 4 QQQ Bbb] diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 51904d7d3f..806707cb4c 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -932,9 +932,8 @@ TEST_F(FormatTest, FormatsOneParameterPerLineIfNecessary) { " aaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n" " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)));"); verifyGoogleFormat( - "aaaaaaaaaaaaaaa(aaaaaaaaa,\n" - " aaaaaaaaa,\n" - " aaaaaaaaaaaaaaaaaaaaaaa).aaaaaaaaaaaaaaaaaa();"); + "aaaaaaaaaaaaaaa(aaaaaaaaa, aaaaaaaaa, aaaaaaaaaaaaaaaaaaaaaaa)\n" + " .aaaaaaaaaaaaaaaaaa();"); verifyGoogleFormat( "somefunction(someotherFunction(ddddddddddddddddddddddddddddddddddd,\n" " ddddddddddddddddddddddddddddd),\n" @@ -949,6 +948,15 @@ TEST_F(FormatTest, FormatsOneParameterPerLineIfNecessary) { " a);"); } +TEST_F(FormatTest, FormatsBuilderPattern) { + verifyFormat( + "return llvm::StringSwitch(name)\n" + " .StartsWith(\".eh_frame_hdr\", ORDER_EH_FRAMEHDR)\n" + " .StartsWith(\".eh_frame\", ORDER_EH_FRAME).StartsWith(\".init\", ORDER_INIT)\n" + " .StartsWith(\".fini\", ORDER_FINI).StartsWith(\".hash\", ORDER_HASH)\n" + " .Default(ORDER_TEXT);\n"); +} + TEST_F(FormatTest, DoesNotBreakTrailingAnnotation) { verifyFormat("void aaaaaaaaaaaa(int aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)\n" " GUARDED_BY(aaaaaaaaaaaaa);"); @@ -1114,8 +1122,9 @@ TEST_F(FormatTest, WrapsTemplateDeclarations) { verifyFormat("template \n" "virtual void loooooooooooongFunction(int Param1, int Param2);"); verifyFormat( - "template void f(int Paaaaaaaaaaaaaaaaaaaaaaaaaaaaaaram1,\n" - " int Paaaaaaaaaaaaaaaaaaaaaaaaaaaaaaram2);"); + "template \n" + "void f(int Paaaaaaaaaaaaaaaaaaaaaaaaaaaaaaram1,\n" + " int Paaaaaaaaaaaaaaaaaaaaaaaaaaaaaaram2);"); verifyFormat( "template \n" "void looooooooooooooooooooongFunction(int Paaaaaaaaaaaaaaaaaaaaram1,\n" -- 2.40.0