Giter VIP home page Giter VIP logo

Comments (7)

jhaber avatar jhaber commented on June 2, 2024 1

I think it would be weird to have the .of not line-broken, but have the .getOrElseThrow line-broken later. It seems like prettier and prettier-java both try to follow the philosophy where as soon as one element in an expression get line-broken, then every element gets line-broken (same idea for call chains and method arguments). This avoids any heuristics so you get simple, predictable behavior, it scales up very well to arbitrarily complex nested expressions, and the downside is you end up with a lot of linebreaks

from prettier-java.

jtkiesel avatar jtkiesel commented on June 2, 2024 1

I believe the TypeScript equivalent of the input you provided would roughly be:

class Example {
    private static createInstance<T extends Group>(entity: Group): (ctor: { newInstance: (...args: unknown[]) => unknown }) => T {
        return ctor => Try.of(() => {
                    var ng = ctor.newInstance(entity.getId(), entity.getSystemGenerated(), entity.getVersionKey()) as T;
                    return ng;
                })
                .getOrElseThrow(ex => new RuntimeException(ex));
    }
}

Such an input yields the following output from Prettier (playground):

class Example {
    private static createInstance<T extends Group>(
        entity: Group,
    ): (ctor: { newInstance: (...args: unknown[]) => unknown }) => T {
        return ctor =>
            Try.of(() => {
                var ng = ctor.newInstance(entity.getId(), entity.getSystemGenerated(), entity.getVersionKey()) as T;
                return ng;
            }).getOrElseThrow(ex => new RuntimeException(ex));
    }
}

I think an appropriate action item for this issue would be to try to align Prettier Java's formatting of chained method invocations with lambda parameters more closely with Prettier TypeScript's.

from prettier-java.

jhaber avatar jhaber commented on June 2, 2024 1

I think the difference is that the .getOrElseThrow isn't line-broken.

from prettier-java.

xenoterracide avatar xenoterracide commented on June 2, 2024 1

is this consistent with typescript?

       var result = ImmutableFindCustomerCommand
            .builder()
            .correlationId(UUID.randomUUID().toString())
            .build()
            .apply(customerApi)
            .block();

again, I thought that formatter did

       var result = ImmutableFindCustomerCommand.builder()
            .correlationId(UUID.randomUUID().toString())
            .build()
            .apply(customerApi)
            .block();

thinking this is just another example of this same issue.

P.S. Not to be an impatient jerk... is this ticket something you think will be fixed within the next few weeks, or is it a ways off. Only asking because I'm implementing prettier where java is the primary concern, and if anyone asks I'd love to have an answer if asked.

from prettier-java.

xenoterracide avatar xenoterracide commented on June 2, 2024

maybe, although, now I find myself trying to recall if typescript has static functions on classes. usually if you want a static function it doesn't go into a class itself. Do what though wilt. I just thought it was odd, but it's not a huge deal. We were comparing style outputs between a few formatters, and I generally use this one ;) .

from prettier-java.

xenoterracide avatar xenoterracide commented on June 2, 2024

Yeah that looks closer (If not the same?) As what I said I was expecting.

from prettier-java.

xenoterracide avatar xenoterracide commented on June 2, 2024

Hey, thanks for the good work, I suspect the PR fixed this, but in case it didn't, I figured I'd share it now. Checkstyle alerted me. Although, I'm not certain if it's actually complaining about this issue, it thinks the indentation is wrong on line ... well 3 of the markdown excerpt. I have to refactor this code anyways. Might be a 2nd issue here though.

      Supplier<String> gitVersion = () ->
        Optional
          .ofNullable(porcelainGit.describe())
          .map(v -> v.substring(1))
          .map(v -> v.contains("g") ? v + "-SNAPSHOT" : v)
          .orElse(null);

https://github.com/xenoterracide/gradle-semver/blob/e2049e72c075ea66cbcc0a1e5ca64820a57399ec/src/main/java/com/xenoterracide/gradle/semver/SemVerPlugin.java#L54-L59

from prettier-java.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.