[clang] [clang-format] Stop moving lambda to new line only to indent it more. (PR #141576)
Owen Pan via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 11 23:23:28 PDT 2025
================
@@ -325,13 +325,30 @@ bool ContinuationIndenter::canBreak(const LineState &State) {
if (Current.isMemberAccess() && CurrentState.ContainsUnwrappedBuilder)
return false;
- // Don't create a 'hanging' indent if there are multiple blocks in a single
- // statement and we are aligning lambda blocks to their signatures.
- if (Previous.is(tok::l_brace) && State.Stack.size() > 1 &&
+ // Force a lambda onto a new line so that we don't create a 'hanging' indent
+ // if there are multiple blocks in a single statement and we are aligning
+ // lambda blocks to their signatures.
+ if (Previous.is(tok::l_brace) && State.Stack.size() > 2 &&
State.Stack[State.Stack.size() - 2].NestedBlockInlined &&
State.Stack[State.Stack.size() - 2].HasMultipleNestedBlocks &&
Style.LambdaBodyIndentation == FormatStyle::LBI_Signature) {
- return false;
+ if (!Style.isCpp())
+ return false;
+
+ // Make sure to push lambdas to a new line when they are an argument with
+ // other arguments preceding them.
+ if (State.Stack[State.Stack.size() - 2].StartOfFunctionCall > 0)
+ return false;
+
+ // Only force a new line if it is not just going to create a worse hanging
+ // indent. Otherwise, based on the ContinuationIndentWidth, we could end up
+ // more indented than we would've been. To avoid odd looking breaks, make
+ // sure we save at least IndentWidth.
+ if (State.Stack[State.Stack.size() - 3].Indent +
+ Style.ContinuationIndentWidth + Style.IndentWidth <
+ State.Stack[State.Stack.size() - 2].Indent) {
----------------
owenca wrote:
```suggestion
if (State.Stack.size() > 2 &&
+ State.Stack[State.Stack.size() - 3].Indent +
+ Style.ContinuationIndentWidth + Style.IndentWidth <
+ State.Stack[State.Stack.size() - 2].Indent) {
```
https://github.com/llvm/llvm-project/pull/141576
More information about the cfe-commits
mailing list