2019-01-21 03:33:07 +03:00
<!--
2019-05-13 21:12:30 +03:00
NOTE: Don't forget to add a link to your GitHub profile and the PR in the end of the file.
2019-01-21 03:33:07 +03:00
Format:
2019-06-06 23:42:52 +03:00
#### Category: Title ([#PR] by [@user])
2019-01-21 03:33:07 +03:00
2019-05-13 21:10:25 +03:00
Description
2019-01-21 03:33:07 +03:00
2019-05-13 21:10:25 +03:00
```
// Input
Code Sample
2019-01-21 03:33:07 +03:00
2019-05-13 21:10:25 +03:00
// Output (Prettier stable)
Code Sample
2019-01-21 03:33:07 +03:00
2019-05-13 21:10:25 +03:00
// Output (Prettier master)
Code Sample
```
2019-01-21 03:33:07 +03:00
Details:
Description: optional if the `Title` is enough to explain everything.
Examples:
2019-06-06 23:42:52 +03:00
#### TypeScript: Correctly handle `//` in TSX ([#5728] by [@JamesHenry])
2019-01-21 03:33:07 +03:00
2019-05-13 21:10:25 +03:00
Previously, putting `//` as a child of a JSX element in TypeScript led to an error
because it was interpreted as a comment. Prettier master fixes this issue.
2019-01-21 03:33:07 +03:00
2019-05-13 21:10:25 +03:00
<!-- prettier-ignore -- \>
```js
// Input
const link = < a href = "example.com" > http://example.com< / a >
2019-01-21 03:33:07 +03:00
2019-05-13 21:10:25 +03:00
// Output (Prettier stable)
// Error: Comment location overlaps with node location
2019-01-21 03:33:07 +03:00
2019-05-13 21:10:25 +03:00
// Output (Prettier master)
const link = < a href = "example.com" > http://example.com< / a > ;
```
2019-01-21 03:33:07 +03:00
-->
2019-06-10 15:30:54 +03:00
2019-08-28 13:50:24 +03:00
#### JavaScript: More readable parentheses for new-call ([#6412] by [@bakkot])
<!-- prettier - ignore -->
```js
// Input
var a = new (x().y)();
var a = new (x().y.z)();
var a = new (x().y().z)();
// Output (Prettier stable)
var a = new (x()).y();
var a = new (x()).y.z();
var a = new (x().y()).z();
// Output (Prettier master)
var a = new (x().y)();
var a = new (x().y.z)();
var a = new (x().y().z)();
```
2019-08-14 13:45:59 +03:00
#### MDX: fix text with whitespace after JSX trim incorrectly ([#6340] by [@JounQin])
Previous versions format text with whitespace after JSX incorrectly in mdx, this has been fixed in this version.
<!-- prettier - ignore -->
```md
<!-- Input -->
# Heading
< Hello >
test < World / > test
< / Hello > 123
<!-- Output (Prettier stable) -->
< Hello >
test < World / > test
< / Hello > 123
<!-- Output (Prettier master) -->
< Hello >
test < World / > test
< / Hello > 123
```
2019-07-29 14:32:24 +03:00
#### MDX: Adjacent JSX elements should be allowed in mdx ([#6332] by [@JounQin])
Previous versions would not format adjacent JSX elements in mdx, this has been fixed in this version.
<!-- prettier - ignore -->
```jsx
// Input
< Hello >
test < World / > test
< / Hello > 123
// Output (Prettier stable)
SyntaxError: Unexpected token (3:9)
1 | < Hello >
2 | test < World / > test
> 3 | </Hello>123
| ^
// Output (Prettier master)
< Hello >
test < World / > test
2019-08-14 13:45:59 +03:00
< / Hello > 123
2019-07-29 14:32:24 +03:00
// Input
< Hello >
test < World / > test
< / Hello >
< Hello >
test < World / > test
< / Hello > 123
// Output (Prettier stable)
SyntaxError: Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment < >...< />? (4:1)
2 | test < World / > test
3 | < / Hello >
> 4 | <Hello>
| ^
5 | test < World / > test
6 | < / Hello > 123
// Output (Prettier master)
< Hello >
test < World / > test
< / Hello >
< Hello >
test < World / > test
< / Hello > 123
```
2019-06-10 15:30:54 +03:00
#### TypeScript: Print comment following a JSX element with generic ([#6209] by [@duailibe])
Previous versions would not print this comment, this has been fixed in this version.
<!-- prettier - ignore -->
```ts
// Input
const comp = (
< Foo < number >
// This comment goes missing
value={4}
>
Test
< / Foo >
);
// Output (Prettier stable)
const comp = < Foo < number > value={4}>Test< / Foo > ;
// Output (Prettier master)
const comp = (
< Foo < number >
// This comment goes missing
value={4}
>
Test
< / Foo >
);
```
2019-06-14 18:11:47 +03:00
### Handlebars: Avoid adding unwanted line breaks between text and mustaches ([#6186] by [@gavinjoyce])
Previously, Prettier added line breaks between text and mustaches which resulted in unwanted whitespace in rendered output.
<!-- prettier - ignore -->
```hbs
// Input
< p > Your username is @{{name}}< / p >
< p > Hi {{firstName}} {{lastName}}< / p >
// Output (Prettier stable)
< p >
Your username is @
{{name}}
< / p >
< p >
Hi
{{firstName}}
{{lastName}}
< / p >
// Output (Prettier master)
< p >
Your username is @{{name}}
< / p >
< p >
Hi {{firstName}} {{lastName}}
< / p >
```
2019-06-19 15:53:27 +03:00
### Handlebars: Improve comment formatting ([#6206] by [@gavinjoyce])
Previously, Prettier would sometimes ignore whitespace when formatting comments.
<!-- prettier - ignore -->
```hbs
// Input
< div >
{{! Foo }}
{{#if @foo }}
Foo
{{/if}}
{{! Bar }}
{{#if @bar }}
Bar
{{/if}}
< / div >
// Output (Prettier stable)
< div >
{{! Foo }}
{{#if @foo }}
Foo
{{/if}}{{! Bar }}{{#if @bar }}
Bar
{{/if}}
< / div >
// Output (Prettier master)
< div >
{{! Foo }}
{{#if @foo }}
Foo
{{/if}}
{{! Bar }}
{{#if @bar }}
Bar
{{/if}}
< / div >
```
2019-08-28 23:03:41 +03:00
#### JavaScript: Update ?? precedence to match stage 3 proposal ([#6404] by [@vjeux])
We've updated Prettier's support for the nullish coalescing operator to match a spec update that no longer allows it to immediately contain, or be contained within an `&&` or `||` operation.
<!-- prettier - ignore -->
```js
// Input
(foo ?? baz) || baz;
// Output (Prettier stable)
foo ?? baz || baz;
// Output (Prettier master)
(foo ?? baz) || baz;
```
Please note, as we update our parsers with versions that support this spec update, code without the parenthesis will throw a parse error.
2019-07-10 16:06:08 +03:00
#### JavaScript: Keep unary expressions parentheses with comments ([#6217] by [@sosukesuzuki])
Previously, Prettier removes parentheses enclose unary expressions. This change modify to keep it when the expression has comments.
<!-- prettier - ignore -->
```ts
// Input
!(
/* foo */
foo
);
!(
foo // foo
);
// Output (Prettier stable)
!/* foo */
foo;
!foo; // foo
// Output (Prettier master)
!(/* foo */ foo);
!(
foo // foo
);
```
2019-07-08 12:07:41 +03:00
### Handlebars: Improve comment formatting ([#6234] by [@gavinjoyce])
Previously, Prettier would incorrectly decode HTML entiites.
<!-- prettier - ignore -->
```hbs
// Input
< p >
Some escaped characters: < > &
< / p >
// Output (Prettier stable)
< p >
Some escaped characters: < > &
< / p >
// Output (Prettier master)
< p >
Some escaped characters: < > &
< / p >
```
2019-07-10 16:56:53 +03:00
#### JavaScript: Stop moving comments inside tagged template literals ([#6236] by [@sosukesuzuki])
Previously, Prettier would move comments after the tag inside the template literal. This version fixes this problem.
<!-- prettier - ignore -->
```js
// Input
foo //comment
`
`;
// Output (Prettier stable)
foo` // comment
`;
// Output (Prettier master)
foo // comment
`
`;
```
2019-07-10 17:34:23 +03:00
#### JavaScript: Fix moving comments in function calls like `useEffect` second argument ([#6270] by [@sosukesuzuki])
This fixes a bug that was affecting function calls that have a arrow function as first argument and an array expression as second argument, such as the common React's `useEffect` . A comment in its own line before the second argument would be moved to the line above.
The bug was only present when using the Flow and TypeScript parsers.
<!-- prettier - ignore -->
```js
// Input
useEffect(
() => {
console.log("some code", props.foo);
},
// We need to disable the eslint warning here,
// because of some complicated reason.
// eslint-disable line react-hooks/exhaustive-deps
[]
);
// Output (Prettier stable)
useEffect(() => {
console.log("some code", props.foo);
}, // We need to disable the eslint warning here,
// because of some complicated reason.
// eslint-disable line react-hooks/exhaustive-deps
[]);
// Output (Prettier master)
useEffect(
() => {
console.log("some code", props.foo);
},
// We need to disable the eslint warning here,
// because of some complicated reason.
// eslint-disable line react-hooks/exhaustive-deps
[]
);
```
2019-07-11 17:27:53 +03:00
#### TypeScript: Fix crashes when using `//` in JSX texts ([#6289] by [@duailibe])
This version updates the TypeScript parser to correctly handle JSX text with double slashes (`//`). In previous versions, this would cause Prettier to crash.
2019-07-22 17:17:24 +03:00
#### CLI: Add `--only-changed` flag ([#5910] by [@g-harel])
Flag used with `--write` to avoid re-checking files that were not changed since they were last written (with the same formatting configuration).
2019-08-08 15:18:37 +03:00
#### HTML, Vue: Don't break the template element included in a line shorter than print-width([#6284] by [@sosukesuzuki])
Previously, even if the line length is shorter than print-width is Prettier breaks the line with a template element.
<!-- prettier - ignore -->
```html
// Input
< template >
< template > foo< / template >
< / template >
// Output (Prettier stable)
< template >
< template
>foo< /template
>
< / template >
// Output (Prettier master)
< template >
< template > foo< / template >
< / template >
```
2019-08-08 16:06:28 +03:00
#### JavaScript: Fix breaks indentation and idempotency when an arrow function that args include object pattern is passed to a function as parameter. ([#6301] by [@sosukesuzuki])
Previously, Prettier collapses strangely, when an arrow function that args include object pattern is passed to a function as parameter. Also, it breaks idempotency. Please see [#6294 ](https://github.com/prettier/prettier/issues/6294 ) for detail.
<!-- prettier - ignore -->
```js
// Input
foo(
({
a,
b
}) => {}
);
// Output (Prettier stable)
foo(({ a,
b }) => {});
// Output (Prettier master)
foo(
({
a,
b
}) => {}
);
```
2019-08-08 16:48:37 +03:00
#### TypeScript: Fix specific union type breaks after opening parenthesis, but not before closing ([#6307] by [@sosukesuzuki])
Previously, union type that put with `as` , `keyof` , `[]` , other union(`|`) and intersection(`& `) breaks after opening parenthesis, but not before closing. Please see [#6303 ](https://github.com/prettier/prettier/issues/6303 ) for detail.
<!-- prettier - ignore -->
```ts
// Input
const foo = [abc, def, ghi, jkl, mno, pqr, stu, vwx, yz] as (
| string
| undefined
)[];
// Prettier (stable)
const foo = [abc, def, ghi, jkl, mno, pqr, stu, vwx, yz] as (
| string
| undefined)[];
// Prettier (master)
const foo = [abc, def, ghi, jkl, mno, pqr, stu, vwx, yz] as (
| string
| undefined
)[];
```
2019-09-05 21:24:20 +03:00
#### HTML: Script tags are now treated as blocks for the purposes of formatting ([#6423] by [@thorn0])
Previously, in the [whitespace-sensitive mode ](https://prettier.io/docs/en/options.html#html-whitespace-sensitivity ), they were formatted as if they were inline.
<!-- prettier - ignore -->
```html
<!-- Input -->
< script
async
src="/_next/static/development/pages/_app.js?ts=1565732195968"
>< / script > < script > < / script >
<!-- Prettier (stable) -->
< script
async
src="/_next/static/development/pages/_app.js?ts=1565732195968"
>< /script
>< script > < / script >
<!-- Prettier (master) -->
< script
async
src="/_next/static/development/pages/_app.js?ts=1565732195968"
>< / script >
< script > < / script >
```
2019-08-29 21:14:45 +03:00
#### TypeScript: Fixed to break line and add a semicolon in one execution on one line long mapped types ([#6420] by [@sosukesuzuki])
Previously, when Prettier formatted long, one-line mapped types, it would break the line but didn’ t add a semicolon – until you ran Prettier again (which broke Prettier’ s idempotency rule). Now, Prettier adds the semicolon in the first run, fixing the issue.
<!-- prettier - ignore -->
```ts
// Input
type FooBar< T > = { [P in keyof T]: T[P] extends Something ? Something< T [ P ] > : T[P] }
// Prettier (stable)
type FooBar< T > = {
[P in keyof T]: T[P] extends Something ? Something< T [ P ] > : T[P]
};
// Prettier (master)
type FooBar< T > = {
[P in keyof T]: T[P] extends Something ? Something< T [ P ] > : T[P];
};
```
2019-08-30 08:07:00 +03:00
#### JavaScript: Fix ugly formatting on object destructuring with parameter decorators ([#6411] by [@sosukesuzuki])
Previously, Prettier formatted decorators for destructured parameters in a weird way. Now, parameter decorators are placed just above the parameter they belong to.
<!-- prettier - ignore -->
```js
// Input
class Class {
method(
@decorator
{ foo }
) {}
}
// Prettier (stable)
class Class {
method(@decorator
{
foo
}) {}
}
// Prettier (master)
class Class {
method(
@decorator
{ foo }
) {}
}
```
2019-09-05 22:56:30 +03:00
#### JavaScript: Handle empty object patterns with type annotations in function parameters ([#6438] by [@bakkot])
<!-- prettier - ignore -->
```js
// Input
const f = ({}: MyVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongType) => {};
function g({}: Foo) {}
// Output (Prettier stable)
const f = ({
,
}: MyVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongType) => {};
function g({ }: Foo) {}
// Output (Prettier master)
const f = ({}: MyVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongType) => {};
function g({}: Foo) {}
```
2019-09-07 15:46:00 +03:00
#### JavaScript: Fix ugly formatting parens wrap binary expressions within call expressions ([#6441] by [@sosukesuzuki])
Previously, Prettier formatted parens wrap binary expressions within call expressions in a weird way. There was no line break before and after each parens.
<!-- prettier - ignore -->
```js
(
aaaaaaaaaaaaaaaaaaaaaaaaa & &
bbbbbbbbbbbbbbbbbbbbbbbbb & &
ccccccccccccccccccccccccc & &
ddddddddddddddddddddddddd & &
eeeeeeeeeeeeeeeeeeeeeeeee
)();
// Prettier (stable)
(aaaaaaaaaaaaaaaaaaaaaaaaa & &
bbbbbbbbbbbbbbbbbbbbbbbbb & &
ccccccccccccccccccccccccc & &
ddddddddddddddddddddddddd & &
eeeeeeeeeeeeeeeeeeeeeeeee)();
// Prettier (master)
(
aaaaaaaaaaaaaaaaaaaaaaaaa & &
bbbbbbbbbbbbbbbbbbbbbbbbb & &
ccccccccccccccccccccccccc & &
ddddddddddddddddddddddddd & &
eeeeeeeeeeeeeeeeeeeeeeeee
)();
```
2019-09-11 12:10:34 +03:00
#### JavaScript: Fix formatting on long named exports ([#6446] by [@sosukesuzuki])
Previously, Prettier formatted long named exports differently than named imports.
```js
// Input
export { fooooooooooooooooooooooooooooooooooooooooooooooooo } from "fooooooooooooooooooooooooooooo";
// Prettier (stable)
export {
fooooooooooooooooooooooooooooooooooooooooooooooooo
} from "fooooooooooooooooooooooooooooo";
// Prettier (master)
export { fooooooooooooooooooooooooooooooooooooooooooooooooo } from "fooooooooooooooooooooooooooooo";
```
2019-07-22 17:17:24 +03:00
[#5910]: https://github.com/prettier/prettier/pull/5910
2019-06-14 18:11:47 +03:00
[#6186]: https://github.com/prettier/prettier/pull/6186
2019-07-10 16:06:08 +03:00
[#6206]: https://github.com/prettier/prettier/pull/6206
[#6209]: https://github.com/prettier/prettier/pull/6209
[#6217]: https://github.com/prettier/prettier/pull/6217
2019-07-08 12:07:41 +03:00
[#6234]: https://github.com/prettier/prettier/pull/6234
2019-07-10 16:56:53 +03:00
[#6236]: https://github.com/prettier/prettier/pull/6236
2019-07-10 17:34:23 +03:00
[#6270]: https://github.com/prettier/prettier/pull/6270
2019-07-11 17:27:53 +03:00
[#6289]: https://github.com/prettier/prettier/pull/6289
2019-07-29 14:32:24 +03:00
[#6332]: https://github.com/prettier/prettier/pull/6332
2019-08-08 15:18:37 +03:00
[#6284]: https://github.com/prettier/prettier/pull/6284
2019-08-08 16:06:28 +03:00
[#6301]: https://github.com/prettier/prettier/pull/6301
2019-08-08 16:48:37 +03:00
[#6307]: https://github.com/prettier/prettier/pull/6307
2019-08-14 13:45:59 +03:00
[#6340]: https://github.com/prettier/prettier/pull/6340
2019-08-28 13:50:24 +03:00
[#6412]: https://github.com/prettier/prettier/pull/6412
2019-09-05 21:24:20 +03:00
[#6423]: https://github.com/prettier/prettier/pull/6423
2019-08-29 21:14:45 +03:00
[#6420]: https://github.com/prettier/prettier/pull/6420
2019-08-30 08:07:00 +03:00
[#6411]: https://github.com/prettier/prettier/pull/6411
2019-09-05 22:56:30 +03:00
[#6438]: https://github.com/prettier/prettier/pull/6411
2019-09-07 15:46:00 +03:00
[#6441]: https://github.com/prettier/prettier/pull/6441
2019-09-11 12:10:34 +03:00
[#6446]: https://github.com/prettier/prettier/pull/6446
2019-06-10 15:30:54 +03:00
[@duailibe]: https://github.com/duailibe
2019-06-14 18:11:47 +03:00
[@gavinjoyce]: https://github.com/gavinjoyce
2019-07-10 16:06:08 +03:00
[@sosukesuzuki]: https://github.com/sosukesuzuki
2019-07-22 17:17:24 +03:00
[@g-harel]: https://github.com/g-harel
2019-07-29 14:32:24 +03:00
[@jounqin]: https://github.com/JounQin
2019-08-28 13:50:24 +03:00
[@bakkot]: https://gibhub.com/bakkot
2019-09-05 21:24:20 +03:00
[@thorn0]: https://github.com/thorn0