[HN Gopher] $20k bounty was claimed ___________________________________________________________________ $20k bounty was claimed Author : conaclos Score : 553 points Date : 2023-11-27 16:50 UTC (6 hours ago) (HTM) web link (prettier.io) (TXT) w3m dump (prettier.io) | namanyayg wrote: | While porting to Rust has been a trend, as Prettier runs on every | save, the speed boosts will be significant. I'll be trying out | Biome soon. Congrats to the Biome project! | uoaei wrote: | This effort reflects the excitement in the Python community | around `ruff`. Excited to see efficiency and speed gains with a | wide impact. | spankalee wrote: | I have never noticed any lag from Prettier running on single | files. The perf starts to matter with whole-repo format passes. | | For interactive use we really should be using long-running, | warmed up, processes too, where the start time of Node is | irrelevant. Ideally type-checking, linting, highlighting and | formatting would run in one language service doing incremental | parsing and updates to a shared AST on every keystroke. | strager wrote: | > Ideally type-checking, linting, highlighting and formatting | would run in one language service doing incremental parsing | and updates to a shared AST on every keystroke. | | I think this is the reason Biome (originally called Rome) | started. Rome's vision was a shared toolchain to yield better | performance and to fix config hell. | syrusakbary wrote: | I'm incredibly excited for this. The Biome team has been | remarkably fast on achieving 95% compatibility with Prettier [1]. | | This will help to bring maximum speed to formatting Javascript | thanks to Rust, following the ruff (Python formatter) trend. | | Just as a note, as it was not mentioned in the article, Wasmer | [2] also participated with a $2,500 bounty to compile Biome to | WASIX [3], and it has been awesome to see how their team has been | working to achieve this as well... hopefully we'll get Biome | running in Wasmer soon! | | Also congrats to the Algora team, as they have been doing very | good work with their landing and trying to help on the challenge | moving forward [4]. | | Keep up the great work!! | | [1] https://github.com/biomejs/biome/issues/720 | | [2] https://wasmer.io/ | | [3] https://wasix.org/ | | [4] https://console.algora.io/challenges/prettier | triyambakam wrote: | Do you know the reason for enabling compilation to WASIX? | syrusakbary wrote: | WASIX will enable to run biome fully sandboxed at close to | native speeds. | | Imagine you can safely assume that the formatter program will | only have access to the directory you provide, and not | anything outside of it (not even the network!). | | In summary, Wasmer + WASIX is like Docker, but much more | lightweight :) | slimsag wrote: | The parent poster (syrusakbary) is the CEO of Wasmer and | trying to push WASIX, a quasi-proprietary 'open standard' | while it seems the rest of the WASM ecosystem is in fact | moving to WASI preview 2 [0] | | [0] https://news.ycombinator.com/item?id=37545670 | intelVISA wrote: | Extend, Embezzle, Escape | syrusakbary wrote: | I think you may be a bit confused on what's the purpose | behind WASIX, Stephen. And you are mistakenly polarizing | between two very valid options for different use cases. | | We are not trying to push WASIX, we are trying to move | forward sockets, threads, subprocesses so they can run | fully in Wasm environments. And WASIX is the solution to | that problem. | | WASI Preview 2 on the other hand seems to be focused on | other set of problems and doesn't solve any of the needs | that got WASIX started in the first place. | slimsag wrote: | According to their roadmap, WASI preview 2 will have | threads and sockets. | | So, in light of that, what is the reason for diverging | from WASI and creating WASIX? | syrusakbary wrote: | I'm not sure what roadmap you are talking about. Threads | are actually removed from WASI Preview 2. | | WASI Preview 2 still doesn't support threads, fork, | subprocesses or longjmp/setjmp (among others). Not even | that, when WASIX was created not even sockets were | supported in WASI. | | I'd recommend trying to compile bash or curl to WASI | Preview 2 and WASIX and see how far you get in each | before trying to polarize the readers between WASI | Preview 2 and WASIX. | cedws wrote: | This is the first time I've come across WASIX. Upon reading | about it, I can't help but see it as a reincarnation of the | JVM. Is that accurate? What advantage is there to executing | code in WASIX if it can access the system and isn't actually in | a sandbox? | shepherdjerred wrote: | It sounds the same to me: JVM, but with better browser | support. | n42 wrote: | The advantage is this guy's VC backed company gets to sink | its teeth into the early stages of WASM platform adoption, | helping him line his and his company's pockets. | | WASIX is a hostile fork of an open standard that does care | about sandboxing. | syrusakbary wrote: | I'm incredibly curious to hear more on how you think WASIX | helps on the company pockets (since is open-source, and | even it's governance model is open). | | I'd love to hear your thoughts, maybe we are missing on | some nice business opportunities here! | n42 wrote: | It's fine to be forthcoming about the financial interests | of your projects - this is Hacker News, after all. We | live on VC. The tone of your previous comment suggests | there is none. | | I find it hard to believe that anything you would spend | your company's time on would not push the mission of the | company forward. This creates a financial incentive. | syrusakbary wrote: | I'll address the first non-clickbait question and try to | provide some insight, as I think you might be a bit | confused on how COSS startups work. | | We don't plan to monetize WASIX. WASIX is just an enabler | to allow any program compile to WebAssembly. If other | open-source technology existed and fulfilled what we want | to accomplish is more than certain we would not have | created WASIX. | | In our case, the community was asking to have sockets, | threads, forking, subprocesses and more fully working on | Wasm. And there was nothing that supported that (or that | aimed to support it), so we worked on it. | | Now, let me give more insight on what we actually plan to | monetize: Wasmer Edge [1]. Wasmer Edge is the alternative | to the expensive big-tech providers that allows any | person or company to host their websites at a fraction of | the cost. | | Hope the insight was useful! | | [1] https://wasmer.io/products/edge | n42 wrote: | Wasmer is a VC company building a platform that depends | on the existence of these platform APIs - sockets, | threads, forking, etc. They have a vested interest in the | existence of these APIs, and the health of the developer | ecosystem, to stay alive. From here, it kind of seems | like the fundamental foundation of everything Wasmer is | building. | | Meanwhile, Bytecode Alliance is a registered non-profit | with many large corporate backers. They are building out | the WASI standard with careful due diligence to learn | from and avoid the mistakes we have found in POSIX. BCA | has their own financial incentives, and they are aligned | differently than yours. | | BCA ultimately is moving slower than works for Wasmer. So | I guess you were faced with three options: A) wait for | BCA, and do nothing B) work with BCA and push it forward | C) fork it and do it yourself. | | So you chose to fork it and reimplement POSIX with all | its warts. I assume because this applies pressure to the | community (candidly, a good thing) while letting you make | progress immediately. | | Where I, and I assume others, have issue with all of this | is: | | You have chosen a name that has created confusion in an | already confusing space. | | You have whitewashed it by promoting it as a new open | standard, but the controlling entity realllyy is just | Wasmer[0]. | | You have demonstrated through your actions a complete | lack of willingness to work with people in the community, | preferring to strong-arm with veiled threats[1] or | perverting incentives financially[2]. | | The issue isn't with WASIX, but with you and your | actions. I have no confidence in your ability to lead | this community forward in a way that has my (our) | interests ahead of your company's. [0]: | https://github.com/wasix-org/wasix-governance-meeting-not | es/blob/5135516d091d1bc3810677ea2cc755a67e10c669/meeting- | notes-27-07-2023.md#meeting-attendees [1]: | https://github.com/bytecodealliance/wit- | bindgen/issues/306 [2]: | https://github.com/ziglang/zig/issues/17115 | syrusakbary wrote: | > The issue isn't with WASIX, but with you and your | actions. | | Is refreshing to see at least some honesty. Haters gonna | hate, so I personally don't mind. Have a great day! | n42 wrote: | This is kind of my point. It would be refreshing to see | the CEO that would like our industry to build on top of | his platform to show some humility. Do you care to admit | to making any mistakes in your interactions, or is it all | because we are just a bunch of haters? | syrusakbary wrote: | I'm not even going to enter into the flame-bait. I | obviously disagree with your points. | | Hope you have an awesome day | dang wrote: | Can you please follow the site guidelines when posting | here? They include: | | " _Have curious conversation; don 't cross-examine._" | | " _Please respond to the strongest plausible | interpretation of what someone says, not a weaker one | that 's easier to criticize. Assume good faith._" | | https://news.ycombinator.com/newsguidelines.html | n42 wrote: | Of course. I hope the edit is more appropriate. Thank | you! | AndyKelley wrote: | I thought it was well said fwiw | syrusakbary wrote: | Here's the original comment, as it might be useful for | reference purposes: https://imgur.com/a/SjSnJsj | syrusakbary wrote: | WASIX is similar to the JVM in the sense that is able to use | a common abstraction for all operating systems, and it uses a | VM under the hood (Wasm). | | But the main difference is that it has sandboxed capabilities | (similar to docker), do you can granularly add permissions to | only certain directories or even disable networking when | running. | ehutch79 wrote: | I'm looking through the docs, specifically the formatter stuff ( | https://biomejs.dev/formatter ), and it feels like all the | examples are backwards? | | Am I missing stuff? | conaclos wrote: | What do you mean by "backwards"? | surye wrote: | The "diff" appears to be backwards (it's subtracting what | prettier would emit, and adding back the original). | explaininjs wrote: | The diff is between the test cases's expected output (red) | and the utility's current output (green). | ematipico wrote: | The red represents what would Prettier emits, and the green | represents what Biom e emits. If you think that's unclear, | feel free to send a PR to help us make it clearer. | globular-toast wrote: | This was intuitive to me, especially because it's in a | section titled "Differences with Prettier". | explaininjs wrote: | That's giving the diff between prettier ("correct", yet red) | and their implementation (green, yet arguably incorrect) | surye wrote: | It feels backwards to me from a purely linear time | perspective, you have an input, transform it, diff would be | the patch, to the desired output. | jrockway wrote: | That's interesting. I've been using "deno fmt" as of late and | it's been fine for me. | | https://docs.deno.com/runtime/manual/tools/formatter | conaclos wrote: | If you switch from Prettier to deno-fmt you will notice many | changes to perform on your code base. Biome tries to minimize | these changes. | tills13 wrote: | FWIW it doesn't matter which formatter you choose, so long as | everyone working on the project is required to use it. | jkrubin wrote: | 100% I also personally believe you should pick a formatter | and NOT configure it. I don't care anymore about style. Just | want formatting to be consistent. | jrockway wrote: | Yeah, that's my take as well. The less there is to | configure, the better. Something I like about Go is that I | don't need any project-specific settings, because there are | none. (Not strictly true, as some people use gofumpt | instead of gofmt. I think this is a bad idea, even though I | agree with all of gofumpt's formatting changes. What | matters is will everyone use it on every commit? Not if | gopls doesn't do it for you.) | | At my last job, we had a lot of fun with Prettier. We | basically made our Typescript codebase look as much like Go | as possible. I am not sure this is a particularly valuable | endeavor, but it was fun. So if people are willing to spend | $20,000 on making that faster, whatever. They can have that | fun, I guess. | culi wrote: | In the same way it doesn't matter which side of the road you | drive on. What matters is that everyone else is also driving | on that side | andrewstuart wrote: | The post says the reason they did this was to motivate themselves | to make the javascript version better? | | Strange. | sophacles wrote: | Competition is good for the consumer (i.e. the users). For | example: when clang and LLVM came along, gcc got significantly | better. | dewey wrote: | > One question you are probably wondering is why would the | Prettier team fund another project!? In practice, Prettier has | been the dominant code formatter for JavaScript and as a result | of a lack of competition, there has been little incentive to push | on performance and fix various edge cases. | | I was indeed wondering that but the answer doesn't really answer | the question for me. Why not set a bounty to improve Prettier | instead of building a competing project just to increase the | motivation to improve Prettier? Or is the end goal to shut down | the Prettier project and encourage people to switch to the Rust | based one? Seems like an unnecessary fragmentation of an already | confusing landscape. | | Maybe I'm misunderstanding something though. | hermanradtke wrote: | Maybe prettier will consume the biome work and offer it as an | option for prettier going forward. | Philpax wrote: | Different approaches with different constraints and less | baggage can potentially discover areas of improvement that | weren't otherwise visible in the original project. (i.e. they | weren't locked into the "Prettier mindset", if such a thing | exists) | explaininjs wrote: | Maybe they want an implementation to have an understanding of | potential perf of a non-js solution, but know that it'd cost | them more than $10k to have an employee do it. So instead you | offer 10k, someone else offers 10k, and the final product is | "owned" by a third party but your questions are answered. | wincent wrote: | > why would the Prettier team fund another project!? | | Less "the team" per se, and more vjeux, I think. | yebyen wrote: | There is a whole gulf of room between "we are the incumbent and | there is no viable alternative in any language for JavaScript | developers" and "the Rust folks have done it, there's an | alternative now and it seems quite viable" | | I think it's about escaping local minima? You can always look | at the biggest sink for performance and say "there's definitely | something we can do better in there" but unless you have | something objectively better to compare it to, you'd never be | sure. | | Imitation is the sincerest form of flattery. And knowing that | of the hard problems you solved, someone else can solve them | and in a different language, I think there's quite a bit of | value to be obtained just through the competitive process that | emerges when there is competition. | | You can't fully have competitiveness without an actual | alternative to compare yourself against. If the Rust folks can | do the problem slightly faster by shaving off just 5% or less | of the test suite, what all does that tell us about the | theoretical limits of a solution when compared against the | canonical version? | | I have only limited understanding of the problem space, but I | think there's always something intangible to be gained from | having a quite similar implementation in a different language. | mlhpdx wrote: | > I think it's about escaping local minima? | | Yes. It's also been said (not often enough) "if we don't | compete with ourselves someone else will". Getting out of | one's own head (and repo) is gold. It shows humility and | respect as well as creates innovation and resilience. | j1elo wrote: | Adding to what has been already said, simply the fact of having | different people with different perspectives and intentions, | can surface new ways of improvement. | | https://biomejs.dev/formatter/#differences-with-prettier | | Turns out Biome found several pain points that they chose to | not follow the same decisions than Prettier, instead diverging | from it. This alone could be already a reason why a parallel | development is worth it. | tshaddox wrote: | > Why not set a bounty to improve Prettier instead of building | a competing project just to increase the motivation to improve | Prettier? | | Presumably the creators of the bounty believe that this bounty | is in fact a good way to directly improve Prettier. The | acceptance criterion of the bounty doesn't need to literally be | "improve Prettier" for the work to improve Prettier. | icambron wrote: | I can't speak for the Prettier folks, but as an OSS maintainer, | I'm more interested in _the problem being solved_ than everyone | _using my particular solution_. I actually don 't benefit at | all from you using my code; I did all the work to make the | world a place where $PROBLEM has an accessible solution. So if | I were passionate about, say, JS code formatting, I would be | pretty happy if someone came along and solved that problem in a | more performant way. | blowski wrote: | I'd guess a significant proportion of OSS maintainers _are_ | in it for some combination of ego-trip, or a misguided belief | that it will make them rich. Both outcomes may seem less | likely if you're just fixing somebody else's software for | free. | demosthanos wrote: | What have you seen that would lead you to believe that? | | My own experiences with open source suggest that no one | would stick around for very long if they were motivated by | fame or wealth. Being a FOSS maintainer seems to be a | constant exercise in dealing with people whining at you for | not fixing their problems for free, not something that | brings any significant personal attention and _certainly_ | not something that provides a sustainable source of income. | matheusmoreira wrote: | Is it really so misguided these days? I see plenty of | developers making decent amounts of money via GitHub | sponsors, patreon and others. Could be pretty nice if a | project gains momentum. And it's ethical: no ads, no | proprietary software, nothing. | vidarh wrote: | Most of my git repos are things where I'm happy if someone | finds something useful, but for several of them I'm very | explicit that there are a whole lot of things I will plain | refuse to merge not because I think they're not great or | useful, but because I don't want my packages to be everything | for everyone - I'd rather people took my stuff and built a | "competing" solution with different tradeoffs if they have | different needs. I'd happily even offer help and suggestions | if people want to do that. | | I think that a lot of projects would be a lot better if they | insisted on _not_ solving everything, and stuck to solving | one problem well, and instead of merging every new feature on | offer instead help make it easier for others to "compete" | with them by e.g. separating out shared functionality or | writing about lessons learned... | | I'd _love_ to find each and every one of my projects are no | longer needed because there 's a better option (now, I may be | very difficult about what is "better", so that's a tall | order), because my list of projects I'd like to pursue is | longer than I will stand any chance of getting to in my | lifetime, so if some are taken off my plate, awesome... | technion wrote: | Projects would do well to adopt your views, I believe that | always leads to a better product. | | Age for example always has someone complaining about a | feature they want - the refusal to oblige is exactly why | it's a better product than gpg. | marcosdumay wrote: | > performance and fix various edge cases | | Those are the two main things that rust is expected to help | improve. | | It's quite easy to empathize with somebody that sees a JS | software having problem with those two and picking a language | that is known to help with those instead of being known to | increase those problems. | wentin wrote: | > Why not set a bounty to improve Prettier instead of building | a competing project just to increase the motivation to improve | Prettier? | | There are three reasons, I think: | | 1. Writing a rust compiler is separate from prettier project | because of its nature. Prettier is not written in Rust, and | Rust has proven to be a robust option to write a formatter, so | the goal really is to write a formatter in Rust itself, and it | can't be replaced with improving prettier within its current | codebase | | 2. Asking someone to write a Prettier-branded and owned Rust | compiler for $20k is not enticing enough. It is essentially | equivalent to contracting someone to write some code for | Prettier, with an open bid. It would cost a lot more to hire | someone to write these code. Great programmer who has the skill | to answer this bounty get paid at least $200 an hour (extremely | conservative estimate), $20k is enough for 100 hours of work | for one person, not enough to finish the project. But getting | rewarded for $20k for stuff you write and will own is enticing! | | 3. Good ecosystem going forward. If prettier owns the winner | project, prettier is responsible to maintaining and improving | it. The good that the bounty did ends when the project is | handed over. Prettier team get burdened with a project that | they didn't write themselves, and the original team (the best | people for the job) is not incentivized to keep maintaining it. | There is no ongoing competition to keep this field active. | andai wrote: | >Great programmer who has the skill to answer this bounty get | paid at least $200 an hour (extremely conservative estimate) | | Dang! What do you base this estimate on? The Rust aspect, or | parsing aspect, or intersection of both? | butterlesstoast wrote: | Adding this for data. I charge $500 an hour for | contracting. It's gotta be at least that as it's costing | time I would otherwise spend with my family. Family time / | time away from my core job is incredibly valuable. | Cthulhu_ wrote: | For said data... does anyone actually pay that? I mean if | you don't get hired for that amount you've got tons of | family time so I guess it works? | | What I'm trying to say, I don't see the correlation | between having a huge hourly rate vs family time. 40 | hours a week of work is still 40 hours regardless of how | much you're paid. | lcnPylGDnU4H9OF wrote: | A freelance developer can easily ask $250/hour, similar for | a contract agency, and that is kind of a low amount. It | sounds like a lot for a single developer but if one | considers all of the non-billed time of chasing leads and | bills it's maybe a different picture. | TylerE wrote: | Keep in mind as a freelancer you have to make about for | $2.50 for every $1 a salaried person makes, as you're on | the hook for 100% of taxes, health care, business expenses, | etc. | EricMausler wrote: | Is the 2.50:1 just a broad estimate or based on | something? | | When I was doing pricing for service contracts it was | usually around 1.50:1 burdened billing rate vs direct | labor (income) | bosie wrote: | how did you factor in when you can't work (sickness, | holiday, increasing your skill, finding the next job | etc)? | selectodude wrote: | Yeah, it's closer to 1.5x. Most companies budget total | comp at 150% of salary. | llimllib wrote: | many things are more expensive when you don't work at a | company - for example the health care for a marginal | employee at GE is a lot cheaper than you'll get for | yourself. | | I always used 2x, but probably 2.5x is a sensible way to | think about it in a patio11 "charge more than you think | you should" mold. | LanceH wrote: | Healthcare cost doesn't scale with the $200 base salary, | though. | laurencerowe wrote: | > many things are more expensive when you don't work at a | company - for example the health care for a marginal | employee at GE is a lot cheaper than you'll get for | yourself. | | This is less true following the Affordable Care Act than | it used to be. The unsubsidised marketplace rate for my | health Kaiser health insurance seems fairly close to what | I pay for COBRA from my former big tech employer. | Bognar wrote: | Part of being a freelancer is spending time finding work | and doing a variety of things that clients would consider | non-billable but still cost time. If you're going to work | 40 hours a week, not all 40 will typically be billable in | freelancing. | Jaepa wrote: | My mother did NGO environmental policy freelancing in the | 00's. She would land a contract for 40k for two months of | work, then spend the next 4 months looking for more work. | | Being a subject matter expert means that you can be paid | well for your work, but the numbers of jobs that require | expertise in the Kura-Aras river basin can be few are far | between. | ww520 wrote: | 1.5x for long term contracts. 2~2.5x for short term gigs. | hectormalot wrote: | Depends on the geography and/or whether the knowledge is | highly specific. | | As a datapoint, the average Dutch contracting rates I see | for IT development (think: Java, Swift, Kotlin) range | somewhere from EUR75 - EUR150/h. Higher is possible, but | then you're talking very specific expertise and typically | shorter projects. | | I'm on the hiring side, this is a figure across some 20 | external devs. I think it's representative of the middle of | the market. | twodave wrote: | I came here to say that $200/hour is only "extremely | conservative" in very few and small geographic parts of the | world. Where I'm from (in a large city in the US) this number | would be described as extravagant. I've charged $200 or more | on only one occasion myself, and it was a very short-term | arrangement. | parasubvert wrote: | I'm from a large city (but not the largest) in Canada and | $200/hour or higher is common for high end devs, | architects, and project managers. I charged $200/hour | twenty years ago. These days I'd charge $250-300/hour if I | was a contractor. It is not extravagant in most of North | America, but again, it is a rate for higher end talent. I | have not charged less than $150/hour since the 90s. | | I once had some contractors in my team that were paid | $500/hour due to vendor markup. I consider that | extravagant. | wredue wrote: | I'll second this that even in Canada, which has quite low | tech pay, the lower end of quality dev work is $180/hr. | Most of us managing contractors wouldn't blink twice at | $200/hr. Many of the bills are much higher. | globular-toast wrote: | It sounds like the Prettier test suite is the most valuable | part of the project. Perhaps the original project will just | become a test suite with everyone using whatever tool is | fastest with the best coverage. | DustinBrett wrote: | Maybe they paid Biome $20k to have it be more "opinionated" | with Prettier's opinions. | nailer wrote: | > Why not set a bounty to improve Prettier instead of building | a competing project just to increase the motivation to improve | Prettier? | | That's a good question. But a new, Rust (or whatever is fast) | version of prettier is effectively Prettier. If it has the same | config, switches, and defaults, it's Prettier. | | The value of prettier is that it's a standard most of JS/TS | agrees on, saving discussions for more important topics. The | code that gets us there is a side effect. | nicoburns wrote: | Speed is always welcome, but I just wish prettier was a little | less opinionated. Specifically around line length, it will just | not leave my formatting alone. I find prettier formatted code | _much_ less readable than unformatted code, and this isn 't a | problem I have with other code formatters like rustfmt. | meowtimemania wrote: | Do you have any examples where prettier code is much less | readable? I haven't really ran into that issue and have been | very happy with prettier. | harimau777 wrote: | Prettier often makes code written using sequences of | .chaining much more difficult to read by forcing it all to | the same line. | | For the same reason, it often makes code written using | composition more difficult to read since it won't let you | decide when to put a sub-call on its own indented line for | clarity. | floydnoel wrote: | In those situations I make use of comments to force new | lines where I want them. Stupid but it works! | pkilgore wrote: | Disable it! (https://prettier.io/docs/en/ignore.html) | | I do this occasionally, and especially with things like | test tables. Linters/formatters are there to help in the | common case, not to be some oppressive dogma. | hu3 wrote: | If the fix is to disable prettier for an entire file, | you're proving your parent poster point. | dewey wrote: | It doesn't have to be disabled for the whole file, you | can annotate lines too as shown in the link the parent | commenter shared. | HellsMaddy wrote: | I had the same gripe, and recently tried switching to | dprint. It is much less aggressive with changing where | lines break, and honestly it's a huge relief to be able to | break lines wherever I think makes the code most readable. | It's also significantly faster than prettier. I've been | very happy with it. | mostlylurks wrote: | If I don't remember wrong, doesn't it put object | destructurings on one line if they fit? That's both less | readable than putting each destructured member on its own | line as well as a cause of unnecessary whitespace changes in | your commit history if you ever add one more field to the | destructuring that takes it over the line length limit. | floydnoel wrote: | Add a comment anywhere in the destructuring and it will | force each property onto its own line. | nicoburns wrote: | A good example from further down the comment section: | | Prettier doesn't break template literals, but it will break | non-literal sections of template strings. For example, if we | wrote this: const foo = `aaaaaaaaaaaaaaa${b | bbbbbbbbbbbb}ccccccccccccccc${ddddddddddd}`; | | prettier would fix it to const foo = | `aaaaaaaaaaaaaaa${ bbbbbbbbbbbbb | }ccccccccccccccc${ ddddddddddd }`; | | Which is not only much harder to read in it's own right, but | now takes up 6 lines instead of one! | paulddraper wrote: | I wish it were more opinionated. | | It treats new lines as significant in a lot of its formatting | vbezhenar wrote: | I also don't understand their stand about curly braces. They | don't add or remove them. I think they should make it | uniform. | MalseMattie wrote: | There is a plugin for that: | https://github.com/JoshuaKGoldberg/prettier-plugin-curly | paulddraper wrote: | That's bizarre. They add/remove parens...but not curly | braces... | | How do you even justify that... | bennyg wrote: | Have you tried the print width option: | https://prettier.io/docs/en/options.html#print-width? | nicoburns wrote: | Yes, but unlike most formatters where the width option is a | maximum and it _mostly_ leaves your code alone below that | width, prettier will aggressively widen your code to fit if | you up the print width setting. | | I think rustfmt will actually also widen code you have put | newlines in sometimes. But it's heuristic is somehow much | better than prettier's. | harimau777 wrote: | Agreed! I'd go so far as to say that we would be better off if | Prettier was never created. | fenomas wrote: | I think the real issue with prettier is that it's almost become | a de facto standard. E.g. personally I don't like it _at all_ , | but do like Svelte, and Svelte's official (and AFAIK only) | formatter uses prettier. Hence I use prettier for Svelte, and | ditto for a few other things. | | So the whole "extremely opinionated, if you want configuration | go somewhere else" is great in principle, when people are | choosing to use the tool. But if it becomes the only option for | certain swathes of users, a touch more configuration would | really be appropriate. | digging wrote: | Well, this bounty is just about the only way that the | Prettier team could contribute to solving that issue, so | rejoice. | | Besides that, I get the impression being a universal standard | is kind of a non-issue for Prettier: | | - If it was widespread, but highly configurable, that | increases friction when switching projects, because there | will be tiny formatting differences everywhere | | - If it was not widespread, it would not be well known, | increasing friction for users entering a project where it was | used | uxp8u61q wrote: | > Well, this bounty is just about the only way that the | Prettier team could contribute to solving that issue, so | rejoice. | | Erm, that bounty was for the production of a program that | behaves exactly like prettier in at least 95% of cases, as | far as I understood what "prettier test suite" means. | girvo wrote: | If it was widespread but slightly more configurable, how | would that increase friction? It's still always setup to | run automatically and transform your input to the output. | The whole point of it is you don't have to think about its | rules, just code and it will do the rest. | Cthulhu_ wrote: | To use the Go language's formatter and a saying, "Gofmt's | style is no one's favorite, yet gofmt is everyone's | favorite." That is, you may not like the style, but it's | preferable over having no tool ensuring consistent style. | anshulbhide wrote: | Would be cool to use a Replit Bounty next time! | candiddevmike wrote: | I'm still salty that all my eslint plugins decided to remove | perfectly fine linters in lieu of Prettier. I find Prettier to be | way too heavy handed and hard to reason about, and yet another | tool that I never asked for... | xdennis wrote: | > I find Prettier to be way too heavy handed | | But that's the purpose of such tools: to stop endless debates | about style. | pcthrowaway wrote: | I mean.. sure https://xkcd.com/927/ | constantly wrote: | It's not a new standard so this comic really doesn't apply | here. It's just being opinionated, for once, about what to | use. I welcome it strongly, as I do tools like Black for | Python, which do similar things. Just set that up in CI for | anything and all my code looks the same, removing some | overhead of readability. | mm263 wrote: | It isn't really applicable here since Prettier was de-facto | standard at pretty much every place I've worked at - start- | ups to FAANG | harimau777 wrote: | The problem is that style matters and therefore those debates | matter. Just because something isn't important to the | developers that made Prettier doesn't mean that it's not | important to the productivity of other developers. | digging wrote: | > The problem is that style matters and therefore those | debates matter. | | Does it? IME/O, styling only matters up until the point | that it is consistent and reasonable. And I'm saying this | as someone who used to want to debate and micromanage a lot | of formatting standards in my projects. Ego is removed from | the equation (unless you're the one trying to introduce | Prettier to a reluctant team), and without ego, the debates | no longer seem very important. | shepherdjerred wrote: | The reality is that as long as your style is consistent, | very few people actually care what that style is. | | I can imagine smaller teams/single individuals being very | picky about how their code looks and there is nothing wrong | with that. Once you have larger teams that becomes a waste | of time since you'll likely have much larger problems to | solve. | deathanatos wrote: | > _as long as your style is consistent, very few people | actually care what that style is._ | | This is an oft-repeated myth. There are some style rules | for which that is true, but for some, there are | objective, logical reasons to prefer one style over the | other. | | For example, mandating the optional comma after the last | time in a list whose items has been split over multiple | times results in more readable and logical patches: if | you mandate the comma, a patch that only adds items will | only have added lines, whereas if you don't, a patch | adding items can have a mix of add/remove lines. | | Pushing operators to the subsequent line makes it | fundamentally easier to read as they all align, vs. a | ragged right edge, and this is doubly important if the | operators aren't the same, as it makes that _far_ more | visible. (Though this is harder in some languages with | odd behavior around this, such as JavaScript.) (This | _also_ affects patch readability in many languages, and | in fact, I 'd say patch readability is _the_ driver of | many objective reasons behind styling choices.) | | And so forth. I'd wager as many rules have logical | reasons backing them as those that actually do boil down | to literally just stylistic decisions. | thenbe wrote: | The deprecated style rules have been ported by a new project: | https://eslint.style/guide/why | Dextro wrote: | Thanks for this. It completely escaped me and all I saw was | the changelogs deprecating the very limited set of style | rules I've used for years. | Vinnl wrote: | In what cases are you "reasoning about" Prettier? I can only | think of the occasional issue with merge conflicts, perhaps. | smnscu wrote: | I feel like people complaining about Prettier being "heavily | opinionated" are missing the point. Perhaps I'm biased by my | decade of using Go, but not having to worry about superfluous | stylistic choices is a welcome reduction in cognitive load. (Up | to a point I guess, e.g. I'd never put up with K&R-style newline | opening brackets). | pigeonhole123 wrote: | Prettier is very opinionated about line length which gofmt | isn't. That's the only complaint I have and it's bad enough I | just refuse to use it. Add one character to a line and enjoy a | ten-line diff. | | Edit: See a contrived example of something gofmt doesn't touch | (the behavior I want): https://go.dev/play/p/cKMKnFwT8tq | preommr wrote: | Then just change it in the prettier config. | | 80 characters is a really good default. I have an extra wide | monitor, and with 2 side panels open in my IDE, that's the | perfect length. | pigeonhole123 wrote: | It will then force longer lines, which is even worse. | atom_arranger wrote: | What should Prettier should do in this case? | | I think we can all agree there should be a line length limit, | it has to enforce it eventually. You could say "it's just a | couple more characters" until the line is 200 characters | long. | | Semantic diff is maybe the solution. | nicoburns wrote: | It should put more weight on the length that the author has | original authored it as. So between "always break" and | "always expand" there should be an area of "leave it | however it already is". | pigeonhole123 wrote: | It can safely ignore the line length, gofmt does this and | I've never heard anyone complain about it. The VSCode | formatter also doesn't touch line breaks and it works fine. | | Last time I looked into it, the only reason I can't turn it | off is that Prettier works off an AST that doesn't keep the | line breaks that the user put into the code at all, and it | "rebuilds" the whole code from this AST. | | The problem is not the diff per se, the real problem is | that I can't find a configuration of Prettier where I can | have long lines where it makes sense and short ones where | that makes sense. | tuetuopay wrote: | Funny, that's the one thing I complain about gofmt. I can | cope with the occasional diff noise but avoid kilometer-long | lines. This is especially noticeable for function names that | get long quite quickly. | | Also, this means that there is more than one way to format | the code, which stands pretty weird given the philosophy of | Go. | nicoburns wrote: | I don't understand the hate for "kilometer-long" lines (say | in the 120-200 char range). My screen is much wider than it | is long, so having longer lines allows me to fit more code | onto the screen at once (which is fantastic for | readability). Also, sometimes the extra content is | _uninteresting_. And it makes sense to hide it away where | it 's only sometimes seen. | tuetuopay wrote: | I'm modern, and a 120 char line is not kilometers long. | It's in the range for modern stuff (yep, I'm an advocate | for dropping 80 chars). km long lines start at 200 chars | IMHO. To me, too long lines actually hinders readability: | | - kilometer-long lines makes your eyes travel a lot more | to read what is happening. travel is not that an issue, | but context is. it is quite hard to get at a glance e.g. | the argument list of a function. or know if e.g. a | specific parameter is in the argument list. | | - I almost never have my editor's viewport set to | kilometers. It's usually in the ~110 chars range to fit | multiple files at once (two side-by-side on 1080p, three | on 1440p). Not that I am editing three files at once, but | I'm usually editing the middle one with other files on | the side for context and reference. In such a setup, the | line ends up wrapped anyways, but with ugly wrapping that | does not match indentation and in the middle of words. | | As for hiding it, that's what editor folds are for. | | Anyways, I guess we found bikeshedding topic not solved | by formatters :D | WorldMaker wrote: | Wider screens can also be used to have more code files or | sections of the same file side-by-side. You can get two, | three, sometimes four 80-char width files very nicely | side by side. | pigeonhole123 wrote: | Line breaks often carry meaning, for example many people | like to line up things that belong together but which live | on separate lines, and gofmt helps with this. Having many | ways to format a given AST (unlike Prettier) is not against | the Go philosphy which I would say is "be pragmatic". | | If you want a line to be shorter because you as a human | find it easier to read that way then you can add a | linebreak yourself, and trust that your meaning will be | preserved. | j1elo wrote: | Funny thing: I recently learned Go, coming from doing some | TypeScript and the refreshing feel that was discovering | Prettier. | | I really miss that gofmt applied some limit to line length. | In TS I just write a too long line, and Prettier reformats it | into a sensible set of consecutive lines, I don't even have | to think if breaking before or after this or that parentheses | or bracket. With Go, I have to, and I'd rather not. | warp wrote: | Couldn't you just set the "printWidth" in .prettierrc.json to | something super long? | laurent123456 wrote: | In that case prettier will put the code you formatted over | multiple lines into one giant line spanning multiple | screens. This is especially relevant for method chaining. | solatic wrote: | `lineWidth` is actually one of the available options in the | biome formatter: https://biomejs.dev/formatter#configuration | nicoburns wrote: | Yeah, but if you increase the lineWidth then it will make | _all_ your lines that long, even if you don 't want them to | be. There is no possibility for variability of line lengths | depending on the code at hand. | pkilgore wrote: | Why throw out the tool when you can have the tool ignore [1] | whatever is outside the common case? | | [1] https://prettier.io/docs/en/ignore.html | pigeonhole123 wrote: | My approach is to just not use Prettier but instead use the | much more well behaved formatter included in VSCode. I | don't have time to fight the formatter and I don't like | having these "cheat code" comments all over my code | nulld3v wrote: | Are there benchmarks for Biome anywhere? How much better does it | perform than prettier exactly? | nulld3v wrote: | Found some here: | https://github.com/biomejs/biome/blob/main/benchmark/README.... | | They claim 25x but the numbers are old so I'm not sure if I | believe them now that a bunch of new functionality has been | added. Either way, if it's anywhere within that ballpark it's | still a huge achievement. | conaclos wrote: | This heavily depends on your workstation. Biome scales very | well. With 16 threads on a i7-120P, I got the following | figures: | | Webpack repository: Biome ran 2.19 +- | 0.11 times faster than dprint 4.18 +- 0.14 times | faster than Biome (1 thread) 32.12 +- 1.18 times | faster than Prettier 32.45 +- 2.56 times faster than | Parallel-Prettier | | I am not sure why Parallel-Prettier is slower than Prettier | for the webpack repository. | | Prettier repository: Biome ran 1.89 | +- 0.21 times faster than dprint 3.47 +- 0.34 times | faster than Biome (1 thread) 36.70 +- 3.41 times | faster than Parallel-Prettier 46.66 +- 4.32 times | faster than Prettier | gostsamo wrote: | Many people comment the reasons without acknowledging that part | as well: | | > By matching all the tests, the Biome project also found a lot | of bugs and questionable decisions in Prettier that we will be | able to improve upon. | | For me, this means that they have another implementation for | sanity checking their own. | jdorfman wrote: | Thank you for posting this. Sourcegraph is now a sponsor on Open | Collective. | thenbe wrote: | While it's always great to see performance gains, my largest pain | point with prettier was never performance. Instead my only gripe | with prettier is the "line wrapping noise" it creates, | illustrated here by Anthony Fu: https://antfu.me/posts/why-not- | prettier#the-line-wrapping-no... | | Would it be realistic to expect a solution for this issue now | that "prettier needs to step up it's game"? | jakub_g wrote: | This is indeed the biggest annoyance of mine. I quite often end | up rewriting code or changing variable names to counterbalance | prettier making code ugly/unreadable. | tills13 wrote: | eh -- this is a one-time occurrence with prettier. Subsequent | changes are guaranteed to be changes-only since formatting is | consistent between authors. | c-hendricks wrote: | It happens often in JSX, you add one prop, which makes the | line longer than the line width, which turns it into a multi | line change. | | It's annoying, but not a reason to throw the baby out with | the bathwater. | WirelessGigabit wrote: | This isn't just a JSX problem. This is in any language that | once you go over the column limit that it'll try to break | it somewhere. | ljm wrote: | Prettier's biggest win is that it automates 99% of style | complaints away and practically eliminates most classes of | nitpicking. | | But, as well as the issue with line noise, it also encourages | patterns that I think detract from code comprehension. It | favours expressions over statements and even now, it's not easy | to set a breakpoint in the middle of one, so you end up | rewriting into statements just so you can step through. | | It will favour deeply nested ternary statements in react so | your code reads more like a tree with densely tangled roots. | | It will favour shorthand syntax for optionally merging | properties into an object, which basically relies on a quirk of | the splat operator. | | There is fuck all standard library to speak of without pulling | in an insane amount of dependencies, but surely stuff like deep | merge and compact should be provided out of the box? | tubthumper8 wrote: | > It favours expressions over statements and even now, it's | not easy to set a breakpoint in the middle of one, so you end | up rewriting into statements just so you can step through. | | I've never had an issue setting an inline breakpoint[1] in VS | Code, is it an issue in other IDEs? | | [1] https://code.visualstudio.com/Docs/editor/debugging#_inli | ne-... | ljm wrote: | I use emacs, but chrome/firefox are a bit finicky about | where you can set a breakpoint. | | (Most people I know just use console.log - print debugging | works all the time but I like having a repl) | yawboakye wrote: | does it? prettier is extremely configurable, unlike gofmt. so | deferring to the authority of prettier is essentially | deferring to the authority of the prettier.yml config. not | that i have a problem with that _per se_, i'd expect the | author(s) to take responsibility and appreciate that they're | defining/imposing their own taste(s). | nicoburns wrote: | Extremely configurable? It has like 3 config options, and | an explicit policy of not being configurable. | hu3 wrote: | > prettier is extremely configurable | | That's the opposite of what they claim: | https://prettier.io/docs/en/option-philosophy | SamBam wrote: | It's not really an issue if you do a one-time Prettification | commit, and then stick to Prettifying automatically thereafter. | Then you won't ever see line-width changes mixed in with | functional changes. | | Isn't this an issue with every linter? At some point you're | going to have to decide what to do with old code that doesn't | match the new style rules. | richardwhiuk wrote: | > Then you won't ever see line-width changes mixed in with | functional changes. | | You will - every time you extend a line which now exceeds the | limit. | twicetwice wrote: | Isn't this a natural consequence of having line length | limits? This seems like a general problem, not a problem | with Prettier. | richardwhiuk wrote: | Sure | lainga wrote: | Sure you will. Whoops, my regex got too long and now the diff | is - filter: /\.(jimmy|jimbo|jeremiad)$/ | + filter: + /\.(jimmy|jimbo|jeremiad|james)$/ | | . And it's not clear where the change is. GP's article has an | example of that in a linked tweet. | JasonSage wrote: | This is fine for a text diff, but I want my code review | tool to show me something different. Separate problem, and | the flaw here isn't the diff, or the tool that produced the | diff, rather the tool displaying it to me. Let me do | whatever I want to my code and show me BOTH the visual | (unimportant) and semantic differences. | Cthulhu_ wrote: | Is that down to the formatter - which you've configured to | enforce a certain line length | (https://prettier.io/docs/en/options.html#print-width) - or | the diff visualiser that doesn't show a difference between | whitespace and other changes? | j1elo wrote: | I'd rather have a strict line length limit, than having my | coworker creating objects in lines 150 or 180 chars long. | | So we'd end up discussing what is the best choice. I bet I'd | also end up discussing those things with Anthony Fu. If the | limit is 80, then _the limit is 80_ , not 81. | | Come Prettier. No more discussions. I definitely buy the tiny | amount of "noise" it brings, in exchange for freeing me from an | immense amount of _actual noise_ when having to discuss these | things with other people. | | EDIT: This comes from a backend dev (C/C++, sometimes Go, | recently did some stuff with TypeScript). Prettier was a | refreshing discovery, and other languages like Python are able | to express the rule very sensibly (albeit I round it and go for | 80 or 100): | | https://peps.python.org/pep-0008/#maximum-line-length | nicoburns wrote: | > If the limit is 80, then the limit is 80, not 81. | | I agree with that. But the limit should be 120 or 160, not 80 | (and my formatter should allow me to set a wider limit like | that without making all my lines extra-wide - I want to be | able to put things on one line where appropriate and not | where it's not). | | > I definitely buy the tiny amount of "noise" it brings | | Tiny? It makes a lot of my code 3-5x as long. And often | breaks things in weird places. This is IMO not a small | reduction in readability. | j1elo wrote: | Like I mentioned to the sibling parent, 100 is an OK middle | ground. 120, or more, is too long already, and 160 is | waaaay beyond what I'd consider acceptable. No way you can | fit 2 side-by-side editor panes with those line lengths, | unless you use a tiny sized font. | | I get it, 160 looks OK and fits into a 4K display without | any other windows open. I believe working with dual panes | is more productive, so I'll always stand behind shorter | line lengths that allow for it. | | Even Rust, a modern language that is usually said to | collect the best learnings from the industry, thankfully | chose a conservative and sensible 100 chars limit by | default. | culi wrote: | I wasn't aware Rust chose a 100 line default. I'll | definitely be using this to argue on my teams for why we | should stretch the line length limit past 80. Thank you | Rust for moving the industry forward | j1elo wrote: | I guess Rust made the same reasoning than Python. For | this kind of things, the PEP documents tend to be well | based on experience and be a good guideline which even | applies for other languages. Check the PEP 8 that I | linked in my comment: although they recommend a very | conservative limit of 80 (79 actually) it says that if it | makes sense, 100 (99) can be used too. And that's from | 2001. | wentin wrote: | Do you work with a large team? There is no correct answer | for formatting for a team, there is only correct answer for | individual person. The line limit 80/120/160 will work for | certain people with their setup, but not others. Stuff like | using a ultrawide screen with two columns, or code on | laptop screen with single column, or code with half screen | code editor and half screen browser, etc, there are endless | mutation, all of them can benefit from different settings. | It is essentially not possible to find the best option for | everyone on the team. You may think 120 is the best, but | there is no way to prove it. It just worked for you because | of your coding setup and preference. | kuchenbecker wrote: | I don't care what the limit is unless it's consistently | applied. | | My least favorite though no limit + soft wrapping, the | philosophy being the code adapts to the user, but in | actuality means the file looks completely different based | on your monitor and setup removing visual aid to code | navigation and familiarity. | dieselgate wrote: | I work on a ruby/ts/js codebase and seem to recall | different file extensions having different line lengths. | Something like that is annoying but at least it's more | consistent within the file extension | culi wrote: | > It makes a lot of my code 3-5x as long. | | Do you mean entire files are made 3-5x as long or just | individual lines every now and then? | ipaddr wrote: | 80 character limit? Are we trying to relive the late 80s. | Soon we'll move back to 40 characters. Screens can support | higher resolutions now limiting lines to 80 so developers can | turn their brains off seems silly. Turn your brain on and | learn to filter the noise of 100 characters. | j1elo wrote: | 100 is OK. But better to wager for 80, so people complain | about their preferred 120+, and ending up with an | acceptable 100 as a middle ground. | | On my screen with 1920x1080, 2 side-by-side panels can fit | 100 chars, but only if the sidebar is hidden (project | layout, list of open files, that kind of stuff). | | On my laptop, 2 side-by-side files won't fit if they exceed | 90 chars. | | I just don't want to concede to those devs who use a single | editor pane with an ultrawide monitor, and believe that | everybody must work like they do. | hoherd wrote: | These are web developers. Of course they're going to try to | force content into a narrow width view and not let you | choose to have a wider view even if it makes perfectly | valid sense for the given content. These are usability | problems that people aren't allowed to make their own | decisions about because the UI designer knows the only | right answer. "It makes the content more readable" and all | that. /s | wentin wrote: | People use ultrawide screen, with half screen dedicated to | browser, half screen for code editor, and two columns open | in editor. This is very modern setup, and 80 is perfect for | it. Don't limit your thinking to your own setup. | | I think discussion on the perfect limit on public forum is | non-sense. It might be slightly less non-sense to discuss | it with your team, but even that I think it is bike- | shredding most of the time, unless the entire team for some | reason (like they share the same equipment setup and happen | to have same preference) overwhelmingly share the | sentiment. | The_Colonel wrote: | > People use ultrawide screen, with half screen dedicated | to browser, half screen for code editor, and two columns | open in editor. This is very modern setup, and 80 is | perfect for it. Don't limit your thinking to your own | setup. | | It kind of sounds like you're promoting your own setup. | | The funny thing I see the most is that people with these | crazy widescreen monitors still maximize just one window, | with just one file open. Not sure why, maybe for focus? | The_Colonel wrote: | > If the limit is 80, then the limit is 80, not 81. | | I don't see a reason to enforce this strictly. The goal is | readability, the max line length is an _approximate_ proxy | for that. | j1elo wrote: | I agree, actually :) | | I ignored this point on purpose, to be more succint. But | yes, it could be possible to have a _soft limit_ (e.g. 80, | or 100) and then you would have to set a _hard limit_ (say, | 85 or 105). But in the end you 'd end up having someone who | complains because their beautiful line was 84 chars and | after adding the closing paren and the semicolon, it got | wrapped into something that they don't like because | _subjective tastes_. | | So in the end, we just moved the goalpost +5 chars. | mvdtnz wrote: | I understand not wanting to bike shed on the actual number | but I refuse to accept 80. I simply do not agree that the | greybeards with 70s technology got it figured out perfectly | in their day and nothing has changed. | c-hendricks wrote: | Some things overlooked in that blog post for others to take | into consideration: | | - eslint only works on javascript + typescript (eslint + | typescript needs _more_ configuration than eslint + prettier), | while prettier works on | https://github.com/prettier/prettier/blob/03ebc7869dc9e8f2fc... | | - eslint + prettier doesn't need lots of configuration from the | user. You add eslint-plugin-prettier and say `"extends": | ["plugin:prettier/recommended"]` | thenbe wrote: | By default, eslint only lints files with a .js extension[1]. | Eslint plugins are what allow eslint to support more | languages. A list can be found here[2]. | | For the record, prettier can also be extended to support more | languages[3]. | | [1] https://eslint.org/docs/latest/use/command-line- | interface#--... | | [2] https://github.com/dustinspecker/awesome-eslint#plugins | | [3] https://prettier.io/docs/en/plugins#official-plugins | varrock wrote: | Specifically for reviewing a pull request in GitHub, wouldn't | the "Hide whitespace" setting reduce some of this noise? I | could be mistaken, though, but that's how I interpreted that | setting. | | 0: https://github.blog/2011-10-21-github-secrets/ | sltkr wrote: | This is often useful, but JavaScript specifically has the | annoying property that newlines can be semantically | meaningful. | | For example, if someone changes: function | isUserBanned(username) { return | db.findUserByName(username)?.banned; } | | To: function isUserBanned(username) { | return db.findUserByName(username)?.banned; | } | | you want to see that diff because the second version always | returns undefined. If you ignore whitespace changes entirely, | it becomes possible for people to sneak in bugs intentionally | or unintentionally. | tharkun__ wrote: | Enforce semicolons. | chris_wot wrote: | gawd and this is why the semicolon debate wasn't just bike | shedding. | HALtheWise wrote: | How much does prettier formatting help here for practical | cases? In particular, if the autoformatter allowed that | second example with the indentation on the last line, I'd | treat that as an autoformatter bug. | blauditore wrote: | That's technically true, but extrememly rare to cause real | problems (short of bad intent). It reminds me of | people/teams enforcing braces on single-line ifs, because | one might add another line someday, forget to add braces, | and break the logic. Even when it happens, there should | still be tests that catch this. | Shish2k wrote: | On the one hand, yes, there _should_ be tests. On the | other, `goto fail;` :P | | Also, adding braces from the start means that adding one | new line of code is a one-line patch, instead of a four- | line one - I do that for the same reason that I always | put trailing commas on my array definitions | IshKebab wrote: | That's not an issue with Prettier; it's an issue with having a | consistent style and not using syntax aware diff tools. | adam_arthur wrote: | Yes, Prettier largely won by not having many competitors | strictly focused on formatting in a simple to consume package. | | I don't think many people who are serious about high "signal to | noise" code formatting are supportive of the design decisions | prettier makes. e.g. the staggered import lines, left-shifting | and up-shifting of implementation details, not allowing | trailing comments on the same line | | We can have consistent formatting and also avoid tons of visual | noise that prettier produces... I've wanted to build a | competing solution for awhile, but never made the time for it. | Perhaps Anthony's project achieves that... I'll give it a try! | Cthulhu_ wrote: | It's not a dichotomy though; performance is imo essential for a | tool that will run on every save, every commit, every pull | request. It might be fast enough, but adding all runs up adds | up to a lot of unnecessary energy waste. | | With regards to the whitespace issue, that's down to the line | length rules used I think. It's also down to the diff viewer | how to show it, not the formatter. | meindnoch wrote: | "This means that we can now focus on the next important aspect: | Performance. Prettier has never been fast per se, but fast enough | for most use cases. This has always felt unsatisfying so we | wanted to do something about it. What better way than a friendly | competition. | | On November 9th, we put up a $10k bounty for any project written | in Rust that would pass 95% of Prettier test suite." | | I don't see how better performance follows from the fact that | something is written in Rust. One could have simply transpiled | the existing codebase into Rust, and collect the reward. | tills13 wrote: | > One could have simply transpiled the existing codebase into | Rust, and collect the reward | | Why didn't you, then? | meindnoch wrote: | Because this is the first time I've heard about this contest. | | But I'll do it for you, if you put up the 20k USD. Will you? | strager wrote: | Here is the answer I got from vjeux: | | > There's a lot of fast web tooling being written in rust those | days. https://twitter.com/Vjeux/status/1722769322299609565 | | I don't buy it. I think vjeux is riding the hype. | tubthumper8 wrote: | > One could have simply transpiled the existing codebase into | Rust, and collect the reward. | | I'm not sure if this is already an internet saying somewhere, | but whenever I read the word "simply", I assume that whatever | comes next won't be simple, because if it was actually simple | it wouldn't need to be qualified. | | In this case, I don't know that transpiling a JS codebase to | Rust is simple. The mental models, the libraries used, the way | that code written is quite different between the two languages | and I doubt that JS-to-Rust transpilers are robust enough to be | used on a codebase the size of Prettier, if such transpilers | even exist at all. | nicoburns wrote: | > I don't see how better performance follows from the fact that | something is written in Rust. | | Idiomatic Rust will often by 5-10x faster than very similar | looking JavaScript/TypeScript code without even trying to | optimise it. It depends what you're doing, and this doesn't | always apply. But parsers where you're doing a lot of string | manipulation are one of the cases where it definitely does. | refulgentis wrote: | "[to] get Biome running in Wasmer", it seems | thowaway91234 wrote: | So this isn't replacing the main implementation? They just funded | a new project written in Rust that is compatible? | codeptualize wrote: | Awesome! Lets gooo! | | Can't say prettier performance ever bothered me, but if it can | run faster and leaner I'm all for it! Increase my battery life :D | | In general it's really exciting to see the advancements in JS | tooling, the quick successions of tooling in JS might be | controversial, but I love it. Each step was a significant | improvement over what was there before, and the current Rust | rewrite wave has already given us great tools that I use daily. | | I also like that there is some money being thrown at the | problems! | 11235813213455 wrote: | I dislike prettier and wonder why it's so popular because | | - I sometimes prefer lines to exceed maxLength (ex: template | string, which prettier would horribly break on vars) | | - allow `1 + 2 * 3` or `a || b && c` to be parenthesis-less | because everyone know the precendence here | digging wrote: | > I sometimes prefer lines to exceed maxLength (ex: template | string, which prettier would horribly break on vars) | | Prettier doesn't break a long template literal though...? | | > allow `1 + 2 * 3` or `a || b && c` to be parenthesis-less | because everyone know the precendence here | | "Everyone knows" is usually an unwise assumption. And adding | parentheses does make it easier to read even for people who | know their order of operations. | sarahdellysse wrote: | Not OP, but prettier doesn't break template literals, but it | will break non-literal sections of template strings. For | example, if we wrote this: const foo = `aaa | aaaaaaaaaaaa${bbbbbbbbbbbbb}ccccccccccccccc${ddddddddddd}`; | | prettier would fix it to const foo = | `aaaaaaaaaaaaaaa${ bbbbbbbbbbbbb | }ccccccccccccccc${ ddddddddddd }`; | | (or something similar) and it would be fully equivalent. | | I don't like it doing that either tbh but hey prettier is | good enough in most cases its worth putting up with it | shrimpx wrote: | > You may not be aware but thanks to all those donations, we've | been able to pay two people $1.5k/month for the past two years to | keep shipping. Fisker Cheung and Sosuke Suzuki have done an | incredible job! | | It's incredible how little money some people get paid to build | foundational pieces in a multi-trillion dollar industry. | uxp8u61q wrote: | I don't want to disparage prettier, but to call it a | foundational piece... | fallat wrote: | I agree. Foundational isn't the right word here. I would | though accept "impactful". A lot of people care about code | formatting "taken care of". | wentin wrote: | Maybe essential is a better word. | austin-cheney wrote: | That is still far too much an exaggeration. This is an | opinionated beautifier. Its a vanity item with some | downstream utility benefits. | cdmckay wrote: | A formatter is pretty essential when working in a team. | It saves tons of time wasted on code formatting in code | reviews. | 0x0000000 wrote: | > A formatter is pretty essential when working in a team. | | I worked on a team without a formatter for more than 5 | years. I'm certain _many_ people have done the same. | "Essential" is overselling. | aniforprez wrote: | I think at this point I would consider a formatter | essential for working with a team. It helps make code | style opinionated and fixed and I have no surprises when | reading code. No one doing weird formatting to align | random things. Any formatting tool that allows for pages | upon pages of options is simply not something I want to | deal with. Something like black, gofmt and prettier is | vital | austin-cheney wrote: | Bike shedding. I say this as somebody who has written a | once prominent JavaScript code beautifier. Automating | code beautification is a nice to have. It becomes | essential when developers cannot be bothered to focus on | more important things because either more important | things are too challenging for the given developers or | because the given developers want to feel more important | than their contributions/decisions are actually worth. | shrimpx wrote: | Auto formatting tools like prettier and black didn't use | to be essential but they're quickly becoming essential. | Just look at the growth curves for pip and npm installs. | I for one feel like my editor is broken if it doesn't | auto format on save. | gardenhedge wrote: | How about ubiquitous? | silverlyra wrote: | When seeing Prettier as a software tool, to consider Prettier | more "foundational" than (e.g.) TypeScript or V8 does seem | like an inversion of hierarchy [1] - but viewed as history, | as a practice, Prettier's accomplishment of making automatic | code formatting (a la `go fmt` or Python `black`) widespread | in JavaScript, the lingua franca of programming, is | foundational. | | All that time spent staring at code that could have been more | readable, or writing style guides and reformatting code, is | now spent doing what we were trying to do in the first place. | And now, speeding up the time we wait to apply formatting or | check it in CI by _rewriting it in Rust(tm)_ gives us a bit | more of that time back. :) | | [1]: https://youtu.be/ar9WRwCiSr0 | Cthulhu_ wrote: | I wouldn't call it foundational, but it would be one of the | first things I'd set up in a new JS based project, alongside | unit tests, com/transpiling and eslint. | fallat wrote: | Nerd sniping is incredibly effective. I would say it's abused | quite often too. | | I don't know what to say other than, if these people are out of | a job, and you're a company funding prettier or need good JS | people, please hire them. | shepherdjerred wrote: | Like the others said, Prettier isn't foundational. | | That said, it brings in _much_ more value than $1.5k/mo. It has | eliminated styling arguments on teams that adopt it. The amount | of time saved in PRs/reduction of bikeshedding is very | valuable. | The_Colonel wrote: | Meh, most devs I've met can format code better than Prettier. | Having a consistent set of rules sounds alluring at first, | but the issue is that mechanical application is, well, | mechanical and therefore dumb. | | My personal impression is that the code style bike shedding | is a sign of team immaturity. In the more mature teams | (composed of more mature persons), I haven't really seen | formatting bike shedding. | joshxyz wrote: | Yeah right until you're working in a team of 30+ people | without a code formatter like Prettier. | | Since when did caring about readability equated to bike- | shedding and immaturity? | Cthulhu_ wrote: | Just because they can, doesn't mean they should; how many | comments in your code reviews are about code style? | | In mine, it used to be... at least half, because I was anal | about code style and consistency and all we had at the time | was ESLint, which only did partial code stile. | | Nowadays, it's none. If you need to worry about code style | in code reviews, use a tool. | Cannabat wrote: | Those devs _can_, but why should they? Code formatting | takes a lot of time - it doesn't matter how skilled of a | dev you are - you can only accurately <tab> and <space> so | fast. | | But the big win for code formatters is fewer decisions. | Decision fatigue is real. | | What's wrong with the application of e.g. Prettier? Is it | wrong enough that it's worth your time to manually format | however many thousands of LOC, making countless micro | decisions along the way? | shrimpx wrote: | It's "foundational" in the sense that it gets 30M weekly `npm | install`s which is up 500% from 4 years ago and growing. | Js/Ts projects depend on it heavily. | jejeyyy77 wrote: | this, lol. | | Even a $20K bounty for that amount of work doesn't even seem | worth it to boot up my IDE. | assimpleaspossi wrote: | Their next bounty should be for fixing their insistence on | putting a closing slash on HTML tags that have never, ever | required them in any HTML specification. | neontomo wrote: | I couldn't find the answer - does Biome work with a | prettierrc.json file so that it can be implemented in an | organisation that uses Prettier? In this case it would only be | for speed reasons, not the formatting. | bntyhntr wrote: | I would love to hear about any of this. I couldn't find a clear | migration path with some quick googling, but I managed to | eventually track down the rules I need to get mostly compatible | with my org's prettier formatting. Notably, stuff I needed was | in the `javascript.formatter` section of config. But even after | matching everything, Biome was wrapping lines differently. Not | sure but I don't actually run the front-end show so I stopped | poking at that point. | bovermyer wrote: | So, how does Biome compare to Dprint? | afjeafaj848 wrote: | Maybe I missed it but I don't get how this improves the JS | implementation | | Are they planning to run Rust in the browser? Or make some sort | of node module that calls down into rust? | adam_arthur wrote: | Rust can run in the browser via compiling down to, and running | as, WebAssembly. So I don't see why not. | | Prettier is run mostly on the serverside though, not the | browser. I assume supporting both is still desirable though | WorldMaker wrote: | There are node modules already that call into WASM-wrapped | rust. (One of the most common source map generation packages | does exactly that and it is very heavily installed by a lot of | frameworks and packagers today.) | | I don't think prettier is intending to do that in this case, | they seem to want to continue to compete as a pure JS | implementation but having a "worst case, we WASM wrap biome as | the future of prettier" possibility opens up future | opportunities and pushes "internal" competition. | wg0 wrote: | > Consider donating if you or your company are using Prettier and | it has been helpful to you. | | Wondering what company would NOT be using prettier. Not many. | | Some arguing that Prettier isn't foundational piece of software, | I'd consider automated consistent readability enhancements as | foundational though. | hendry wrote: | Anyone know the minimal package.json or Github template to get | this going in a new repository please? | globular-toast wrote: | Why did it have to be Rust? Couldn't have just been "faster"? Is | the Rust one actually fast? Does memory safety and leaks etc even | matter for a program like Prettier? | WorldMaker wrote: | There's a lot of vocal people especially here on HN that think | that Rust is the fastest, safest language currently around, so | this was maybe in part a "put your money where your mouth is" | challenge. | kamikaz1k wrote: | Does any body have a collection of all the profiling Fabio | Spampinato did? | fabiospampinato wrote: | I haven't really kept track of everything. It may be worth | making a blog post with the main findings though. | vinniepukh wrote: | I want to use Biome, but until it either has plugins or | implements the tailwindcss class sorting itself, I will not be | able to adopt it. | | This is a common sentiment in the fullstack community right now. | mvdtnz wrote: | So now there are two distinct, somewhat compatible but surely | diverging implementations of the same thing. Yup, sounds like the | JS ecosystem. ___________________________________________________________________ (page generated 2023-11-27 23:00 UTC)