prettier/prettier (prettier)
### [`v3.3.3`](https://redirect.github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#333)
[Compare Source](https://redirect.github.com/prettier/prettier/compare/3.3.2...3.3.3)
[diff](https://redirect.github.com/prettier/prettier/compare/3.3.2...3.3.3)
##### Add parentheses for nullish coalescing in ternary ([#16391](https://redirect.github.com/prettier/prettier/pull/16391) by [@cdignam-segment](https://redirect.github.com/cdignam-segment))
This change adds clarity to operator precedence.
```js
// Input
foo ? bar ?? foo : baz;
foo ?? bar ? a : b;
a ? b : foo ?? bar;
// Prettier 3.3.2
foo ? bar ?? foo : baz;
foo ?? bar ? a : b;
a ? b : foo ?? bar;
// Prettier 3.3.3
foo ? (bar ?? foo) : baz;
(foo ?? bar) ? a : b;
a ? b : (foo ?? bar);
```
##### Add parentheses for decorator expressions ([#16458](https://redirect.github.com/prettier/prettier/pull/16458) by [@y-schneider](https://redirect.github.com/y-schneider))
Prevent parentheses around member expressions or tagged template literals from being removed to follow the stricter parsing rules of TypeScript 5.5.
```ts
// Input
@(foo`tagged template`)
class X {}
// Prettier 3.3.2
@foo`tagged template`
class X {}
// Prettier 3.3.3
@(foo`tagged template`)
class X {}
```
##### Support `@let` declaration syntax ([#16474](https://redirect.github.com/prettier/prettier/pull/16474) by [@sosukesuzuki](https://redirect.github.com/sosukesuzuki))
Adds support for Angular v18 `@let` declaration syntax.
Please see the following code example. The `@let` declaration allows you to define local variables within the template:
```html
@let name = 'Frodo';
Dashboard for {{name}}
Hello, {{name}}
```
For more details, please refer to the excellent blog post by the Angular Team: [Introducing @let in Angular](https://blog.angular.dev/introducing-let-in-angular-686f9f383f0f).
We also appreciate the Angular Team for kindly answering our questions to implement this feature.
### [`v3.3.2`](https://redirect.github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#332)
[Compare Source](https://redirect.github.com/prettier/prettier/compare/3.3.1...3.3.2)
[diff](https://redirect.github.com/prettier/prettier/compare/3.3.1...3.3.2)
##### Fix handlebars path expressions starts with `@` ([#16358](https://redirect.github.com/prettier/prettier/pull/16358) by [@Princeyadav05](https://redirect.github.com/Princeyadav05))
```hbs
{{! Input }}
{{@x.y.z}}
{{! Prettier 3.3.1 }}
{{@x}}
{{! Prettier 3.3.2 }}
{{@x.y.z}}
```
### [`v3.3.1`](https://redirect.github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#331)
[Compare Source](https://redirect.github.com/prettier/prettier/compare/3.3.0...3.3.1)
[diff](https://redirect.github.com/prettier/prettier/compare/3.3.0...3.3.1)
##### Preserve empty lines in front matter ([#16347](https://redirect.github.com/prettier/prettier/pull/16347) by [@fisker](https://redirect.github.com/fisker))
```markdown
---
foo:
- bar1
- bar2
- bar3
---
Markdown
---
foo:
- bar1
- bar2
- bar3
---
Markdown
---
foo:
- bar1
- bar2
- bar3
---
Markdown
```
##### Preserve explicit language in front matter ([#16348](https://redirect.github.com/prettier/prettier/pull/16348) by [@fisker](https://redirect.github.com/fisker))
```markdown
---yaml
title: Hello
slug: home
---
---
title: Hello
slug: home
---
---yaml
title: Hello
slug: home
---
```
##### Avoid line breaks in import attributes ([#16349](https://redirect.github.com/prettier/prettier/pull/16349) by [@fisker](https://redirect.github.com/fisker))
```jsx
// Input
import something from "./some-very-very-very-very-very-very-very-very-long-path.json" with { type: "json" };
// Prettier 3.3.0
import something from "./some-very-very-very-very-very-very-very-very-long-path.json" with { type:
"json" };
// Prettier 3.3.1
import something from "./some-very-very-very-very-very-very-very-very-long-path.json" with { type: "json" };
```
### [`v3.3.0`](https://redirect.github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#330)
[Compare Source](https://redirect.github.com/prettier/prettier/compare/3.2.5...3.3.0)
[diff](https://redirect.github.com/prettier/prettier/compare/3.2.5...3.3.0)
🔗 [Release Notes](https://prettier.io/blog/2024/06/01/3.3.0.html)
### [`v3.2.5`](https://redirect.github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#325)
[Compare Source](https://redirect.github.com/prettier/prettier/compare/3.2.4...3.2.5)
[diff](https://redirect.github.com/prettier/prettier/compare/3.2.4...3.2.5)
##### Support Angular inline styles as single template literal ([#15968](https://redirect.github.com/prettier/prettier/pull/15968) by [@sosukesuzuki](https://redirect.github.com/sosukesuzuki))
[Angular v17](https://blog.angular.io/introducing-angular-v17-4d7033312e4b) supports single string inline styles.
```ts
// Input
@Component({
template: `
`,
})
export class AppComponent {}
```
##### Use `"json"` parser for `tsconfig.json` by default ([#16012](https://redirect.github.com/prettier/prettier/pull/16012) by [@sosukesuzuki](https://redirect.github.com/sosukesuzuki))
In [v2.3.0](https://prettier.io/blog/2024/01/12/3.2.0#new-jsonc-parser-added-15831httpsgithubcomprettierprettierpull15831-by-fiskerhttpsgithubcomfisker), we introduced `"jsonc"` parser which adds trialing comma **by default**.
When adding a new parser we also define how it will be used based on the [`linguist-languages`](https://www.npmjs.com/package/linguist-languages) data.
`tsconfig.json` is a special file used by [TypeScript](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html#using-tsconfigjson-or-jsconfigjson), it uses `.json` file extension, but it actually uses the [JSON with Comments](https://code.visualstudio.com/docs/languages/json#\_json-with-comments) syntax. However, we found that there are many third-party tools not recognize it correctly because of the confusing `.json` file extension.
We decide to treat it as a JSON file for now to avoid the extra configuration step.
To keep using the `"jsonc"` parser for your `tsconfig.json` files, add the following to your `.pretterrc` file
```json
{
"overrides": [
{
"files": ["tsconfig.json", "jsconfig.json"],
"options": {
"parser": "jsonc"
}
}
]
}
```
```
```
### [`v3.2.4`](https://redirect.github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#324)
[Compare Source](https://redirect.github.com/prettier/prettier/compare/3.2.3...3.2.4)
[diff](https://redirect.github.com/prettier/prettier/compare/3.2.3...3.2.4)
##### Fix incorrect parser inference ([#15947](https://redirect.github.com/prettier/prettier/pull/15947) by [@fisker](https://redirect.github.com/fisker))
Files like `.eslintrc.json` were incorrectly formatted as JSONC files.
```jsx
// Input
prettier --file-info .eslintrc.json
{ "ignored": false, "inferredParser": "jsonc" }
// Prettier 3.2.4
prettier --file-info .eslintrc.json
{ "ignored": false, "inferredParser": "json" }
```
### [`v3.2.3`](https://redirect.github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#323)
[Compare Source](https://redirect.github.com/prettier/prettier/compare/3.2.2...3.2.3)
[diff](https://redirect.github.com/prettier/prettier/compare/3.2.2...3.2.3)
##### Throw errors for invalid code ([#15881](https://redirect.github.com/prettier/prettier/pull/15881) by [@fisker](https://redirect.github.com/fisker), [@Josh-Cena](https://redirect.github.com/Josh-Cena), [@auvred](https://redirect.github.com/auvred))
```ts
// Input
1++;
// Prettier 3.2.2
1++;
// Prettier 3.2.3
SyntaxError: Invalid left-hand side expression in unary operation (1:1)
> 1 | 1++;
| ^
```
```ts
// Input
try {} catch (error = 1){}
// Prettier 3.2.2
try {
} catch (error) {}
// Prettier 3.2.3
SyntaxError: Catch clause variable cannot have an initializer. (1:23)
> 1 | try {} catch (error = 1){}
| ^
```
##### Fix parser inference ([#15927](https://redirect.github.com/prettier/prettier/pull/15927) by [@fisker](https://redirect.github.com/fisker))
```console
// Prettier 3.2.2
prettier --file-info tsconfig.json
{ "ignored": false, "inferredParser": "json" }
// Prettier 3.2.3
prettier --file-info tsconfig.json
{ "ignored": false, "inferredParser": "jsonc" }
```
### [`v3.2.2`](https://redirect.github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#322)
[Compare Source](https://redirect.github.com/prettier/prettier/compare/3.2.1...3.2.2)
[diff](https://redirect.github.com/prettier/prettier/compare/3.2.1...3.2.2)
##### Fix crash when parsing template literal CSS in a JSX style tag using a spread attribute ([#15896](https://redirect.github.com/prettier/prettier/pull/15896) by [@eelco](https://redirect.github.com/eelco))
For example this code would crash before:
```jsx
```
##### Fix formatting error on optional call expression and member chain ([#15920](https://redirect.github.com/prettier/prettier/pull/15920) by [@sosukesuzuki](https://redirect.github.com/sosukesuzuki))
```jsx
// Input
a(() => {}, c?.d());
// Prettier 3.2.1
TypeError: Cannot read properties of undefined (reading 'type')
// Prettier 3.2.2
a(() => {}, c?.d());
```
### [`v3.2.1`](https://redirect.github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#321)
[Compare Source](https://redirect.github.com/prettier/prettier/compare/3.2.0...3.2.1)
[diff](https://redirect.github.com/prettier/prettier/compare/3.2.0...3.2.1)
##### Fix formatting error on member chain ([#15915](https://redirect.github.com/prettier/prettier/pull/15915) by [@sosukesuzuki](https://redirect.github.com/sosukesuzuki))
```jsx
// Input
test().test2().test2(thing?.something);
// Prettier 3.2.0
TypeError: Cannot read properties of undefined (reading 'type')
// Prettier 3.2.1
test().test2().test2(thing?.something);
```
### [`v3.2.0`](https://redirect.github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#320)
[Compare Source](https://redirect.github.com/prettier/prettier/compare/3.1.1...3.2.0)
[diff](https://redirect.github.com/prettier/prettier/compare/3.1.1...3.2.0)
🔗 [Release Notes](https://prettier.io/blog/2024/01/13/3.2.0.html)
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
[ ] If you want to rebase/retry this PR, check this box
This PR contains the following updates:
3.1.1
->3.3.3
Release Notes
prettier/prettier (prettier)
### [`v3.3.3`](https://redirect.github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#333) [Compare Source](https://redirect.github.com/prettier/prettier/compare/3.3.2...3.3.3) [diff](https://redirect.github.com/prettier/prettier/compare/3.3.2...3.3.3) ##### Add parentheses for nullish coalescing in ternary ([#16391](https://redirect.github.com/prettier/prettier/pull/16391) by [@cdignam-segment](https://redirect.github.com/cdignam-segment)) This change adds clarity to operator precedence. ```js // Input foo ? bar ?? foo : baz; foo ?? bar ? a : b; a ? b : foo ?? bar; // Prettier 3.3.2 foo ? bar ?? foo : baz; foo ?? bar ? a : b; a ? b : foo ?? bar; // Prettier 3.3.3 foo ? (bar ?? foo) : baz; (foo ?? bar) ? a : b; a ? b : (foo ?? bar); ``` ##### Add parentheses for decorator expressions ([#16458](https://redirect.github.com/prettier/prettier/pull/16458) by [@y-schneider](https://redirect.github.com/y-schneider)) Prevent parentheses around member expressions or tagged template literals from being removed to follow the stricter parsing rules of TypeScript 5.5. ```ts // Input @(foo`tagged template`) class X {} // Prettier 3.3.2 @foo`tagged template` class X {} // Prettier 3.3.3 @(foo`tagged template`) class X {} ``` ##### Support `@let` declaration syntax ([#16474](https://redirect.github.com/prettier/prettier/pull/16474) by [@sosukesuzuki](https://redirect.github.com/sosukesuzuki)) Adds support for Angular v18 `@let` declaration syntax. Please see the following code example. The `@let` declaration allows you to define local variables within the template: ```html @let name = 'Frodo';Dashboard for {{name}}
Hello, {{name}} ``` For more details, please refer to the excellent blog post by the Angular Team: [Introducing @let in Angular](https://blog.angular.dev/introducing-let-in-angular-686f9f383f0f). We also appreciate the Angular Team for kindly answering our questions to implement this feature. ### [`v3.3.2`](https://redirect.github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#332) [Compare Source](https://redirect.github.com/prettier/prettier/compare/3.3.1...3.3.2) [diff](https://redirect.github.com/prettier/prettier/compare/3.3.1...3.3.2) ##### Fix handlebars path expressions starts with `@` ([#16358](https://redirect.github.com/prettier/prettier/pull/16358) by [@Princeyadav05](https://redirect.github.com/Princeyadav05)) ```hbs {{! Input }}{{ hello }}
`, }) export class AppComponent {} // Prettier 3.2.4 const template = "foobar"; @Component({ [template]: `{{ hello }}
`, }) export class AppComponent {} // Prettier 3.2.5 const template = "foobar"; @Component({ [template]: `{{ hello }}
`, }) export class AppComponent {} ``` ##### Use `"json"` parser for `tsconfig.json` by default ([#16012](https://redirect.github.com/prettier/prettier/pull/16012) by [@sosukesuzuki](https://redirect.github.com/sosukesuzuki)) In [v2.3.0](https://prettier.io/blog/2024/01/12/3.2.0#new-jsonc-parser-added-15831httpsgithubcomprettierprettierpull15831-by-fiskerhttpsgithubcomfisker), we introduced `"jsonc"` parser which adds trialing comma **by default**. When adding a new parser we also define how it will be used based on the [`linguist-languages`](https://www.npmjs.com/package/linguist-languages) data. `tsconfig.json` is a special file used by [TypeScript](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html#using-tsconfigjson-or-jsconfigjson), it uses `.json` file extension, but it actually uses the [JSON with Comments](https://code.visualstudio.com/docs/languages/json#\_json-with-comments) syntax. However, we found that there are many third-party tools not recognize it correctly because of the confusing `.json` file extension. We decide to treat it as a JSON file for now to avoid the extra configuration step. To keep using the `"jsonc"` parser for your `tsconfig.json` files, add the following to your `.pretterrc` file ```json { "overrides": [ { "files": ["tsconfig.json", "jsconfig.json"], "options": { "parser": "jsonc" } } ] } ``` ``` ``` ### [`v3.2.4`](https://redirect.github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#324) [Compare Source](https://redirect.github.com/prettier/prettier/compare/3.2.3...3.2.4) [diff](https://redirect.github.com/prettier/prettier/compare/3.2.3...3.2.4) ##### Fix incorrect parser inference ([#15947](https://redirect.github.com/prettier/prettier/pull/15947) by [@fisker](https://redirect.github.com/fisker)) Files like `.eslintrc.json` were incorrectly formatted as JSONC files. ```jsx // Input prettier --file-info .eslintrc.json { "ignored": false, "inferredParser": "jsonc" } // Prettier 3.2.4 prettier --file-info .eslintrc.json { "ignored": false, "inferredParser": "json" } ``` ### [`v3.2.3`](https://redirect.github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#323) [Compare Source](https://redirect.github.com/prettier/prettier/compare/3.2.2...3.2.3) [diff](https://redirect.github.com/prettier/prettier/compare/3.2.2...3.2.3) ##### Throw errors for invalid code ([#15881](https://redirect.github.com/prettier/prettier/pull/15881) by [@fisker](https://redirect.github.com/fisker), [@Josh-Cena](https://redirect.github.com/Josh-Cena), [@auvred](https://redirect.github.com/auvred)) ```ts // Input 1++; // Prettier 3.2.2 1++; // Prettier 3.2.3 SyntaxError: Invalid left-hand side expression in unary operation (1:1) > 1 | 1++; | ^ ``` ```ts // Input try {} catch (error = 1){} // Prettier 3.2.2 try { } catch (error) {} // Prettier 3.2.3 SyntaxError: Catch clause variable cannot have an initializer. (1:23) > 1 | try {} catch (error = 1){} | ^ ``` ##### Fix parser inference ([#15927](https://redirect.github.com/prettier/prettier/pull/15927) by [@fisker](https://redirect.github.com/fisker)) ```console // Prettier 3.2.2 prettier --file-info tsconfig.json { "ignored": false, "inferredParser": "json" } // Prettier 3.2.3 prettier --file-info tsconfig.json { "ignored": false, "inferredParser": "jsonc" } ``` ### [`v3.2.2`](https://redirect.github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#322) [Compare Source](https://redirect.github.com/prettier/prettier/compare/3.2.1...3.2.2) [diff](https://redirect.github.com/prettier/prettier/compare/3.2.1...3.2.2) ##### Fix crash when parsing template literal CSS in a JSX style tag using a spread attribute ([#15896](https://redirect.github.com/prettier/prettier/pull/15896) by [@eelco](https://redirect.github.com/eelco)) For example this code would crash before: ```jsx ``` ##### Fix formatting error on optional call expression and member chain ([#15920](https://redirect.github.com/prettier/prettier/pull/15920) by [@sosukesuzuki](https://redirect.github.com/sosukesuzuki)) ```jsx // Input a(() => {}, c?.d()); // Prettier 3.2.1 TypeError: Cannot read properties of undefined (reading 'type') // Prettier 3.2.2 a(() => {}, c?.d()); ``` ### [`v3.2.1`](https://redirect.github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#321) [Compare Source](https://redirect.github.com/prettier/prettier/compare/3.2.0...3.2.1) [diff](https://redirect.github.com/prettier/prettier/compare/3.2.0...3.2.1) ##### Fix formatting error on member chain ([#15915](https://redirect.github.com/prettier/prettier/pull/15915) by [@sosukesuzuki](https://redirect.github.com/sosukesuzuki)) ```jsx // Input test().test2().test2(thing?.something); // Prettier 3.2.0 TypeError: Cannot read properties of undefined (reading 'type') // Prettier 3.2.1 test().test2().test2(thing?.something); ``` ### [`v3.2.0`](https://redirect.github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#320) [Compare Source](https://redirect.github.com/prettier/prettier/compare/3.1.1...3.2.0) [diff](https://redirect.github.com/prettier/prettier/compare/3.1.1...3.2.0) 🔗 [Release Notes](https://prettier.io/blog/2024/01/13/3.2.0.html)Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.