clang-format: inconsistency in function arg layout (C++)

Hi, I've just boiled down an interesting C++ lambda formatting trait and would like to clarify the tool's behavior. Consider the following snippet (please view with a fixed-width font):

void f() {
something->One(
[this] {
Do1();
Do2();
},
1);
something->Two(1,
[this] {
Do1();
Do2();
},
1);
}

There is an inconsistency in the way lambda args are formatted, depending on whether it is first (the "One()" call above) or not (the "Two()" call above). Is there some internal guide that the tool uses to decide between the two layouts? Or is it just an artifact of the implementation?

More generally, would you entertain a patch that forces the format one way or another? (Perhaps even with a user-defined setting?)

Thanks,
Oleg.

OK, the functionality is a special case introduced in 2014 here: 8228889b01404d7e59270b1f97a83977531a7748.

The minimal hack is to check for the preceding comma... but that breaks some "literal" cases... So, I need to make these selections even more particular (to either exclude literals or only include lambdas). Does this sound right?

0001-lib-Format-tweaked-another-case-of-lambda-formatting.patch (2.14 KB)

Hi Oleg,

could you please send that patch to reviews.llvm.org. That makes it easier to review and discuss on the code.

Best, Jonas

The patch was a baby step in right direction, but it does not function properly. Let me try to make it work, I’ll post it then.

Hey Jonas, here is a patch that adds the functionality I described (under BinPackArguments=false).

Could you take a look please?

Thanks!
Oleg.