chore(deps): update dependency prettier to v3 - autoclosed
Metadata
Current evaluation
Renovate bot PR updating prettier to v3 was autoclosed without merging. The dependency update was superseded or abandoned by automation due to inactivity, with no reviews or CI checks performed.
Suggested action: —
No scores available.
Issue body
[](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [prettier](https://prettier.io) ([source](https://togithub.com/prettier/prettier)) | [`^2.8.0` -> `^3.0.0`](https://renovatebot.com/diffs/npm/prettier/2.8.3/3.2.5) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) |
---
### Release Notes
<details>
<summary>prettier/prettier (prettier)</summary>
### [`v3.2.5`](https://togithub.com/prettier/prettier/blob/HEAD/CHANGELOG.md#325)
[Compare Source](https://togithub.com/prettier/prettier/compare/3.2.4...3.2.5)
[diff](https://togithub.com/prettier/prettier/compare/3.2.4...3.2.5)
##### Support Angular inline styles as single template literal ([#​15968](https://togithub.com/prettier/prettier/pull/15968) by [@​sosukesuzuki](https://togithub.com/sosukesuzuki))
[Angular v17](https://blog.angular.io/introducing-angular-v17-4d7033312e4b) supports single string inline styles.
<!-- prettier-ignore -->
```ts
// Input
@​Component({
template: `<div>...</div>`,
styles: `h1 { color: blue; }`,
})
export class AppComponent {}
// Prettier 3.2.4
@​Component({
template: `<div>...</div>`,
styles: `h1 { color: blue; }`,
})
export class AppComponent {}
// Prettier 3.2.5
@​Component({
template: `<div>...</div>`,
styles: `
h1 {
color: blue;
}
`,
})
export class AppComponent {}
```
##### Unexpected embedded formatting for Angular template ([#​15969](https://togithub.com/prettier/prettier/pull/15969) by [@​JounQin](https://togithub.com/JounQin))
Computed template should not be considered as Angular component template
<!-- prettier-ignore -->
```ts
// Input
const template = "foobar";
@​Component({
[template]: `<h1>{{ hello }}</h1>`,
})
export class AppComponent {}
// Prettier 3.2.4
const template = "foobar";
@​Component({
[template]: `<h1>{{ hello }}</h1>`,
})
export class AppComponent {}
// Prettier 3.2.5
const template = "foobar";
@​Component({
[template]: `<h1>{{ hello }}</h1>`,
})
export class AppComponent {}
```
##### Use `"json"` parser for `tsconfig.json` by default ([#​16012](https://togithub.com/prettier/prettier/pull/16012) by [@​sosukesuzuki](https://togithub.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"
}
}
]
}
```
<!-- prettier-ignore -->
```
```
### [`v3.2.4`](https://togithub.com/prettier/prettier/blob/HEAD/CHANGELOG.md#324)
[Compare Source](https://togithub.com/prettier/prettier/compare/3.2.3...3.2.4)
[diff](https://togithub.com/prettier/prettier/compare/3.2.3...3.2.4)
##### Fix incorrect parser inference ([#​15947](https://togithub.com/prettier/prettier/pull/15947) by [@​fisker](https://togithub.com/fisker))
Files like `.eslintrc.json` were incorrectly formatted as JSONC files.
<!-- prettier-ignore -->
```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://togithub.com/prettier/prettier/blob/HEAD/CHANGELOG.md#323)
[Compare Source](https://togithub.com/prettier/prettier/compare/3.2.2...3.2.3)
[diff](https://togithub.com/prettier/prettier/compare/3.2.2...3.2.3)
##### Throw errors for invalid code ([#​15881](https://togithub.com/prettier/prettier/pull/15881) by [@​fisker](https://togithub.com/fisker), [@​Josh-Cena](https://togithub.com/Josh-Cena), [@​auvred](https://togithub.com/auvred))
<!-- prettier-ignore -->
```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++;
| ^
```
<!-- prettier-ignore -->
```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://togithub.com/prettier/prettier/pull/15927) by [@​fisker](https://togithub.com/fisker))
<!-- prettier-ignore -->
```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://togithub.com/prettier/prettier/blob/HEAD/CHANGELOG.md#322)
[Compare Source](https://togithub.com/prettier/prettier/compare/3.2.1...3.2.2)
[diff](https://togithub.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://togithub.com/prettier/prettier/pull/15896) by [@​eelco](https://togithub.com/eelco))
For example this code would crash before:
<!-- prettier-ignore -->
```jsx
<style {...spread}>{`.{}`}</style>
```
##### Fix formatting error on optional call expression and member chain ([#​15920](https://togithub.com/prettier/prettier/pull/15920) by [@​sosukesuzuki](https://togithub.com/sosukesuzuki))
<!-- prettier-ignore -->
```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://togithub.com/prettier/prettier/blob/HEAD/CHANGELOG.md#321)
[Compare Source](https://togithub.com/prettier/prettier/compare/3.2.0...3.2.1)
[diff](https://togithub.com/prettier/prettier/compare/3.2.0...3.2.1)
##### Fix formatting error on member chain ([#​15915](https://togithub.com/prettier/prettier/pull/15915) by [@​sosukesuzuki](https://togithub.com/sosukesuzuki))
<!-- prettier-ignore -->
```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://togithub.com/prettier/prettier/blob/HEAD/CHANGELOG.md#320)
[Compare Source](https://togithub.com/prettier/prettier/compare/3.1.1...3.2.0)
[diff](https://togithub.com/prettier/prettier/compare/3.1.1...3.2.0)
🔗 [Release Notes](https://prettier.io/blog/2024/01/13/3.2.0.html)
### [`v3.1.1`](https://togithub.com/prettier/prettier/blob/HEAD/CHANGELOG.md#311)
[Compare Source](https://togithub.com/prettier/prettier/compare/3.1.0...3.1.1)
[diff](https://togithub.com/prettier/prettier/compare/3.1.0...3.1.1)
##### Fix config file search ([#​15363](https://togithub.com/prettier/prettier/pull/15363) by [@​fisker](https://togithub.com/fisker))
Previously, we start search for config files from the filePath as a directory, if it happened to be a directory and contains config file, it will be used by mistake.
```text
├─ .prettierrc
└─ test.js (A directory)
└─ .prettierrc
```
```js
// Prettier 3.1.0
await prettier.resolveConfigFile(new URL("./test.js", import.meta.url));
// <CWD>/test.js/.prettierrc
// Prettier 3.1.1
await prettier.resolveConfigFile(new URL("./test.js", import.meta.url));
// <CWD>/.prettierrc
```
##### Skip explicitly passed symbolic links with `--no-error-on-unmatched-pattern` ([#​15533](https://togithub.com/prettier/prettier/pull/15533) by [@​sanmai-NL](https://togithub.com/sanmai-NL))
Since Prettier v3, we stopped following symbolic links, however in some use cases, the symbolic link patterns can't be filtered out, and there is no way to prevent Prettier from throwing errors.
In Prettier 3.1.1, you can use `--no-error-on-unmatched-pattern` to simply skip symbolic links.
##### Consistently use tabs in ternaries when `useTabs` is `true` ([#​15662](https://togithub.com/prettier/prettier/pull/15662) by [@​auvred](https://togithub.com/auvred))
<!-- prettier-ignore -->
```jsx
// Input
aaaaaaaaaaaaaaa
? bbbbbbbbbbbbbbbbbb
: ccccccccccccccc
? ddddddddddddddd
: eeeeeeeeeeeeeee
? fffffffffffffff
: gggggggggggggggg;
// Prettier 3.1.0
aaaaaaaaaaaaaaa
? bbbbbbbbbbbbbbbbbb
: ccccccccccccccc
? ddddddddddddddd
: eeeeeeeeeeeeeee
? fffffffffffffff
: gggggggggggggggg;
// Prettier 3.1.1
aaaaaaaaaaaaaaa
? bbbbbbbbbbbbbbbbbb
: ccccccccccccccc
? ddddddddddddddd
: eeeeeeeeeeeeeee
? fffffffffffffff
: gggggggggggggggg;
```
##### Improve config file search ([#​15663](https://togithub.com/prettier/prettier/pull/15663) by [@​fisker](https://togithub.com/fisker))
The Prettier config file search performance has been improved by more effective cache strategy.
##### Fix unstable and ugly formatting for comments in destructuring patterns ([#​15708](https://togithub.com/prettier/prettier/pull/15708) by [@​sosukesuzuki](https://togithub.com/sosukesuzuki))
<!-- prettier-ignore -->
```tsx
// Input
const {
foo,
// bar
// baz
}: Foo = expr;
// Prettier 3.1.0
const {
foo1,
} // bar
// baz
: Foo = expr;
// Prettier 3.1.0 second output
const {
foo1, // bar
} // baz
: Foo = expr;
// Prettier 3.1.1
const {
foo1,
// bar
// baz
}: Foo = expr;
```
##### Support "Import Attributes" ([#​15718](https://togithub.com/prettier/prettier/pull/15718) by [@​fisker](https://togithub.com/fisker))
[TypeScript 5.3](https://devblogs.microsoft.com/typescript/announcing-typescript-5-3/#import-attributes) supports the latest updates to the [import attributes](https://togithub.com/tc39/proposal-import-attributes) proposal.
```tsx
import something from "./something.json" with { type: "json" };
```
##### Fix false claim in docs that cursorOffset is incompatible with rangeStart/rangeEnd ([#​15750](https://togithub.com/prettier/prettier/pull/15750) by [@​ExplodingCabbage](https://togithub.com/ExplodingCabbage))
The cursorOffset option has in fact been compatible with rangeStart/rangeEnd for over 5 years, thanks to work by [@​ds300](https://togithub.com/ds300). However, Prettier's documentation (including the CLI `--help` text) continued to claim otherwise, falsely. The documentation is now fixed.
##### Keep curly braces and `from` keyword in empty `import` statements ([#​15756](https://togithub.com/prettier/prettier/pull/15756) by [@​fisker](https://togithub.com/fisker))
<!-- prettier-ignore -->
```js
// Input
import { } from 'foo';
import { /* comment */ } from 'bar';
// Prettier 3.1.0
import {} from "foo";
import /* comment */ "bar";
// Prettier 3.1.1
import {} from "foo";
import {} from /* comment */ "bar";
```
##### Keep empty import attributes and assertions ([#​15757](https://togithub.com/prettier/prettier/pull/15757) by [@​fisker](https://togithub.com/fisker))
<!-- prettier-ignore -->
```js
// Input
import foo from "foo" with {};
import bar from "bar" assert {};
// Prettier 3.1.0
import foo from "foo";
import bar from "bar";
// Prettier 3.1.1
import foo from "foo" with {};
import bar from "bar" assert {};
```
### [`v3.1.0`](https://togithub.com/prettier/prettier/blob/HEAD/CHANGELOG.md#310)
[Compare Source](https://togithub.com/prettier/prettier/compare/3.0.3...3.1.0)
[diff](https://togithub.com/prettier/prettier/compare/3.0.3...3.1.0)
🔗 [Release Notes](https://prettier.io/blog/2023/11/13/3.1.0.html)
### [`v3.0.3`](https://togithub.com/prettier/prettier/blob/HEAD/CHANGELOG.md#303)
[Compare Source](https://togithub.com/prettier/prettier/compare/3.0.2...3.0.3)
[diff](https://togithub.com/prettier/prettier/compare/3.0.2...3.0.3)
##### Add `preferUnplugged: true` to `package.json` ([#​15169](https://togithub.com/prettier/prettier/pull/15169) by [@​fisker](https://togithub.com/fisker) and [@​so1ve](https://togithub.com/so1ve))
Prettier v3 uses dynamic imports, user [will need to unplug Prettier](https://togithub.com/yarnpkg/berry/pull/5411#issuecomment-1523502224) when Yarn's PnP mode is enabled, add [`preferUnplugged: true`](https://yarnpkg.com/configuration/manifest#preferUnplugged) to `package.json`, so Yarn will install Prettier as unplug by default.
##### Support shared config that forbids `require()` ([#​15233](https://togithub.com/prettier/prettier/pull/15233) by [@​fisker](https://togithub.com/fisker))
If an external shared config package is used, and the package `exports` don't have `require` or `default` export.
In Prettier 3.0.2 Prettier fails when attempt to `require()` the package, and throws an error.
```text
Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main defined in <packageName>/package.json
```
##### Allow argument of `require()` to break ([#​15256](https://togithub.com/prettier/prettier/pull/15256) by [@​fisker](https://togithub.com/fisker))
<!-- prettier-ignore -->
```jsx
// Input
const plugin = require(
global.STANDALONE
? path.join(__dirname, "../standalone.js")
: path.join(__dirname, "..")
);
// Prettier 3.0.2
const plugin = require(global.STANDALONE
? path.join(__dirname, "../standalone.js")
: path.join(__dirname, ".."));
// Prettier 3.0.3
const plugin = require(
global.STANDALONE
? path.join(__dirname, "../standalone.js")
: path.join(__dirname, "..")
);
```
##### Do not print trailing commas in arrow function type parameter lists in `ts` code blocks ([#​15286](https://togithub.com/prettier/prettier/pull/15286) by [@​sosukesuzuki](https://togithub.com/sosukesuzuki))
<!-- prettier-ignore -->
````md
<!-- Input -->
```ts
const foo = <T>() => {}
```
<!-- Prettier 3.0.2 -->
```ts
const foo = <T,>() => {}
```
<!-- Prettier 3.0.3 -->
```ts
const foo = <T>() => {}
```
````
##### Support TypeScript 5.2 `using` / `await using` declaration ([#​15321](https://togithub.com/prettier/prettier/pull/15321) by [@​sosukesuzuki](https://togithub.com/sosukesuzuki))
Support for the upcoming Explicit Resource Management feature in ECMAScript. [`using` / `await using` declaration](https://devblogs.microsoft.com/typescript/announcing-typescript-5-2/#using-declarations-and-explicit-resource-management)
<!-- prettier-ignore -->
```tsx
{
using foo = new Foo();
await using bar = new Bar();
}
```
### [`v3.0.2`](https://togithub.com/prettier/prettier/blob/HEAD/CHANGELOG.md#302)
[Compare Source](https://togithub.com/prettier/prettier/compare/3.0.1...3.0.2)
[diff](https://togithub.com/prettier/prettier/compare/3.0.1...3.0.2)
##### Break after `=` of assignment if RHS is poorly breakable AwaitExpression or YieldExpression ([#​15204](https://togithub.com/prettier/prettier/pull/15204) by [@​seiyab](https://togithub.com/seiyab))
<!-- prettier-ignore -->
```js
// Input
const { section, rubric, authors, tags } = await utils.upsertCommonData(mainData);
// Prettier 3.0.1
const { section, rubric, authors, tags } = await utils.upsertCommonData(
mainData,
);
// Prettier 3.0.2
const { section, rubric, authors, tags } =
await utils.upsertCommonData(mainData);
```
##### Do not add trailing comma for grouped scss comments ([#​15217](https://togithub.com/prettier/prettier/pull/15217) by [@​auvred](https://togithub.com/auvred))
<!-- prettier-ignore -->
```scss
/* Input */
$foo: (
'property': (),
// comment 1
// comment 2
)
/* Prettier 3.0.1 */
$foo: (
"property": (),
// comment 1
// comment 2,
);
/* Prettier 3.0.2 */
$foo: (
"property": (),
// comment 1
// comment 2
);
```
##### Print `declare` and `export` keywords for nested namespace ([#​15249](https://togithub.com/prettier/prettier/pull/15249) by [@​sosukesuzuki](https://togithub.com/sosukesuzuki))
<!-- prettier-ignore -->
```tsx
// Input
declare namespace abc1.def {}
export namespace abc2.def {}
// Prettier 3.0.1
namespace abc1.def {}
namespace abc2.def {}
// Prettier 3.0.2
declare namespace abc1.def {}
export namespace abc2.def {}
```
### [`v3.0.1`](https://togithub.com/prettier/prettier/blob/HEAD/CHANGELOG.md#301)
[Compare Source](https://togithub.com/prettier/prettier/compare/3.0.0...3.0.1)
[diff](https://togithub.com/prettier/prettier/compare/3.0.0...3.0.1)
##### Fix cursor positioning for a special case ([#​14812](https://togithub.com/prettier/prettier/pull/14812) by [@​fisker](https://togithub.com/fisker))
<!-- prettier-ignore -->
```js
// <|> is the cursor position
/* Input */
// All messages are represented in JSON.
// So, the prettier.py controls a subprocess which spawns "node {this_file}".
import {<|> } from "fs"
/* Prettier 3.0.0 */
// All messages are represented in JSON.
// So, the prettier.py <|>controls a subprocess which spawns "node {this_file}".
import {} from "fs"
/* Prettier 3.0.1 */
// All messages are represented in JSON.
// So, the prettier.py controls a subprocess which spawns "node {this_file}".
import {<|>} from "fs"
```
##### Fix plugins/estree.d.ts to make it a module ([#​15018](https://togithub.com/prettier/prettier/pull/15018) by [@​kingyue737](https://togithub.com/kingyue737))
Add `export {}` in `plugins/estree.d.ts` to fix the "File is not a module" error
##### Add parenthesis around leading multiline comment in return statement ([#​15037](https://togithub.com/prettier/prettier/pull/15037) by [@​auvred](https://togithub.com/auvred))
<!-- prettier-ignore -->
```jsx
// Input
function fn() {
return (
/**
* @​type {...}
*/ expresssion
)
}
// Prettier 3.0.0
function fn() {
return /**
* @​type {...}
*/ expresssion;
}
// Prettier 3.0.1
function fn() {
return (
/**
* @​type {...}
*/ expresssion
);
}
```
##### Add support for Vue "Generic Components" ([#​15066](https://togithub.com/prettier/prettier/pull/15066) by [@​auvred](https://togithub.com/auvred))
https://blog.vuejs.org/posts/vue-3-3#generic-components
<!-- prettier-ignore -->
```vue
<!-- Input -->
<script setup lang="ts" generic="T extends Type1 & Type2 & (Type3 | Type4), U extends string | number | boolean"></script>
<!-- Prettier 3.0.0 -->
<script
setup
lang="ts"
generic="T extends Type1 & Type2 & (Type3 | Type4), U extends string | number | boolean"
></script>
<!-- Prettier 3.0.1 -->
<script
setup
lang="ts"
generic="
T extends Type1 & Type2 & (Type3 | Type4),
U extends string | number | boolean
"
></script>
```
##### Fix comments print in `IfStatement` ([#​15076](https://togithub.com/prettier/prettier/pull/15076) by [@​fisker](https://togithub.com/fisker))
<!-- prettier-ignore -->
```js
function a(b) {
if (b) return 1; // comment
else return 2;
}
/* Prettier 3.0.0 */
Error: Comment "comment" was not printed. Please report this error!
/* Prettier 3.0.1 */
function a(b) {
if (b) return 1; // comment
else return 2;
}
```
##### Add missing type definition for `printer.preprocess` ([#​15123](https://togithub.com/prettier/prettier/pull/15123) by [@​so1ve](https://togithub.com/so1ve))
```diff
export interface Printer<T = any> {
// ...
+ preprocess?:
+ | ((ast: T, options: ParserOptions<T>) => T | Promise<T>)
+ | undefined;
}
```
##### Add missing `getVisitorKeys` method type definition for `Printer` ([#​15125](https://togithub.com/prettier/prettier/pull/15125) by [@​auvred](https://togithub.com/auvred))
```tsx
const printer: Printer = {
print: () => [],
getVisitorKeys(node, nonTraversableKeys) {
return ["body"];
},
};
```
##### Add typing to support `readonly` array properties of AST Node ([#​15127](https://togithub.com/prettier/prettier/pull/15127) by [@​auvred](https://togithub.com/auvred))
<!-- prettier-ignore -->
```tsx
// Input
interface TestNode {
readonlyArray: readonly string[];
}
declare const path: AstPath<TestNode>;
path.map(() => "", "readonlyArray");
// Prettier 3.0.0
interface TestNode {
readonlyArray: readonly string[];
}
declare const path: AstPath<TestNode>;
path.map(() => "", "readonlyArray");
// ^ Argument of type '"readonlyArray"' is not assignable to parameter of type '"regularArray"'. ts(2345)
// Prettier 3.0.1
interface TestNode {
readonlyArray: readonly string[];
}
declare const path: AstPath<TestNode>;
path.map(() => "", "readonlyArray");
```
##### Add space before unary minus followed by a function call ([#​15129](https://togithub.com/prettier/prettier/pull/15129) by [@​pamelalozano](https://togithub.com/pamelalozano))
<!-- prettier-ignore -->
```less
// Input
div {
margin: - func();
}
// Prettier 3.0.0
div {
margin: -func();
}
// Prettier 3.0.1
div {
margin: - func();
}
```
### [`v3.0.0`](https://togithub.com/prettier/prettier/blob/HEAD/CHANGELOG.md#300)
[Compare Source](https://togithub.com/prettier/prettier/compare/2.8.8...3.0.0)
[diff](https://togithub.com/prettier/prettier/compare/3.0.0-alpha.6...3.0.0)
🔗 [Release Notes](https://prettier.io/blog/2023/07/05/3.0.0.html)
### [`v2.8.8`](https://togithub.com/prettier/prettier/blob/HEAD/CHANGELOG.md#288)
[Compare Source](https://togithub.com/prettier/prettier/compare/2.8.7...2.8.8)
This version is a republished version of v2.8.7.
A bad version was accidentally published and [it can't be unpublished](https://togithub.com/npm/cli/issues/1686), apologies for the churn.
### [`v2.8.7`](https://togithub.com/prettier/prettier/blob/HEAD/CHANGELOG.md#287)
[Compare Source](https://togithub.com/prettier/prettier/compare/2.8.6...2.8.7)
[diff](https://togithub.com/prettier/prettier/compare/2.8.6...2.8.7)
##### Allow multiple decorators on same getter/setter ([#​14584](https://togithub.com/prettier/prettier/pull/14584) by [@​fisker](https://togithub.com/fisker))
<!-- prettier-ignore -->
```ts
// Input
class A {
@​decorator()
get foo () {}
@​decorator()
set foo (value) {}
}
// Prettier 2.8.6
SyntaxError: Decorators cannot be applied to multiple get/set accessors of the same name. (5:3)
3 | get foo () {}
4 |
> 5 | @​decorator()
| ^^^^^^^^^^^^
6 | set foo (value) {}
7 | }
// Prettier 2.8.7
class A {
@​decorator()
get foo() {}
@​decorator()
set foo(value) {}
}
```
### [`v2.8.6`](https://togithub.com/prettier/prettier/blob/HEAD/CHANGELOG.md#286)
[Compare Source](https://togithub.com/prettier/prettier/compare/2.8.5...2.8.6)
[diff](https://togithub.com/prettier/prettier/compare/2.8.5...2.8.6)
##### Allow decorators on private members and class expressions ([#​14548](https://togithub.com/prettier/prettier/pull/14548) by [@​fisker](https://togithub.com/fisker))
<!-- prettier-ignore -->
```ts
// Input
class A {
@​decorator()
#privateMethod () {}
}
// Prettier 2.8.5
SyntaxError: Decorators are not valid here. (2:3)
1 | class A {
> 2 | @​decorator()
| ^^^^^^^^^^^^
3 | #privateMethod () {}
4 | }
// Prettier 2.8.6
class A {
@​decorator()
#privateMethod() {}
}
```
### [`v2.8.5`](https://togithub.com/prettier/prettier/blob/HEAD/CHANGELOG.md#285)
[Compare Source](https://togithub.com/prettier/prettier/compare/2.8.4...2.8.5)
[diff](https://togithub.com/prettier/prettier/compare/2.8.4...2.8.5)
##### Support TypeScript 5.0 ([#​14391](https://togithub.com/prettier/prettier/pull/14391) by [@​fisker](https://togithub.com/fisker), [#​13819](https://togithub.com/prettier/prettier/pull/13819) by [@​fisker](https://togithub.com/fisker), [@​sosukesuzuki](https://togithub.com/sosukesuzuki))
TypeScript 5.0 introduces two new syntactic features:
- `const` modifiers for type parameters
- `export type *` declarations
##### Add missing parentheses for decorator ([#​14393](https://togithub.com/prettier/prettier/pull/14393) by [@​fisker](https://togithub.com/fisker))
<!-- prettier-ignore -->
```jsx
// Input
class Person {
@​(myDecoratorArray[0])
greet() {}
}
// Prettier 2.8.4
class Person {
@​myDecoratorArray[0]
greet() {}
}
// Prettier 2.8.5
class Person {
@​(myDecoratorArray[0])
greet() {}
}
```
##### Add parentheses for `TypeofTypeAnnotation` to improve readability ([#​14458](https://togithub.com/prettier/prettier/pull/14458) by [@​fisker](https://togithub.com/fisker))
<!-- prettier-ignore -->
```tsx
// Input
type A = (typeof node.children)[];
// Prettier 2.8.4
type A = typeof node.children[];
// Prettier 2.8.5
type A = (typeof node.children)[];
```
##### Support `max_line_length=off` when parsing `.editorconfig` ([#​14516](https://togithub.com/prettier/prettier/pull/14516) by [@​josephfrazier](https://togithub.com/josephfrazier))
If an .editorconfig file is in your project and it sets `max_line_length=off` for the file you're formatting,
it will be interpreted as a `printWidth` of `Infinity` rather than being ignored
(which previously resulted in the default `printWidth` of 80 being applied, if not overridden by Prettier-specific configuration).
<!-- prettier-ignore -->
```html
<!-- Input -->
<div className='HelloWorld' title={`You are visitor number ${ num }`} onMouseOver={onMouseOver}/>
<!-- Prettier 2.8.4 -->
<div
className="HelloWorld"
title={`You are visitor number ${num}`}
onMouseOver={onMouseOver}
/>;
<!-- Prettier 2.8.5 -->
<div className="HelloWorld" title={`You are visitor number ${num}`} onMouseOver={onMouseOver} />;
```
### [`v2.8.4`](https://togithub.com/prettier/prettier/blob/HEAD/CHANGELOG.md#284)
[Compare Source](https://togithub.com/prettier/prettier/compare/2.8.3...2.8.4)
[diff](https://togithub.com/prettier/prettier/compare/2.8.3...2.8.4)
##### Fix leading comments in mapped types with `readonly` ([#​13427](https://togithub.com/prettier/prettier/pull/13427) by [@​thorn0](https://togithub.com/thorn0), [@​sosukesuzuki](https://togithub.com/sosukesuzuki))
<!-- prettier-ignore -->
```tsx
// Input
type Type = {
// comment
readonly [key in Foo];
};
// Prettier 2.8.3
type Type = {
readonly // comment
[key in Foo];
};
// Prettier 2.8.4
type Type = {
// comment
readonly [key in Foo];
};
```
##### Group params in opening block statements ([#​14067](https://togithub.com/prettier/prettier/pull/14067) by [@​jamescdavis](https://togithub.com/jamescdavis))
This is a follow-up to [#​13930](https://togithub.com/prettier/prettier/issues/13930) to establish wrapping consistency between opening block statements and else blocks by
grouping params in opening blocks. This causes params to break to a new line together and not be split across lines
unless the length of params exceeds the print width. This also updates the else block wrapping to behave exactly the
same as opening blocks.
<!-- prettier-ignore -->
```hbs
{{! Input }}
{{#block param param param param param param param param param param as |blockParam|}}
Hello
{{else block param param param param param param param param param param as |blockParam|}}
There
{{/block}}
{{! Prettier 2.8.3 }}
{{#block
param
param
param
param
param
param
param
param
param
param
as |blockParam|
}}
Hello
{{else block param
param
param
param
param
param
param
param
param
param}}
There
{{/block}}
{{! Prettier 2.8.4 }}
{{#block
param param param param param param param param param param
as |blockParam|
}}
Hello
{{else block
param param param param param param param param param param
as |blockParam|
}}
There
{{/block}}
```
##### Ignore files in `.sl/` ([#​14206](https://togithub.com/prettier/prettier/pull/14206) by [@​bolinfest](https://togithub.com/bolinfest))
In [Sapling SCM](https://sapling-scm.com/), `.sl/` is the folder where it stores its state, analogous to `.git/` in Git. It should be ignored in Prettier like the other SCM folders.
##### Recognize `@satisfies` in Closure-style type casts ([#​14262](https://togithub.com/prettier/prettier/pull/14262) by [@​fisker](https://togithub.com/fisker))
<!-- prettier-ignore -->
```jsx
// Input
const a = /** @​satisfies {Record<string, string>} */ ({hello: 1337});
const b = /** @​type {Record<string, string>} */ ({hello: 1337});
// Prettier 2.8.3
const a = /** @​satisfies {Record<string, string>} */ { hello: 1337 };
const b = /** @​type {Record<string, string>} */ ({ hello: 1337 });
// Prettier 2.8.4
const a = /** @​satisfies {Record<string, string>} */ ({hello: 1337});
const b = /** @​type {Record<string, string>} */ ({hello: 1337});
```
##### Fix parens in inferred function return types with `extends` ([#​14279](https://togithub.com/prettier/prettier/pull/14279) by [@​fisker](https://togithub.com/fisker))
<!-- prettier-ignore -->
```ts
// Input
type Foo<T> = T extends ((a) => a is infer R extends string) ? R : never;
// Prettier 2.8.3 (First format)
type Foo<T> = T extends (a) => a is infer R extends string ? R : never;
// Prettier 2.8.3 (Second format)
SyntaxError: '?' expected.
// Prettier 2.8.4
type Foo<T> = T extends ((a) => a is infer R extends string) ? R : never;
```
</details>
---
### Configuration
📅 **Schedule**: Branch creation - "every weekend" in timezone Etc/UTC, Automerge - "after 1 am and before 7 am" in timezone Etc/UTC.
🚦 **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.
---
- [x] <!-- rebase-check -->If you want to rebase/retry this PR, check this box
---
This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/canonical/craft-actions).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi44LjExIiwidXBkYXRlZEluVmVyIjoiMzcuMTczLjAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIn0=-->
Evaluation history
| Date | Model | Scores | Action | Summary |
|---|---|---|---|---|
| qwen/qwen3.6-35b-a3b | — | — | Renovate bot PR updating prettier to v3 was autoclosed without merging. The dependency update was superseded or abandoned by automation due to inactivity, with no reviews or CI checks performed. | |
| qwen3.6-35b-a3b-mtp-q6 | — | — | Renovate dependency update for prettier to v3 was autoclosed. The branch was automatically closed without merging, indicating the update was superseded or became obsolete. |
Update history
No update history recorded yet.
Related issues
| Issue | Project | State | Summary | Similarity |
|---|---|---|---|---|
| #1170 chore(deps): update dependency humanize to v4.7.0 - autoclosed | charmcraft | closed | Automated dependency update to humanize v4.7.0 was autoclosed without merging. Renovate bot automatically closed the pull request, indicating it was superseded or outdated, leaving the change unapplied. | |
| #4 chore(deps): update development dependencies (minor and patch) | craft-actions | closed | Automated development dependency updates were closed without merging. The Renovate bot confirmed the closure, will ignore this update, and will generate a replacement PR for newer versions. | |
| #235 chore(deps): update dependency lint/ruff to v0.2.2 - autoclosed | craft-cli | closed | Automatically closed without merging. The Renovate bot dependency update for lint/ruff to v0.2.2 was autoclosed. No changes were applied to the repository. | |
| #191 chore(deps): update development dependencies (non-major) - autoclosed | craft-store | closed | Automated dependency updates for pytest, black, mypy, and pyright were autoclosed without merging. Renovate configured the PR as immortal, ensuring it will be automatically regenerated and resubmitted later. | |
| #1063 chore(deps): update patch updates | charmcraft | closed | Closed without merging. The automated dependency update was rejected. The bot will ignore this specific update and automatically generate a replacement PR when newer versions are released. | |
| #4773 chore(deps): update dependency pip to v23 [security] - autoclosed | snapcraft | closed | Automatically closed without merging. The Renovate bot dependency update upgrading pip to v23.3 to address CVE-2023-5752 was abandoned, likely due to staleness or repository configuration. | |
| #114 chore(deps): update dependency lint/pylint to v3 | craft-store | closed | Closed without merging. The dependency update was abandoned after maintainers confirmed the project is removing pylint entirely. | |
| #1175 chore(deps): update dependency pytest-mock to v3.11.1 - autoclosed | charmcraft | closed | Dependency update for pytest-mock to v3.11.1 was autoclosed due to inactivity. The branch was abandoned without review or merging. | |
| #4856 chore(deps): update dependency requests to v2.32.2 [security] - autoclosed | snapcraft | closed | Renovate's dependency update PR for requests to v2.32.2 was autoclosed without merging. The bot automatically closed the stale pull request, leaving the CVE-2024-35195 security fix unapplied. | |
| #28 chore(deps): update dependency pydantic to v2 - autoclosed | craft-grammar | closed | Renovate autoclosed this pydantic v2 dependency update without merging. The pull request received no reviews or CI checks and was automatically closed, indicating it was superseded or abandoned. |