diff options
Diffstat (limited to 'clang/lib/Format')
-rw-r--r-- | clang/lib/Format/ContinuationIndenter.cpp | 16 | ||||
-rw-r--r-- | clang/lib/Format/ContinuationIndenter.h | 2 |
2 files changed, 13 insertions, 5 deletions
diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index 97500ee..df44e69 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -1803,7 +1803,7 @@ void ContinuationIndenter::moveStatePastScopeOpener(LineState &State, } if (Current.MatchingParen && Current.is(BK_Block)) { - moveStateToNewBlock(State); + moveStateToNewBlock(State, Newline); return; } @@ -1991,7 +1991,7 @@ void ContinuationIndenter::moveStatePastScopeCloser(LineState &State) { } } -void ContinuationIndenter::moveStateToNewBlock(LineState &State) { +void ContinuationIndenter::moveStateToNewBlock(LineState &State, bool NewLine) { if (Style.LambdaBodyIndentation == FormatStyle::LBI_OuterScope && State.NextToken->is(TT_LambdaLBrace) && !State.Line->MightBeFunctionDecl) { @@ -2003,10 +2003,18 @@ void ContinuationIndenter::moveStateToNewBlock(LineState &State) { NestedBlockIndent + (State.NextToken->is(TT_ObjCBlockLBrace) ? Style.ObjCBlockIndentWidth : Style.IndentWidth); + + // Even when wrapping before lambda body, the left brace can still be added to + // the same line. This occurs when checking whether the whole lambda body can + // go on a single line. In this case we have to make sure there are no line + // breaks in the body, otherwise we could just end up with a regular lambda + // body without the brace wrapped. + bool NoLineBreak = Style.BraceWrapping.BeforeLambdaBody && !NewLine && + State.NextToken->is(TT_LambdaLBrace); + State.Stack.push_back(ParenState(State.NextToken, NewIndent, State.Stack.back().LastSpace, - /*AvoidBinPacking=*/true, - /*NoLineBreak=*/false)); + /*AvoidBinPacking=*/true, NoLineBreak)); State.Stack.back().NestedBlockIndent = NestedBlockIndent; State.Stack.back().BreakBeforeParameter = true; } diff --git a/clang/lib/Format/ContinuationIndenter.h b/clang/lib/Format/ContinuationIndenter.h index 057b85b..2598947 100644 --- a/clang/lib/Format/ContinuationIndenter.h +++ b/clang/lib/Format/ContinuationIndenter.h @@ -104,7 +104,7 @@ private: /// Update 'State' according to the next token being one of ")>}]". void moveStatePastScopeCloser(LineState &State); /// Update 'State' with the next token opening a nested block. - void moveStateToNewBlock(LineState &State); + void moveStateToNewBlock(LineState &State, bool NewLine); /// Reformats a raw string literal. /// |