-
Notifications
You must be signed in to change notification settings - Fork 15.2k
[clang-format] Fix erroneous BraceWrapping.BeforeLambdaBody column calcs #76673
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
jamesg-nz
wants to merge
4
commits into
llvm:main
Choose a base branch
from
jamesg-nz:jg-beforelambdabody-calc-fixes
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 2 commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
0488584
[clang-format] Fix erroneous BraceWrapping.BeforeLambdaBody column calcs
jamesg-nz 346e7da
Per feedback, remove loops from test.
jamesg-nz 4f35985
Merge branch 'main' into jg-beforelambdabody-calc-fixes
jamesg-nz 6c55959
Merge branch 'main' into jg-beforelambdabody-calc-fixes
jamesg-nz File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I noticed there is code in
TokenAnnotatorthan can setMustBreakBeforeon the lambda left brace token:llvm-project/clang/lib/Format/TokenAnnotator.cpp
Lines 5297 to 5299 in 0e01c72
Introduced in 37c2233 seemingly for code like this:
Both before this current PR and here the
MustBreakBeforefield of theCurrenttoken is ignored. Should behavior change to observe this and thus force a break?Would seem the BraceWrapping.BeforeLambdaBody setting would then force lambda across multiple lines if on, but not if off.
Should the code in
TokenAnnotatorbe changed and maybe only setCanBreakBefore?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So as far as I put everything together we should break before the
{, ifBeforeLambdaBodyis set. Except for short lambdas, ifAllowShortLambdasOnASingleLinematches our lambda and it would fit on a single line. If the lambda has to be broken somewhere, it should break before{.What is needed to be changed I don't know, but also have not the time to investigate. I'm willing to hear your analysis, or maybe @mydeveloperday can shed some light into the issue?
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@HazardyKnusperkeks - sorry late response. After looking into it, I don't believe there's an issue.
The code I was talking about above:
llvm-project/clang/lib/Format/TokenAnnotator.cpp
Lines 5297 to 5299 in 0e01c72
Results in
MustBreakBeforebeing set for the token (the left lambda brace), which therefore results inCanBreakBeforebeing set. The code exists as there's conditions (e.g.Left.is(TT_PointerOrReference)) inTokenAnnotator::canBreakBefore()which returnfalsefor the left lambda brace in lambdas like these:It's the fact it sets
CanBreakBeforethat matters so it enters the lambda section inContinuationIndenter::mustBreak().Just checking
Current.MatchingParen->MustBreakBeforeinside is sufficient asTokenAnnotator::mustBreakBefore()returnstruewhen it is called for the right lambda:llvm-project/clang/lib/Format/TokenAnnotator.cpp
Lines 5283 to 5293 in 0e01c72
Thus there is no need to look at
Current.MustBreakBefore. However the generic condition that checksCurrent.MustBreakBeforefor all tokens is in the condition for the nextif()statement down, so could move the lambdaif()statement down beneath that. But there's no need to do this at the moment.So this PR looks OK as-is with respect to this.