================
@@ -147,7 +147,8 @@ static bool startsNextOperand(const FormatToken &Current) {
// Returns \c true if \c Current is a binary operation that must break.
static bool mustBreakBinaryOperation(const FormatToken &Current,
const FormatStyle &Style) {
- return Style.BreakBinaryOperations != FormatStyle::BBO_Never &&
+ return Current.CanBreakBefore &&
----------------
andergnet wrote:
That's hard to put in words, I'll try.
Part of the issue is that `>>` are two tokens and `<<` is only one, and there
is an extra step in the processing.
The algorithm tries all possible solutions, split or not to split the line at
every point.
During the processing it reaches this line:
https://github.com/llvm/llvm-project/blob/602e7a81e23c4e7b481494cd92e754ad01aa9007/clang/lib/Format/ContinuationIndenter.cpp#L904
When it's a variable name, the first `>`or the token `<<` it behaves as it
should. For a variable mustBreak returns false: it's not a binary operation,
and for the others returns according to the format style. However, before the
second `<` it does not behave well, because it's a binary operator and tries to
apply the format style accordingly (the same way it does for the others) and
returns must break to `true`. This in turn causes `CurrentState.NoLineBreak =
true;` which prevents further analyzing this solution branch which is valid.
What I'm trying to do is force must break to be `false` when the token format
says it `CanBreakBefore == false`, because it shouldn't be a problem not to
break in a place not allowed to break. In the operator `<<` is not relevant
because every time it enters this path `CanBreakBefore == true`.
If you still have questions, do not hesitate to come back. It is complicated,
it took me a while to figure it out what was going on.
https://github.com/llvm/llvm-project/pull/122282
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits