prettier-java icon indicating copy to clipboard operation
prettier-java copied to clipboard

fix: hug lambdas without blocks

Open jtkiesel opened this issue 11 months ago • 0 comments

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

jtkiesel avatar Mar 05 '24 08:03 jtkiesel