[clang] [clang-format] Don't apply severe penalty if no possible column formats (PR #76675)

Björn Schäpers via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 2 11:04:06 PST 2024


HazardyKnusperkeks wrote:

> > I think that's not the right way to fix the issue.
> > Why are the 2 lines formatted differently? It seems to me that this fixes the symptom, not the cause.
> 
> Because for the line where brackets are used it meets the condition in the next `if` statement down:
> 
> https://github.com/llvm/llvm-project/blob/7e405eb722e40c79b7726201d0f76b5dab34ba0f/clang/lib/Format/FormatToken.cpp#L122-L125
> 
> ... and a penalty of zero is returned. Similar exclusion exists for precomputing the column formats:
> 
> https://github.com/llvm/llvm-project/blob/7e405eb722e40c79b7726201d0f76b5dab34ba0f/clang/lib/Format/FormatToken.cpp#L189-L192
> 
> But this ultimately ends up simply as a performance optimization as they're never considered later in any case.
> 
> Whereas if the braces are used instead of brackets it does not meet the _not a left brace_ condition, and gets to the severe penalty return:
> 
> https://github.com/llvm/llvm-project/blob/7e405eb722e40c79b7726201d0f76b5dab34ba0f/clang/lib/Format/FormatToken.cpp#L136-L140
> 
> This is because suitable column formats are not found, as there was less than 5 commas found in the list (there's other conditions dependent on style configuration further up) when precomputing the column formats, and so none are generated:
> 
> https://github.com/llvm/llvm-project/blob/7e405eb722e40c79b7726201d0f76b5dab34ba0f/clang/lib/Format/FormatToken.cpp#L271-L274
> 
> Seems a little odd to return severe penalty if no column formats are available as opposed to having them, but none fit right now.
> 
> But I'm thinking maybe better to somehow add a condition that if the left brace appears within a short lambda body that'll end up on a single line then a penalty of zero is also returned. More/better targeted change.
> 
> Ultimately I believe comes down to finding a good justification to return zero penalty when the braces are used inside lambda bodies. Maybe affects other _short_ functions too like inlines - need to check.

Only now I see the difference between the two lines...

https://github.com/llvm/llvm-project/pull/76675


More information about the cfe-commits mailing list