From b9caeacd0213ebbde79d096534b46603106e94b4 Mon Sep 17 00:00:00 2001 From: Daniel Jasper Date: Wed, 13 Feb 2013 20:33:44 +0000 Subject: Allow breaking after the return type in function declarations. This has so far been disabled for Google style, but should be done before breaking at nested name specifiers or in template parameters. Before (in Google style): template aaaaaaaa::aaaaa::aaaaaa aaaaaaaaaaaaaaaaaaaaaaaa< T>::aaaaaaa() {} After: template aaaaaaaa::aaaaa::aaaaaa aaaaaaaaaaaaaaaaaaaaaaaa::aaaaaaa() {} llvm-svn: 175074 --- clang/lib/Format/Format.cpp | 11 ++++++----- clang/lib/Format/TokenAnnotator.cpp | 4 +++- 2 files changed, 9 insertions(+), 6 deletions(-) (limited to 'clang/lib') diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index d8c02e2e18b..8c2128eb018 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -43,11 +43,11 @@ FormatStyle getLLVMStyle() { LLVMStyle.SpacesBeforeTrailingComments = 1; LLVMStyle.BinPackParameters = true; LLVMStyle.AllowAllParametersOfDeclarationOnNextLine = true; - LLVMStyle.AllowReturnTypeOnItsOwnLine = true; LLVMStyle.ConstructorInitializerAllOnOneLineOrOnePerLine = false; LLVMStyle.AllowShortIfStatementsOnASingleLine = false; LLVMStyle.ObjCSpaceBeforeProtocolList = true; LLVMStyle.PenaltyExcessCharacter = 1000000; + LLVMStyle.PenaltyReturnTypeOnItsOwnLine = 5; return LLVMStyle; } @@ -63,11 +63,11 @@ FormatStyle getGoogleStyle() { GoogleStyle.SpacesBeforeTrailingComments = 2; GoogleStyle.BinPackParameters = false; GoogleStyle.AllowAllParametersOfDeclarationOnNextLine = true; - GoogleStyle.AllowReturnTypeOnItsOwnLine = false; GoogleStyle.ConstructorInitializerAllOnOneLineOrOnePerLine = true; GoogleStyle.AllowShortIfStatementsOnASingleLine = false; GoogleStyle.ObjCSpaceBeforeProtocolList = false; GoogleStyle.PenaltyExcessCharacter = 1000000; + GoogleStyle.PenaltyReturnTypeOnItsOwnLine = 100; return GoogleStyle; } @@ -717,9 +717,10 @@ private: reconstructPath(State, Current->Previous); DEBUG({ if (Current->NewLine) { - llvm::errs() << "Penalty for splitting before " - << Current->State.NextToken->FormatTok.Tok.getName() - << ": " << Current->State.NextToken->SplitPenalty << "\n"; + llvm::errs() + << "Penalty for splitting before " + << Current->Previous->State.NextToken->FormatTok.Tok.getName() + << ": " << Current->Previous->State.NextToken->SplitPenalty << "\n"; } }); addTokenToState(Current->NewLine, false, State); diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index d2e19af56f1..4c365361040 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -847,6 +847,8 @@ unsigned TokenAnnotator::splitPenalty(const AnnotatedLine &Line, const AnnotatedToken &Left = *Tok.Parent; const AnnotatedToken &Right = Tok; + if (Right.Type == TT_StartOfName) + return Style.PenaltyReturnTypeOnItsOwnLine; if (Left.is(tok::l_brace) && Right.isNot(tok::l_brace)) return 50; if (Left.is(tok::equal) && Right.is(tok::l_brace)) @@ -1026,7 +1028,7 @@ bool TokenAnnotator::spaceRequiredBefore(const AnnotatedLine &Line, bool TokenAnnotator::canBreakBefore(const AnnotatedLine &Line, const AnnotatedToken &Right) { const AnnotatedToken &Left = *Right.Parent; - if (Right.Type == TT_StartOfName && Style.AllowReturnTypeOnItsOwnLine) + if (Right.Type == TT_StartOfName) return true; if (Right.is(tok::colon) && Right.Type == TT_ObjCMethodExpr) return false; -- cgit v1.2.3