[PATCH] D44609: [Clang-Format] New option BeforeLambdaBody to manage lambda line break inside function parameter call (in Allman style)
Francois JEAN via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Sep 4 15:02:31 PDT 2018
Wawha marked an inline comment as done.
Wawha 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 =
----------------
klimek wrote:
> 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?
Perhaps not always. I make that current implementation, because, I have some difficulty to make the other. I alreay tried to modified the code to have that :
```
TwoNestedLambdas([]()
{
return Call(
[]()
{
return 17;
});
});
```
With just a tabulation after the line return. But with no success for the moment.
I could try again to implement it, and why not, add an option to tell if we break or not before the lambda. And set it to false by default.
Repository:
rC Clang
https://reviews.llvm.org/D44609
More information about the cfe-commits
mailing list