prettier-java
prettier-java copied to clipboard
fix: hug lambdas without blocks
What changed with this PR:
Argument "hugging" is now aligned much more closely with Prettier JavaScript. Specifically, lambdas without blocks are "huggable" again.
Example
Input
class T {
public Semver getMaven() {
return describe()
.map(v -> null == v ? PRE_VERSION : v)
.map(Semver::coerce)
.map(v -> Objects.equals(v.getVersion(), PRE_VERSION) ? v.withPreRelease(SNAPSHOT) : v)
.map(
v ->
v
.getPreRelease()
.stream()
.filter(p -> p.matches("^\\d+-+g\\p{XDigit}{7}$"))
.findFirst()
.map(p -> v.withClearedPreRelease().withPreRelease(SNAPSHOT).withBuild(p))
.orElse(v)
)
.map(v -> new MavenSemver(v.getVersion()))
.get();
}
void t() {
aaaaaaaaaaaaaaaaaaaaaaaa((bbbbbbbbbbbbbbbbbbbbbbbb, cccccccccccccccccccccccc, dddddddddddddddddddddddd) -> eeeeeeeeeeeeeeeeeeeeeeee.ffffffffffffffffffffffff());
a.b(c -> d -> eeeeeeeeee.ffffffffff(gggggggggg, hhhhhhhhhh, iiiiiiiiii, jjjjjjjjjj, kkkkkkkkkk));
a.b(c -> d && eeeeeeeeee.ffffffffff() ? g && hhhhhhhhhh.iiiiiiiiii() : j && kkkkkkkkkk.llllllllll());
a.b(c -> d && eeeeeeeeee.ffffffffff(gggggggggg, hhhhhhhhhh, iiiiiiiiii, jjjjjjjjjj, kkkkkkkkkk) > 0);
a.b(c, (c0, c1) -> d && eeeeeeeeee.ffffffffff(gggggggggg, hhhhhhhhhh, iiiiiiiiii, jjjjjjjjjj, kkkkkkkkkk) > 0);
a.b(c -> eeeeeeeeee.ffffffffff(gggggggggg, hhhhhhhhhh, iiiiiiiiii, jjjjjjjjjj, kkkkkkkkkk) > 0);
a.b(c, (c0, c1) -> eeeeeeeeee.ffffffffff(gggggggggg, hhhhhhhhhh, iiiiiiiiii, jjjjjjjjjj, kkkkkkkkkk) > 0);
a.b(c -> d && eeeeeeeeee.ffffffffff(gggggggggg, hhhhhhhhhh, iiiiiiiiii, jjjjjjjjjj, kkkkkkkkkk));
a.b(c, (c0, c1) -> d && eeeeeeeeee.ffffffffff(gggggggggg, hhhhhhhhhh, iiiiiiiiii, jjjjjjjjjj, kkkkkkkkkk));
a.b(c -> eeeeeeeeee.ffffffffff(gggggggggg, hhhhhhhhhh, iiiiiiiiii, jjjjjjjjjj, kkkkkkkkkk));
a.b(c -> {
eeeeeeeeee.ffffffffff(gggggggggg, hhhhhhhhhh, iiiiiiiiii, jjjjjjjjjj, kkkkkkkkkk);
});
a.b((c0, c1) -> eeeeeeeeee.ffffffffff(gggggggggg, hhhhhhhhhh, iiiiiiiiii, jjjjjjjjjj, kkkkkkkkkk));
a.b(c, (c0, c1) -> eeeeeeeeee.ffffffffff(gggggggggg, hhhhhhhhhh, iiiiiiiiii, jjjjjjjjjj, kkkkkkkkkk));
}
}
Output
class T {
public Semver getMaven() {
return describe()
.map(v -> null == v ? PRE_VERSION : v)
.map(Semver::coerce)
.map(v ->
Objects.equals(v.getVersion(), PRE_VERSION)
? v.withPreRelease(SNAPSHOT)
: v
)
.map(v ->
v
.getPreRelease()
.stream()
.filter(p -> p.matches("^\\d+-+g\\p{XDigit}{7}$"))
.findFirst()
.map(p ->
v.withClearedPreRelease().withPreRelease(SNAPSHOT).withBuild(p)
)
.orElse(v)
)
.map(v -> new MavenSemver(v.getVersion()))
.get();
}
void t() {
aaaaaaaaaaaaaaaaaaaaaaaa(
(
bbbbbbbbbbbbbbbbbbbbbbbb,
cccccccccccccccccccccccc,
dddddddddddddddddddddddd
) -> eeeeeeeeeeeeeeeeeeeeeeee.ffffffffffffffffffffffff()
);
a.b(
c ->
d ->
eeeeeeeeee.ffffffffff(
gggggggggg,
hhhhhhhhhh,
iiiiiiiiii,
jjjjjjjjjj,
kkkkkkkkkk
)
);
a.b(c ->
d && eeeeeeeeee.ffffffffff()
? g && hhhhhhhhhh.iiiiiiiiii()
: j && kkkkkkkkkk.llllllllll()
);
a.b(
c ->
d &&
eeeeeeeeee.ffffffffff(
gggggggggg,
hhhhhhhhhh,
iiiiiiiiii,
jjjjjjjjjj,
kkkkkkkkkk
) >
0
);
a.b(
c,
(c0, c1) ->
d &&
eeeeeeeeee.ffffffffff(
gggggggggg,
hhhhhhhhhh,
iiiiiiiiii,
jjjjjjjjjj,
kkkkkkkkkk
) >
0
);
a.b(
c ->
eeeeeeeeee.ffffffffff(
gggggggggg,
hhhhhhhhhh,
iiiiiiiiii,
jjjjjjjjjj,
kkkkkkkkkk
) >
0
);
a.b(
c,
(c0, c1) ->
eeeeeeeeee.ffffffffff(
gggggggggg,
hhhhhhhhhh,
iiiiiiiiii,
jjjjjjjjjj,
kkkkkkkkkk
) >
0
);
a.b(
c ->
d &&
eeeeeeeeee.ffffffffff(
gggggggggg,
hhhhhhhhhh,
iiiiiiiiii,
jjjjjjjjjj,
kkkkkkkkkk
)
);
a.b(
c,
(c0, c1) ->
d &&
eeeeeeeeee.ffffffffff(
gggggggggg,
hhhhhhhhhh,
iiiiiiiiii,
jjjjjjjjjj,
kkkkkkkkkk
)
);
a.b(c ->
eeeeeeeeee.ffffffffff(
gggggggggg,
hhhhhhhhhh,
iiiiiiiiii,
jjjjjjjjjj,
kkkkkkkkkk
)
);
a.b(c -> {
eeeeeeeeee.ffffffffff(
gggggggggg,
hhhhhhhhhh,
iiiiiiiiii,
jjjjjjjjjj,
kkkkkkkkkk
);
});
a.b((c0, c1) ->
eeeeeeeeee.ffffffffff(
gggggggggg,
hhhhhhhhhh,
iiiiiiiiii,
jjjjjjjjjj,
kkkkkkkkkk
)
);
a.b(c, (c0, c1) ->
eeeeeeeeee.ffffffffff(
gggggggggg,
hhhhhhhhhh,
iiiiiiiiii,
jjjjjjjjjj,
kkkkkkkkkk
)
);
}
}
Relative issues or prs:
Closes #650