Closed greenkeeper[bot] closed 7 years ago
After pinning to 1.4.4 your tests are still failing. The reported issue might not affect your project. These imprecisions are caused by inconsistent test results.
Your tests are still failing with this version. Compare the changes 🚨
Your tests are still failing with this version. Compare the changes 🚨
Your tests are passing again with this version. Explicitly upgrade to this version 🚀
Version 1.5.0 of prettier just got published.
This version is covered by your current version range and after updating it in your project the build failed.
As prettier is “only” a devDependency of this project it might not break production or downstream projects, but “only” your build or test tools – preventing new deploys or publishes.
I recommend you give this issue a high priority. I’m sure you can resolve this :muscle:
Status Details
- ❌ **ci/circleci** Your tests failed on CircleCI [Details](https://circleci.com/gh/tmcw/got-links/40?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link)Release Notes
1.5.0: GraphQL, CSS-in-JS & JSONThis is the release I've been waiting for a very long time: one that has only minimal changes to JavaScript!
For the past 6 months, we kept doing changes to various aspects of printing JavaScript, with the hope that one day we would get to a stable place. No automated tool is going to print perfect code for all the possible edge cases. The goal is to find a good place where when people report code that is printed in a funny way, we can't make it better without making other pieces of code look worse, introduce behavior that's very hard to understand for humans and doesn't introduce some disproportionate complexity to the codebase.
We're not 100% there yet, but we're closer than ever!
Now that JavaScript needs for support is trending down, it's an opportunity to support other languages that front-end developers are working on and want formatted. We've introduced TypeScript and CSS in the last release and are doing a batch of fixes for them in this release. We're also adding support for new languages: GraphQL queries, embedding CSS-in-JS and JSON are now available in prettier!
Blog Post: Adding a new layout strategy to Prettier by @karl
Prettier is not only a useful tool but it's also a really cool piece of technology. @karl spent a bunch of time improving JSX support and in the process implemented a new primitive to prettier:
fill
. He wrote a very interesting blog post Adding a new layout strategy to Prettier that I highly recommend reading if you're interested in how prettier is working behind the scenes.GraphQL
Thanks to @stubailo, @jnwng, @tgriesser and @azz, prettier now supports printing GraphQL queries!
It works for
.graphql
files and within JavaScipt templates that start withgraphql
,graphql.experimental
andgql
in order to work with Relay and Apollo.Note that it only supports the open source syntax of GraphQL, therefore doesn't work with Relay Classic, it only works with Relay Modern.
CSS-in-JS
If you are using styled-components or styled-jsx, prettier will now reformat the CSS inside of your template expressions.
JSON
This was pretty straightforward to implement but nonetheless very useful. Thanks to @josephfrazier for doing it :)
CSS
I'm really excited because we only put a few days to build the initial CSS support and it has worked surprisingly well. This release brings a handful of important improvements to CSS but nothing that required big changes.
CSS: Every selector is now printed in its own line (#2047) by @yuchi
The biggest unknown when printing CSS was how to deal with multiple selectors. The initial approach we took was to use the 80 columns rule where we would only split if it was bigger than that. Many people reported that they were using another strategy for this: always break after a
,
. It turns out that many popular codebases are using this approach and it feels good as you can see the structure of the selectors when layed out on-top of each others.CSS: lowercase hex colors (#2203) by @azz
The concept of code formatting has blurry boundaries. The core aspect of it is around whitespaces but some things like single vs double quotes and semi-colons are usually bundled with it. With prettier on JavaScript, we also lightly reformat strings by removing extra
\
and normalize numbers. For CSS, we need to do a similar interpretation of where the boundary ends. For colors, we decided to turn all the letters into lowercase and stop there. Turning rgb() into hex or 6 hex into 3 hex is out of scope.CSS: Use fill for CSS values (#2224)
The new fill primitive turned out to be very useful for CSS. For long values, instead of breaking and putting a
\n
before every element, we can instead only put a\n
when it goes over the limit. It leads to much better looking code.CSS: Allow long media rules to break (#2219)
This is another small fix in the journey of properly supporting a new language. We now encode the ability to break on long
@media
rules.CSS: Print @else on same line as } (#2088) by @azz
Less and Scss are turning into real programming languages :) Step by step, we're starting to print all their constructs in the same way as JavaScript. This time, it's the
else
placement.CSS: implement prettier-ignore (#2089) by @azz
While we want prettier to format the entire codebase, there are times where we "know better" and want an escape hatch. This is where the
prettier-ignore
comment comes in. It wasn't working for CSS but that was an oversight, now it is implemented :)CSS: Fix css-modules composes breaking with long line width (#2190) by @tdeekens
In order to be fast, many "packagers" do not parse files in order to extract dependencies but instead use a crude regex. This is a reason why we don't break long
require()
calls and it happens to also affect CSS Modules. If you add new lines in thecomposes
field, it doesn't recognize it anymore. So we're no longer breaking it there, even if it goes over 80 columns.CSS: First try scss when there's an @import with comma (#2225)
We made a decision to have only a single high level "parser" for CSS, SCSS and Less even though we are using
postcss-less
andpostcss-scss
under the hood. We use a regex to figure out which parser to try first and fallback to the other one if a syntax error is thrown. Unfortunately, for certain features, the first (incorrect) parser doesn't throw and instead skips some elements. So, we need to beef up the regex to make sure we are right for the early detection.Thankfully, this hack is working well in practice. If we find a lot more edge cases, we'll likely want to do the right thing(tm) and split them into two parsers.
TypeScript
TypeScript support is now solid, all the changes for this release are small edge cases.
TypeScript: print arrow function type params on same line as params (#2101) by @azz
The core algorithm of prettier is to expand a group if all the elements do not fit. It works really well in practice for most of JavaScript but there's one case it doesn't handle very well is when there are two groups side by side, in this case:
<Generics>(Arguments)
. We have to carefully create groups such that arguments expand first as this is generally what people expect.TypeScript: keep parens around with yield/await non-null assertion (#2149) by @azz
For better or worse, we decided to manually handle adding parenthesis. So when a new operator is introduced, we need to make sure that we add correct parenthesis when nested with any other combination of operators. In this case, we missed await inside of TypeScript
!
.TypeScript: Print {} in import if it's in the source (#2150) by @azz
We use typescript-eslint-parser project that translates TypeScript AST into estree AST in order for prettier to print it. From time to time we're going to find edge cases that it doesn't handle yet. In this case, it didn't give a way to tell that there's an empty
{}
, which apparently is important for TypeScript. Thankfully, the team is very responsive and they fixed it after we put a workaround inside of prettier.TypeScript: Always break interfaces onto multiple lines (#2161) by @azz
The code that implements
interface
is shared with the code that printsobject
s, which contains a rule to keep them expanded if there's a\n
inside. But, this is not the intended behavior for interfaces. We always want to expand, like we do for classes, even if it fits 80 columns.TypeScript: Fix extra semicolon in ambient typescript declaration emit (#2167) by @azz
no-semi
andsemi
are often requested but on the prettier team we're one step ahead and implementedtwo-semi
for you! Just kidding, it was a bug and is now fixed ;)TypeScript: group function params in call/construct signatures (#2169) by @azz
Adding a comment before a method used to take into account the comment length and would often expand the method when it wasn't expected. Thankfully, it was a simple fix, just wrap the output in a
group
.TypeScript: Upgrade tsep (#2183) by @azz
This bug was very annoying if you ran into it: anytime you formatted the code, it would add one more
_
to the object key!TypeScript: break on multiple interface extends (#2085) by @azz
Unlike in JavaScript, TypeScript lets you extend multiple classes at once. It turns out that people use this feature and prettier now does a better job at printing it.
TypeScript: handle ObjectPattern instead of ObjectExpression inside BinaryExpression (#2238) by @azz
This one isn't very interesting, it's an edge case that's not properly handled in the TypeScript -> estree conversion.
Preserve lines after directives (#2070)
By supporting TypeScript, prettier is now being used in a lot of Angular codebases which exercises edge cases that were not properly handled. In this case, we didn't preserve empty lines after directives inside of a function.
JavaScript
This release is very light in terms of JavaScript changes, which is awesome. We're starting to see the light at the end of the tunnel and get towards a great pretty printer. We're never going to get to a 100% perfect automatic pretty printer. The goal is that for every issue we get, there are no clear ways to improve the way it is printed without regressing other pieces.
Allow JSX lines to be recombined (#1831) by @karl
The goal of prettier is to have a consistent way to format your code: given an AST, we always print the same way. In two places we had to compromise and read the original format: JSX and Objects. With this change, we're no longer relying on the original input for JSX with text inside. This lets us reflow
Break on non-literal computed member expression (#2087) by @azz
Printing member chains is the most complicated piece of prettier and we keep finding small tweaks we can do to make it a better experience.
Indent first variable in one-var scenario (#2095) by @azz
Up until recently we haven't done much to support printing multiple variables in a single declaration as the most common practice is to do one variable declaration per variable. For single declarations, we don't want to indent it, but it turns out that we do when there are other ones afterwards, otherwise it looks weird.
Allow break with both default named import (#2096) by @azz
This one is an unfortunate regression from 1.4 where we inlined import that only contained a single element. Turns out the definition of a single element allowed a single type and a single element. This is now corrected!
Turn allowImportExportEverywhere on (#2207) by @zimme
The goal of prettier is to format code people write in practice, so we enable loose/experimental modes for all the parsers we support. Babylon allows you to write import within a function, which is not part of the standard, but it doesn't cost us much to allow it.
Support inline template for new calls (#2222)
We keep adding features for function calls and have to backport them to new calls as they have a different AST node type but in practice we want to treat them the same. This fix refactored the two so that they are going through the same call site, so hopefully should prevent more from sneaking in.
Don't indent + in object value (#2227)
When we switched to using the same heuristic for assignment (
a = b
) for objects ({a: b}
), we forgot to fix the indentation. Now it's fixed.Handle conditions inside of a ternary (#2228)
Prettier already had a special case when the expression was a conditional but it didn't apply when the conditional was the left part of a ternary. Now it does.
Add caching for printing (#2259)
With the 1.0 release, we fixed a bug in the printing that introduced an exponential behavior. We've been able to mitigate the biggest issue such that reasonable code didn't time out, but it wasn't completely fixed it. By adding a caching layer at the right spot, we should now be in the clear.
This should make printing the IR of prettier using prettier in debug mode no longer time out.
Fix variance location (#2261)
We refactored the code that prints modifiers when we introduced TypeScript support and accidentally moved around the variance (
+
) part beforestatic
which is not valid in Flow. This is now fixed.Miscellaneous
Various fixes for range and cursor tracking (#2266, #2248, #2250, #2136) by @CiGit and @josephfrazier
Both those features were introduced in the last release and we discovered a bunch of issues when actually using them in production. A bunch of them got fixed, if you see more, please report them!
Not sure how things should work exactly?
There is a collection of [frequently asked questions](https://greenkeeper.io/faq.html) and of course you may always [ask my humans](https://github.com/greenkeeperio/greenkeeper/issues/new).Your Greenkeeper Bot :palm_tree: