Skip to content

Commit 4594013

Browse files
committed
Improve lambda formatting
#19 The style guide says: "A line is never broken adjacent to the arrow in a lambda, except that a break may come immediately after the arrow if the body of the lambda consists of a single unbraced expression." There are two changes here: 1. Don't put a newline after the arrow. 2. When the only argument to a function is a lambda, don't put a newline after the open-paren of the function. I think this newline was going in because a lambda is a single expression that is longer than (the remainder of) a line. But generally, it's prettier to break inside the lambda.
1 parent 02de39a commit 4594013

File tree

5 files changed

+48
-66
lines changed

5 files changed

+48
-66
lines changed

Diff for: core/src/main/java/com/google/googlejavaformat/java/JavaInputAstVisitor.java

+11-11
Original file line numberDiff line numberDiff line change
@@ -1163,7 +1163,6 @@ public Void visitLabeledStatement(LabeledStatementTree node, Void unused) {
11631163
@Override
11641164
public Void visitLambdaExpression(LambdaExpressionTree node, Void unused) {
11651165
sync(node);
1166-
boolean statementBody = node.getBodyKind() == LambdaExpressionTree.BodyKind.STATEMENT;
11671166
boolean parens = builder.peekToken().equals(Optional.of("("));
11681167
builder.open(parens ? plusFour : ZERO);
11691168
if (parens) {
@@ -1184,12 +1183,7 @@ public Void visitLambdaExpression(LambdaExpressionTree node, Void unused) {
11841183
builder.close();
11851184
builder.space();
11861185
builder.op("->");
1187-
builder.open(statementBody ? ZERO : plusFour);
1188-
if (statementBody) {
1189-
builder.space();
1190-
} else {
1191-
builder.breakOp(" ");
1192-
}
1186+
builder.space();
11931187
if (node.getBody().getKind() == Tree.Kind.BLOCK) {
11941188
visitBlock(
11951189
(BlockTree) node.getBody(),
@@ -1199,7 +1193,6 @@ public Void visitLambdaExpression(LambdaExpressionTree node, Void unused) {
11991193
} else {
12001194
scan(node.getBody(), null);
12011195
}
1202-
builder.close();
12031196
return null;
12041197
}
12051198

@@ -2759,7 +2752,10 @@ void addTypeArguments(List<? extends Tree> typeArguments, Indent plusIndent) {
27592752
* @param plusIndent the extra indent for the arguments
27602753
*/
27612754
void addArguments(List<? extends ExpressionTree> arguments, Indent plusIndent) {
2762-
builder.open(plusIndent);
2755+
boolean singleLambdaArg = arguments.size() == 1 && arguments.get(0) instanceof JCTree.JCLambda;
2756+
if (!singleLambdaArg) {
2757+
builder.open(plusIndent);
2758+
}
27632759
token("(");
27642760
if (!arguments.isEmpty()) {
27652761
if (arguments.size() % 2 == 0 && argumentsAreTabular(arguments) == 2) {
@@ -2793,12 +2789,16 @@ void addArguments(List<? extends ExpressionTree> arguments, Indent plusIndent) {
27932789
builder.close();
27942790
builder.close();
27952791
} else {
2796-
builder.breakOp();
2792+
if (!singleLambdaArg) {
2793+
builder.breakOp();
2794+
}
27972795
argList(arguments);
27982796
}
27992797
}
28002798
token(")");
2801-
builder.close();
2799+
if (!singleLambdaArg) {
2800+
builder.close();
2801+
}
28022802
}
28032803

28042804
private void argList(List<? extends ExpressionTree> arguments) {

Diff for: core/src/test/resources/com/google/googlejavaformat/java/testdata/B20128760.output

+7-14
Original file line numberDiff line numberDiff line change
@@ -89,19 +89,12 @@ class B20128760 {
8989
{
9090
Stream<ItemKey> itemIdsStream =
9191
stream(members)
92-
.flatMap(
93-
m ->
94-
m.getFieldValues()
95-
.entrySet()
96-
.stream()
97-
.filter(fv -> itemLinkFieldIds.contains(fv.getKey()))
98-
.flatMap(
99-
fv ->
100-
FieldDTO.deserializeStringToListOfStrings(fv.getValue())
101-
.stream()
102-
.map(
103-
id ->
104-
new ItemKey(
105-
fieldsById.get(fv.getKey()).getItemTypeId(), id))));
92+
.flatMap(m -> m.getFieldValues()
93+
.entrySet()
94+
.stream()
95+
.filter(fv -> itemLinkFieldIds.contains(fv.getKey()))
96+
.flatMap(fv -> FieldDTO.deserializeStringToListOfStrings(fv.getValue())
97+
.stream()
98+
.map(id -> new ItemKey(fieldsById.get(fv.getKey()).getItemTypeId(), id))));
10699
}
107100
}

Diff for: core/src/test/resources/com/google/googlejavaformat/java/testdata/B21305044.output

+13-15
Original file line numberDiff line numberDiff line change
@@ -37,22 +37,20 @@ class B21305044 {
3737
{
3838
Function f = () -> moderatelyLongResult;
3939
Function f =
40-
() ->
41-
breakableResult
42-
+ breakableResult
43-
+ breakableResult
44-
+ breakableResult
45-
+ breakableResult
46-
+ breakableResult
47-
+ breakableResult
48-
+ breakableResult
49-
+ breakableResult;
40+
() -> breakableResult
41+
+ breakableResult
42+
+ breakableResult
43+
+ breakableResult
44+
+ breakableResult
45+
+ breakableResult
46+
+ breakableResult
47+
+ breakableResult
48+
+ breakableResult;
5049
Function f =
51-
() ->
52-
System.err.println(
53-
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
50+
() -> System.err.println(
51+
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
5452
Function f =
55-
(someParam) ->
56-
System.err.println("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
53+
(someParam) -> System.err.println(
54+
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
5755
}
5856
}

Diff for: core/src/test/resources/com/google/googlejavaformat/java/testdata/B22873322.output

+8-14
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,15 @@
11
class B22873322 {
22
{
3-
f(
4-
param ->
5-
veryLooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongExpr(
6-
param));
7-
f(
8-
(param1, param2) ->
9-
veryLooooooooooooooooooooooooooooooooooooooooooooooooongExpr(param1, param2));
10-
f(
11-
(int param) ->
12-
veryLooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongExpr(param));
13-
f(
14-
(param1, param2) -> {
3+
f(param -> veryLooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongExpr(
4+
param));
5+
f((param1, param2) -> veryLooooooooooooooooooooooooooooooooooooooooooooooooongExpr(
6+
param1, param2));
7+
f((int param) -> veryLooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongExpr(
8+
param));
9+
f((param1, param2) -> {
1510
return expr(param1, param2);
1611
});
17-
f(
18-
(param1, param2) -> {
12+
f((param1, param2) -> {
1913
Object foo = expr(param1, param2);
2014
return foo;
2115
});

Diff for: core/src/test/resources/com/google/googlejavaformat/java/testdata/B33358723.output

+9-12
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,20 @@ class B33358723 {
22
{
33
f(
44
//
5-
x ->
6-
System.err.println(
7-
//
8-
"hello"));
5+
x -> System.err.println(
6+
//
7+
"hello"));
98
f(
109
//
1110
( //
12-
x) ->
13-
System.err.println(
14-
//
15-
"hello"));
11+
x) -> System.err.println(
12+
//
13+
"hello"));
1614
f(
1715
//
1816
(int //
19-
x) ->
20-
System.err.println(
21-
//
22-
"hello"));
17+
x) -> System.err.println(
18+
//
19+
"hello"));
2320
}
2421
}

0 commit comments

Comments
 (0)