[PATCH] D44609: [Clang-Format] New option BeforeLambdaBody to manage lambda line break inside function parameter call (in Allman style)

Manuel Klimek via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Sep 3 01:04:50 PDT 2018


klimek added inline comments.


================
Comment at: lib/Format/ContinuationIndenter.cpp:1307
+       (Style.BraceWrapping.BeforeLambdaBody && Current.Next != nullptr &&
+        Current.Next->is(TT_LambdaLSquare)));
   State.Stack.back().IsInsideObjCArrayLiteral =
----------------
Wawha wrote:
> klimek wrote:
> > klimek wrote:
> > > I think I misunderstood some of this the first time around (and thanks for bearing with me :) - iiuc we want to break for Allman even when there's only one nested block. I think I'll need to take another look when I'm back from vacation, unless Daniel or somebody else finds time before then (will be back in 1.5 weeks)
> > So, HasMultipleNestedBlocks should only be true if there are multiple nested blocks.
> > What tests break if you remove this change to HasMultipleNestedBlocks?
> All cases with only one lambda in parameter are break. The Lambda body with be put on the same line as the function and aligned with [] instead of putting the body [] on another line with just one simple indentation.
> 
> So if restore the line to :
> 
> ```
> State.Stack.back().HasMultipleNestedBlocks = Current.BlockParameterCount > 1;
> ```
> 
> Here some cases.
> FormatTest.cpp, ligne 11412:
> 
> ```
> // With my modification
> FunctionWithOneParam(
>     []()
>     {
>       // A cool function...
>       return 43;
>     });
> 
> // Without my modification
> FunctionWithOneParam([]()
>                      {
>                        // A cool function...
>                        return 43;
>                      });
> ```
> The "{" block of the lambda will be aligned on the "[" depending of the function name length.
> 
> 
> You have the same case with multiple lambdas (FormatTest.cpp, ligne 11433):
> 
> ```
> // With my modification
> TwoNestedLambdas(
>     []()
>     {
>       return Call(
>           []()
>           {
>             return 17;
>           });
>     });
> 
> // Without my modification
> TwoNestedLambdas([]()
>                  {
>                    return Call([]()
>                                {
>                                  return 17;
>                                });
>                  });
> ```
Do we want to always break before lambdas in Allman style?


Repository:
  rC Clang

https://reviews.llvm.org/D44609





More information about the cfe-commits mailing list