This fixes llvm.org/PR16328 (at least partially).
Before:
SomeLoooooooooooooooooooooooooooooogType operator<<(
const SomeLooooooooogType &a, const SomeLooooooooogType &b);
After:
SomeLoooooooooooooooooooooooooooooogType
operator<<(const SomeLooooooooogType &a, const SomeLooooooooogType &b);
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@185908
91177308-0d34-0410-b5e6-
96231b3b80d8
State.Stack.back().VariablePos != 0) {
State.Column = State.Stack.back().VariablePos;
} else if (Previous.ClosesTemplateDeclaration ||
- (Current.Type == TT_StartOfName && State.ParenLevel == 0 &&
+ ((Current.Type == TT_StartOfName ||
+ Current.is(tok::kw_operator)) &&
+ State.ParenLevel == 0 &&
(!Style.IndentFunctionDeclarationAfterType ||
Line.StartsDefinition))) {
State.Column = State.Stack.back().Indent;
(Previous.ClosesTemplateDeclaration && State.ParenLevel == 0)))
return true;
- if (Current.Type == TT_StartOfName && Line.MightBeFunctionDecl &&
- State.Stack.back().BreakBeforeParameter && State.ParenLevel == 0)
+ if ((Current.Type == TT_StartOfName || Current.is(tok::kw_operator)) &&
+ Line.MightBeFunctionDecl && State.Stack.back().BreakBeforeParameter &&
+ State.ParenLevel == 0)
return true;
return false;
}
if (Left.is(tok::comma))
return 1;
- if (Right.Type == TT_StartOfName) {
+ if (Right.Type == TT_StartOfName || Right.is(tok::kw_operator)) {
if (Line.First->is(tok::kw_for) && Right.PartOfMultiVariableDeclStmt)
return 3;
else if (Line.MightBeFunctionDecl && Right.BindingStrength == 1)
bool TokenAnnotator::canBreakBefore(const AnnotatedLine &Line,
const FormatToken &Right) {
const FormatToken &Left = *Right.Previous;
- if (Right.Type == TT_StartOfName)
+ if (Right.Type == TT_StartOfName || Right.is(tok::kw_operator))
return true;
if (Right.is(tok::colon) &&
(Right.Type == TT_ObjCDictLiteral || Right.Type == TT_ObjCMethodExpr))
" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n"
" bbbb bbbb);");
+
+ // Treat overloaded operators like other functions.
+ verifyFormat("SomeLoooooooooooooooooooooooooogType\n"
+ "operator>(const SomeLoooooooooooooooooooooooooogType &other);");
+ verifyGoogleFormat(
+ "SomeLoooooooooooooooooooooooooooooogType operator<<(\n"
+ " const SomeLooooooooogType &a, const SomeLooooooooogType &b);");
}
TEST_F(FormatTest, BreaksFunctionDeclarationsWithTrailingTokens) {