https://github.com/owenca updated https://github.com/llvm/llvm-project/pull/144255
>From e959ae809abb119effd17534c199f1e6c174d749 Mon Sep 17 00:00:00 2001 From: Owen Pan <owenpi...@gmail.com> Date: Sun, 15 Jun 2025 01:42:20 -0700 Subject: [PATCH 1/2] [clang-format][NFC] Clean up DisallowLineBreaks lambda See also https://github.com/llvm/llvm-project/pull/141576/files#r2141808121 --- clang/lib/Format/ContinuationIndenter.cpp | 78 ++++++++++++----------- 1 file changed, 42 insertions(+), 36 deletions(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index 424b6dbc0da79..22a90be1e024d 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -329,9 +329,9 @@ bool ContinuationIndenter::canBreak(const LineState &State) { // statement and we are aligning lambda blocks to their signatures. if (Previous.is(tok::l_brace) && State.Stack.size() > 1 && State.Stack[State.Stack.size() - 2].NestedBlockInlined && - State.Stack[State.Stack.size() - 2].HasMultipleNestedBlocks && - Style.LambdaBodyIndentation == FormatStyle::LBI_Signature) { - return false; + State.Stack[State.Stack.size() - 2].HasMultipleNestedBlocks) { + return Style.isCpp() && + Style.LambdaBodyIndentation == FormatStyle::LBI_OuterScope; } // Don't break after very short return types (e.g. "void") as that is often @@ -706,42 +706,48 @@ void ContinuationIndenter::addTokenOnCurrentLine(LineState &State, bool DryRun, const FormatToken &Previous = *State.NextToken->Previous; auto &CurrentState = State.Stack.back(); - bool DisallowLineBreaksOnThisLine = - Style.LambdaBodyIndentation == FormatStyle::LBI_Signature && - // Deal with lambda arguments in C++. The aim here is to ensure that we - // don't over-indent lambda function bodies when lambdas are passed as - // arguments to function calls. We do this by ensuring that either all - // arguments (including any lambdas) go on the same line as the function - // call, or we break before the first argument. - Style.isCpp() && [&] { - // For example, `/*Newline=*/false`. - if (Previous.is(TT_BlockComment) && Current.SpacesRequiredBefore == 0) - return false; - const auto *PrevNonComment = Current.getPreviousNonComment(); - if (!PrevNonComment || PrevNonComment->isNot(tok::l_paren)) - return false; - if (Current.isOneOf(tok::comment, tok::l_paren, TT_LambdaLSquare)) - return false; - auto BlockParameterCount = PrevNonComment->BlockParameterCount; - if (BlockParameterCount == 0) - return false; + // Deal with lambda arguments in C++. The aim here is to ensure that we don't + // over-indent lambda function bodies when lambdas are passed as arguments to + // function calls. We do this by ensuring that either all arguments (including + // any lambdas) go on the same line as the function call, or we break before + // the first argument. + auto DisallowLineBreaks = [&] { + if (!Style.isCpp() || + Style.LambdaBodyIndentation == FormatStyle::LBI_OuterScope) { + return false; + } - // Multiple lambdas in the same function call. - if (BlockParameterCount > 1) - return true; + // For example, `/*Newline=*/false`. + if (Previous.is(TT_BlockComment) && Current.SpacesRequiredBefore == 0) + return false; - // A lambda followed by another arg. - if (!PrevNonComment->Role) - return false; - auto Comma = PrevNonComment->Role->lastComma(); - if (!Comma) - return false; - auto Next = Comma->getNextNonComment(); - return Next && - !Next->isOneOf(TT_LambdaLSquare, tok::l_brace, tok::caret); - }(); + if (Current.isOneOf(tok::comment, tok::l_paren, TT_LambdaLSquare)) + return false; + + const auto *Prev = Current.getPreviousNonComment(); + if (!(Prev && Prev->is(tok::l_paren))) + return false; + + if (Prev->BlockParameterCount == 0) + return false; + + // Multiple lambdas in the same function call. + if (Prev->BlockParameterCount > 1) + return true; + + // A lambda followed by another arg. + if (!Prev->Role) + return false; + + const auto *Comma = Prev->Role->lastComma(); + if (!Comma) + return false; + + const auto *Next = Comma->getNextNonComment(); + return Next && !Next->isOneOf(TT_LambdaLSquare, tok::l_brace, tok::caret); + }; - if (DisallowLineBreaksOnThisLine) + if (DisallowLineBreaks()) State.NoLineBreak = true; if (Current.is(tok::equal) && >From 19ec34182f1052981613b313c746875804632a7b Mon Sep 17 00:00:00 2001 From: Owen Pan <owenpi...@gmail.com> Date: Sun, 15 Jun 2025 17:15:45 -0700 Subject: [PATCH 2/2] Restore the style of `!Ptr || !Ptr->` --- clang/lib/Format/ContinuationIndenter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp index 22a90be1e024d..b4745477b96ef 100644 --- a/clang/lib/Format/ContinuationIndenter.cpp +++ b/clang/lib/Format/ContinuationIndenter.cpp @@ -725,7 +725,7 @@ void ContinuationIndenter::addTokenOnCurrentLine(LineState &State, bool DryRun, return false; const auto *Prev = Current.getPreviousNonComment(); - if (!(Prev && Prev->is(tok::l_paren))) + if (!Prev || Prev->isNot(tok::l_paren)) return false; if (Prev->BlockParameterCount == 0) _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits