clang-format: [Java] Basic lambda support.

llvm-svn: 222524
This commit is contained in:
Daniel Jasper 2014-11-21 12:14:12 +00:00
parent ee9af45b19
commit 8354ea84dd
3 changed files with 25 additions and 0 deletions

View File

@ -48,6 +48,7 @@ enum TokenType {
TT_InheritanceColon,
TT_InlineASMColon,
TT_JavaAnnotation,
TT_LambdaArrow,
TT_LambdaLSquare,
TT_LeadingJavaAnnotation,
TT_LineComment,
@ -271,6 +272,8 @@ struct FormatToken {
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();
}

View File

@ -786,6 +786,9 @@ private:
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;
@ -1167,6 +1170,8 @@ private:
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 &&
@ -1701,6 +1706,8 @@ bool TokenAnnotator::spaceRequiredBefore(const AnnotatedLine &Line,
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,

View File

@ -317,5 +317,20 @@ TEST_F(FormatTestJava, NeverAlignAfterReturn) {
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