TT_InheritanceColon,
TT_InlineASMColon,
TT_JavaAnnotation,
+ TT_LambdaArrow,
TT_LambdaLSquare,
TT_LeadingJavaAnnotation,
TT_LineComment,
bool is(tok::TokenKind Kind) const { return Tok.is(Kind); }
+ bool is(TokenType TT) const { return Type == TT; }
+
bool is(const IdentifierInfo *II) const {
return II && II == Tok.getIdentifierInfo();
}
Current.Type = TT_StartOfName;
} else if (Current.is(tok::kw_auto)) {
AutoFound = true;
+ } else if (Current.is(tok::arrow) &&
+ Style.Language == FormatStyle::LK_Java) {
+ Current.Type = TT_LambdaArrow;
} else if (Current.is(tok::arrow) && AutoFound &&
Line.MustBeDeclaration && Current.NestingLevel == 0) {
Current.Type = TT_TrailingReturnArrow;
else if (NextNonComment && NextNonComment->is(tok::colon) &&
NextNonComment->Type == TT_DictLiteral)
return prec::Comma;
+ else if (Current->is(TT_LambdaArrow))
+ return prec::Comma;
else if (Current->is(tok::semi) || Current->Type == TT_InlineASMColon ||
Current->Type == TT_SelectorName ||
(Current->is(tok::comment) && NextNonComment &&
if (Left.is(Keywords.kw_var))
return true;
} else if (Style.Language == FormatStyle::LK_Java) {
+ if (Left.is(TT_LambdaArrow) || Right.is(TT_LambdaArrow))
+ return true;
if (Left.is(Keywords.kw_synchronized) && Right.is(tok::l_paren))
return Style.SpaceBeforeParens != FormatStyle::SBPO_Never;
if (Left.isOneOf(tok::kw_static, tok::kw_public, tok::kw_private,
getStyleWithColumns(40));
}
+TEST_F(FormatTestJava, FormatsLambdas) {
+ verifyFormat("(aaaaaaaaaa, bbbbbbbbbb) -> aaaaaaaaaa + bbbbbbbbbb;");
+ verifyFormat("(aaaaaaaaaa, bbbbbbbbbb)\n"
+ " -> aaaaaaaaaa + bbbbbbbbbb;",
+ getStyleWithColumns(40));
+ verifyFormat("Runnable someLambda = () -> DoSomething();");
+ verifyFormat("Runnable someLambda = () -> {\n"
+ " DoSomething();\n"
+ "}");
+
+ verifyFormat("Runnable someLambda =\n"
+ " (int aaaaa) -> DoSomething(aaaaa);",
+ getStyleWithColumns(40));
+}
+
} // end namespace tooling
} // end namespace clang