================ @@ -583,20 +583,31 @@ bool ContinuationIndenter::mustBreak(const LineState &State) { return true; } - // If the return type spans multiple lines, wrap before the function name. - if (((Current.is(TT_FunctionDeclarationName) && - !State.Line->ReturnTypeWrapped && - // Don't break before a C# function when no break after return type. - (!Style.isCSharp() || - Style.AlwaysBreakAfterReturnType != FormatStyle::RTBS_None) && - // Don't always break between a JavaScript `function` and the function - // name. - !Style.isJavaScript()) || - (Current.is(tok::kw_operator) && Previous.isNot(tok::coloncolon))) && - Previous.isNot(tok::kw_template) && CurrentState.BreakBeforeParameter) { + const auto WrapBeforeName = [&]() { ---------------- XDeme wrote:
The original condition could be rewritten like this: ```cpp const auto WrapBeforeName = [&] { if(Previous.is(tok::kw_template) || !CurrentState.BreakBeforeParameter) return false; if((Current.isNot(tok::kw_operator) || Previous.is(tok::coloncolon)) && (Current.isNot(TT_FunctionDeclarationName) || State.Line->ReturnTypeWrapped)) return false; // Don't break before a C# function when no break after return type. return (!Style.isCSharp() || Style.AlwaysBreakAfterReturnType != FormatStyle::RTBS_None) && // Don't always break between a JavaScript `function` and the // function name. !Style.isJavaScript(); }; ``` The problem is that `Current.isNot(tok::kw_operator)` is returning false and then the last check will return true, forcing the return type of a operator overload to wrap. We could fix this by adding a `Curret.is(tok::kw_operator) return false` before that line like this: ```cpp const auto WrapBeforeName = [&] { if(Previous.is(tok::kw_template) || !CurrentState.BreakBeforeParameter) return false; if(Current.is(tok::kw_operator)) return false; if((Current.isNot(tok::kw_operator) || Previous.is(tok::coloncolon)) && (Current.isNot(TT_FunctionDeclarationName) || State.Line->ReturnTypeWrapped)) return false; return (!Style.isCSharp() || Style.AlwaysBreakAfterReturnType != FormatStyle::RTBS_None) && // Don't always break between a JavaScript `function` and the // function name. !Style.isJavaScript(); }; ``` I am not sure what the original conditional was exactly checking for, but my change didn't break any test. And for the `ReferenceAlignment: Left` with `BreakAfterAttributes: Always` not working on non-member operator overload, it fixed by just changing this condition. https://github.com/llvm/llvm-project/pull/74943 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits