Skip to content

Handle comments in export declarations between type and type name. - #19565

Merged
fisker merged 7 commits into
prettier:mainfrom
kirkwaiblinger:fix-type-comment
Jul 7, 2026
Merged

fisker merged 7 commits into
prettier:mainfrom
kirkwaiblinger:fix-type-comment

Conversation

@kirkwaiblinger

@kirkwaiblinger kirkwaiblinger commented Jul 7, 2026 •

Copy link
Copy Markdown
Contributor

Description

fixes #19564

Checklist

  • I’ve added tests to confirm my change works.
  • (If changing the API or CLI) I’ve documented the changes I’ve made (in the docs/ directory).
  • (If the change is user-facing) I’ve added my changes to changelog_unreleased/*/XXXX.md file following changelog_unreleased/TEMPLATE.md.
  • I’ve read the contributing guidelines.
  • I did not use AI to generate this PR.
  • (If the above is not checked) I have reviewed the AI-generated content before submitting.

isChildWontPrint checked parent.local instead of parent.exported when
deciding which side of a shorthand ExportSpecifier can't attach
comments. local is the side that always prints; exported is the one
skipped, so comments landing there (e.g. `export { type /* c */ T }`)
were silently dropped, crashing with "Comment was not printed".
@pkg-pr-new

pkg-pr-new Bot commented Jul 7, 2026 •

Copy link
Copy Markdown

Open in StackBlitz

yarn add https://pkg.pr.new/@prettier/[email protected]
yarn add https://pkg.pr.new/@prettier/[email protected]
yarn add https://pkg.pr.new/[email protected]

commit: 8cc0d68

@netlify

netlify Bot commented Jul 7, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for prettier ready!

Built without sensitive environment variables

Name Link
🔨 Latest commit 8cc0d68
🔍 Latest deploy log https://app.netlify.com/projects/prettier/deploys/6a4d689b1d4f32000879f55c
😎 Deploy Preview https://deploy-preview-19565--prettier.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

Same isChildWontPrint bug as the export-specifier fix, mirrored on
the import side: imported is the side that always prints, local is
skipped when shorthand, so the check needs to guard local (not
imported) to keep comments like `import { type /* c */ T }` from
being dropped.
@kirkwaiblinger
kirkwaiblinger marked this pull request as ready for review July 7, 2026 20:59

@fisker fisker left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you!

@fisker fisker changed the title fix: handle comments in export declarations between type and type name. Handle comments in export declarations between type and type name. Jul 7, 2026
@fisker
fisker merged commit a7ce99a into prettier:main Jul 7, 2026
36 checks passed
@kirkwaiblinger
kirkwaiblinger deleted the fix-type-comment branch July 8, 2026 04:36
sys-support pushed a commit to 3caravelle/renovate that referenced this pull request Jul 13, 2026
This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [prettier](https://prettier.io) ([source](https://github.com/prettier/prettier)) | [`3.9.4` → `3.9.5`](https://renovatebot.com/diffs/npm/prettier/3.9.4/3.9.5) | ![age](https://developer.mend.io/api/mc/badges/age/npm/prettier/3.9.5?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/prettier/3.9.4/3.9.5?slim=true) |

---

### Release Notes

<details>
<summary>prettier/prettier (prettier)</summary>

### [`v3.9.5`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[Compare Source](prettier/prettier@3.9.4...3.9.5)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#&#8203;19351](prettier/prettier#19351) by [@&#8203;tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#&#8203;19487](prettier/prettier#19487) by [@&#8203;andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#&#8203;19503](prettier/prettier#19503) by [@&#8203;kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@&#8203;name];
  color: #theme[@&#8203;@&#8203;name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @&#8203;name];
  color: #theme[ @&#8203;@&#8203;name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@&#8203;name];
  color: #theme[@&#8203;@&#8203;name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#&#8203;19516](prettier/prettier#19516) by [@&#8203;bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#&#8203;19517](prettier/prettier#19517) by [@&#8203;kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #&#8203;000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #&#8203;000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #&#8203;000;
}
```

##### Markdown: Preserve wiki links with aliases ([#&#8203;19527](prettier/prettier#19527) by [@&#8203;kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#&#8203;19565](prettier/prettier#19565) by [@&#8203;kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#&#8203;19567](prettier/prettier#19567) by [@&#8203;Janther](https://github.com/Janther))

Prettier\@&#8203;3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#&#8203;19568](prettier/prettier#19568) by [@&#8203;fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#&#8203;19571](prettier/prettier#19571) by [@&#8203;fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@&#8203;switch (state.mode) {
  @&#8203;default never(state);
}

<!-- Prettier 3.9.4 -->
@&#8203;switch (state.mode) {
  @&#8203;default never;
}

<!-- Prettier 3.9.5 -->
@&#8203;switch (state.mode) {
  @&#8203;default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#&#8203;19572](prettier/prettier#19572) by [@&#8203;fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#&#8203;19574](prettier/prettier#19574) by [@&#8203;kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#&#8203;19581](prettier/prettier#19581) by [@&#8203;fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#&#8203;19583](prettier/prettier#19583) by [@&#8203;fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```

</details>

---

### 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.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi44MS4zIiwidXBkYXRlZEluVmVyIjoiNDIuODEuMyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Reviewed-on: https://git.3caravelle.net/3Caravelle/renovate/pulls/45
Co-authored-by: Renovate Bot <[email protected]>
Co-committed-by: Renovate Bot <[email protected]>
apricote pushed a commit to hetznercloud/fleeting-plugin-hetzner that referenced this pull request Jul 14, 2026
…fleeting-plugin-hetzner!390)

This MR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [prettier](https://prettier.io) ([source](https://github.com/prettier/prettier)) | `3.9.4` → `3.9.5` | ![age](https://developer.mend.io/api/mc/badges/age/npm/prettier/3.9.5?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/prettier/3.9.4/3.9.5?slim=true) |

Note: The `pre-commit` manager in Renovate is not supported by the `pre-commit` maintainers or community. Please do not report any problems there, instead [create a Discussion in the Renovate repository](https://github.com/renovatebot/renovate/discussions/new) if you have any questions.

---

### Release Notes

<details>
<summary>prettier/prettier (prettier)</summary>

### [`v3.9.5`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[Compare Source](prettier/prettier@3.9.4...3.9.5)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#&#8203;19351](prettier/prettier#19351) by [@&#8203;tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#&#8203;19487](prettier/prettier#19487) by [@&#8203;andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#&#8203;19503](prettier/prettier#19503) by [@&#8203;kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@&#8203;name];
  color: #theme[@&#8203;@&#8203;name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @&#8203;name];
  color: #theme[ @&#8203;@&#8203;name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@&#8203;name];
  color: #theme[@&#8203;@&#8203;name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#&#8203;19516](prettier/prettier#19516) by [@&#8203;bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#&#8203;19517](prettier/prettier#19517) by [@&#8203;kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #&#8203;000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #&#8203;000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #&#8203;000;
}
```

##### Markdown: Preserve wiki links with aliases ([#&#8203;19527](prettier/prettier#19527) by [@&#8203;kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#&#8203;19565](prettier/prettier#19565) by [@&#8203;kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#&#8203;19567](prettier/prettier#19567) by [@&#8203;Janther](https://github.com/Janther))

Prettier\@&#8203;3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#&#8203;19568](prettier/prettier#19568) by [@&#8203;fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#&#8203;19571](prettier/prettier#19571) by [@&#8203;fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@&#8203;switch (state.mode) {
  @&#8203;default never(state);
}

<!-- Prettier 3.9.4 -->
@&#8203;switch (state.mode) {
  @&#8203;default never;
}

<!-- Prettier 3.9.5 -->
@&#8203;switch (state.mode) {
  @&#8203;default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#&#8203;19572](prettier/prettier#19572) by [@&#8203;fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#&#8203;19574](prettier/prettier#19574) by [@&#8203;kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#&#8203;19581](prettier/prettier#19581) by [@&#8203;fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#&#8203;19583](prettier/prettier#19583) by [@&#8203;fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever MR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNjMuMyIsInVwZGF0ZWRJblZlciI6IjQzLjI2My4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Jul 18, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.5 |


## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
gwennlbh pushed a commit to cigaleapp/cigale that referenced this pull request Jul 20, 2026
##### [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
renovate Bot added a commit to gwennlbh/workflowdash that referenced this pull request Jul 25, 2026
##### [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
##### [v3.9.4](prettier/prettier@3.9.3...3.9.4)

##### [v3.9.3](prettier/prettier@b875c90...b875c90)

##### [v3.9.2](prettier/prettier@3.9.1...b875c90)

##### [v3.9.1](prettier/prettier@3.9.0...3.9.1)

##### [v3.9.0](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#390)

[diff](prettier/prettier@3.8.5...3.9.0)

🔗 [Release Notes](https://prettier.io/blog/2026/06/27/3.9.0)
##### [v3.8.5](prettier/prettier@3.8.4...96395cb)

##### [v3.8.4](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#384)

[diff](prettier/prettier@3.8.3...3.8.4)

##### Markdown: Fix blank lines between list items and nested sub-lists being removed in Markdown/MDX ([#17746](prettier/prettier#17746) by [@byplayer](https://github.com/byplayer))

Prettier was removing blank lines between list items and their nested sub-lists, converting loose lists into tight lists and changing their semantic meaning.

<!-- prettier-ignore -->

```markdown
<!-- Input -->
- a

  - b

- c


  - d

<!-- Prettier 3.8.3 -->
- a
  - b
- c
  - d

<!-- Prettier 3.8.4 -->
- a

  - b

- c

  - d
```
##### [v3.8.3](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#383)

[diff](prettier/prettier@3.8.2...3.8.3)

##### SCSS: Prevent trailing comma in `if()` function ([#18471](prettier/prettier#18471) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```scss
// Input
$value: if(sass(false): 1; else: -1);

// Prettier 3.8.2
$value: if(
  sass(false): 1; else: -1,
);

// Prettier 3.8.3
$value: if(sass(false): 1; else: -1);
```
##### [v3.8.2](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#382)

[diff](prettier/prettier@3.8.1...3.8.2)

##### Angular: Support Angular v21.2 ([#18722](prettier/prettier#18722), [#19034](prettier/prettier#19034) by [@fisker](https://github.com/fisker))

Exhaustive typechecking with `@default never;`

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (foo) {
  @case (1) {}
  @default never;
}

<!-- Prettier 3.8.1 -->
SyntaxError: Incomplete block "default never". If you meant to write the @ character, you should use the "&#64;" HTML entity instead. (3:3)

<!-- Prettier 3.8.2 -->
@switch (foo) {
  @case (1) {}
  @default never;
}
```

`arrow function` and `instanceof` expressions.

<!-- prettier-ignore -->

```html
<!-- Input -->
@let fn = (a) =>        a?    1:2;

{{ fn ( a         instanceof b)}}

<!-- Prettier 3.8.1 -->
@let fn = (a) =>        a?    1:2;

{{ fn ( a         instanceof b)}}

<!-- Prettier 3.8.2 -->
@let fn = (a) => (a ? 1 : 2);

{{ fn(a instanceof b) }}
```
##### [v3.8.1](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#381)

[diff](prettier/prettier@3.8.0...3.8.1)

##### Include available `printers` in plugin type declarations ([#18706](prettier/prettier#18706) by [@porada](https://github.com/porada))

<!-- prettier-ignore -->

```ts
// Input
import * as prettierPluginEstree from "prettier/plugins/estree";

// Prettier 3.8.0
// Property 'printers' does not exist on type 'typeof import("prettier/plugins/estree")'. ts(2339)
prettierPluginEstree.printers.estree; //=> any

// Prettier 3.8.1
prettierPluginEstree.printers.estree; //=> Printer
prettierPluginEstree.printers["estree-json"]; //=> Printer
```
##### [v3.8.0](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#380)

[diff](prettier/prettier@3.7.4...3.8.0)

🔗 [Release Notes](https://prettier.io/blog/2026/01/14/3.8.0)
##### [v3.7.4](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#374)

[diff](prettier/prettier@3.7.3...3.7.4)

##### LWC: Avoid quote around interpolations ([#18383](prettier/prettier#18383) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```html
<!-- Input -->
<div foo={bar}>   </div>

<!-- Prettier 3.7.3 (--embedded-language-formatting off) -->
<div foo="{bar}"></div>

<!-- Prettier 3.7.4 (--embedded-language-formatting off) -->
<div foo={bar}></div>
```

##### TypeScript: Fix comment inside union type gets duplicated ([#18393](prettier/prettier#18393) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
type Foo = (/** comment */ a | b) | c;

// Prettier 3.7.3
type Foo = /** comment */ (/** comment */ a | b) | c;

// Prettier 3.7.4
type Foo = /** comment */ (a | b) | c;
```

##### TypeScript: Fix unstable comment print in union type comments ([#18395](prettier/prettier#18395) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
type X = (A | B) & (
  // comment
  A | B
);

// Prettier 3.7.3 (first format)
type X = (A | B) &
  (// comment
  A | B);

// Prettier 3.7.3 (second format)
type X = (
  | A
  | B // comment
) &
  (A | B);

// Prettier 3.7.4
type X = (A | B) &
  // comment
  (A | B);
```
##### [v3.7.3](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#373)

[diff](prettier/prettier@3.7.2...3.7.3)

##### API: Fix `prettier.getFileInfo()` change that breaks VSCode extension ([#18375](prettier/prettier#18375) by [@fisker](https://github.com/fisker))

An internal refactor accidentally broke the VSCode extension plugin loading.
##### [v3.7.2](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#372)

[diff](prettier/prettier@3.7.1...3.7.2)

##### JavaScript: Fix string print when switching quotes ([#18351](prettier/prettier#18351) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
console.log("A descriptor\\'s .kind must be \"method\" or \"field\".")

// Prettier 3.7.1
console.log('A descriptor\\'s .kind must be "method" or "field".');

// Prettier 3.7.2
console.log('A descriptor\\\'s .kind must be "method" or "field".');
```

##### JavaScript: Preserve quote for embedded HTML attribute values ([#18352](prettier/prettier#18352) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```tsx
// Input
const html = /* HTML */ ` <div class="${styles.banner}"></div> `;

// Prettier 3.7.1
const html = /* HTML */ ` <div class=${styles.banner}></div> `;

// Prettier 3.7.2
const html = /* HTML */ ` <div class="${styles.banner}"></div> `;
```

##### TypeScript: Fix comment in empty type literal ([#18364](prettier/prettier#18364) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
export type XXX = {
  // tbd
};

// Prettier 3.7.1
export type XXX = { // tbd };

// Prettier 3.7.2
export type XXX = {
  // tbd
};
```
##### [v3.7.1](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#371)

[diff](prettier/prettier@3.7.0...3.7.1)

##### API: Fix performance regression in doc printer ([#18342](prettier/prettier#18342) by [@fisker](https://github.com/fisker))

Prettier 3.7.0 can be very slow when formatting big files, the regression has been fixed.
##### [v3.7.0](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#370)

[diff](prettier/prettier@3.6.2...3.7.0)

🔗 [Release Notes](https://prettier.io/blog/2025/11/27/3.7.0)
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Jul 25, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.6 |


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to gwennlbh/workflowdash that referenced this pull request Jul 29, 2026
##### [v3.9.6](prettier/prettier@3.9.5...bd676aa)

##### [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
##### [v3.9.4](prettier/prettier@3.9.3...3.9.4)

##### [v3.9.3](prettier/prettier@b875c90...b875c90)

##### [v3.9.2](prettier/prettier@3.9.1...b875c90)

##### [v3.9.1](prettier/prettier@3.9.0...3.9.1)

##### [v3.9.0](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#390)

[diff](prettier/prettier@3.8.5...3.9.0)

🔗 [Release Notes](https://prettier.io/blog/2026/06/27/3.9.0)
##### [v3.8.5](prettier/prettier@3.8.4...96395cb)

##### [v3.8.4](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#384)

[diff](prettier/prettier@3.8.3...3.8.4)

##### Markdown: Fix blank lines between list items and nested sub-lists being removed in Markdown/MDX ([#17746](prettier/prettier#17746) by [@byplayer](https://github.com/byplayer))

Prettier was removing blank lines between list items and their nested sub-lists, converting loose lists into tight lists and changing their semantic meaning.

<!-- prettier-ignore -->

```markdown
<!-- Input -->
- a

  - b

- c


  - d

<!-- Prettier 3.8.3 -->
- a
  - b
- c
  - d

<!-- Prettier 3.8.4 -->
- a

  - b

- c

  - d
```
##### [v3.8.3](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#383)

[diff](prettier/prettier@3.8.2...3.8.3)

##### SCSS: Prevent trailing comma in `if()` function ([#18471](prettier/prettier#18471) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```scss
// Input
$value: if(sass(false): 1; else: -1);

// Prettier 3.8.2
$value: if(
  sass(false): 1; else: -1,
);

// Prettier 3.8.3
$value: if(sass(false): 1; else: -1);
```
##### [v3.8.2](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#382)

[diff](prettier/prettier@3.8.1...3.8.2)

##### Angular: Support Angular v21.2 ([#18722](prettier/prettier#18722), [#19034](prettier/prettier#19034) by [@fisker](https://github.com/fisker))

Exhaustive typechecking with `@default never;`

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (foo) {
  @case (1) {}
  @default never;
}

<!-- Prettier 3.8.1 -->
SyntaxError: Incomplete block "default never". If you meant to write the @ character, you should use the "&#64;" HTML entity instead. (3:3)

<!-- Prettier 3.8.2 -->
@switch (foo) {
  @case (1) {}
  @default never;
}
```

`arrow function` and `instanceof` expressions.

<!-- prettier-ignore -->

```html
<!-- Input -->
@let fn = (a) =>        a?    1:2;

{{ fn ( a         instanceof b)}}

<!-- Prettier 3.8.1 -->
@let fn = (a) =>        a?    1:2;

{{ fn ( a         instanceof b)}}

<!-- Prettier 3.8.2 -->
@let fn = (a) => (a ? 1 : 2);

{{ fn(a instanceof b) }}
```
##### [v3.8.1](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#381)

[diff](prettier/prettier@3.8.0...3.8.1)

##### Include available `printers` in plugin type declarations ([#18706](prettier/prettier#18706) by [@porada](https://github.com/porada))

<!-- prettier-ignore -->

```ts
// Input
import * as prettierPluginEstree from "prettier/plugins/estree";

// Prettier 3.8.0
// Property 'printers' does not exist on type 'typeof import("prettier/plugins/estree")'. ts(2339)
prettierPluginEstree.printers.estree; //=> any

// Prettier 3.8.1
prettierPluginEstree.printers.estree; //=> Printer
prettierPluginEstree.printers["estree-json"]; //=> Printer
```
##### [v3.8.0](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#380)

[diff](prettier/prettier@3.7.4...3.8.0)

🔗 [Release Notes](https://prettier.io/blog/2026/01/14/3.8.0)
##### [v3.7.4](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#374)

[diff](prettier/prettier@3.7.3...3.7.4)

##### LWC: Avoid quote around interpolations ([#18383](prettier/prettier#18383) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```html
<!-- Input -->
<div foo={bar}>   </div>

<!-- Prettier 3.7.3 (--embedded-language-formatting off) -->
<div foo="{bar}"></div>

<!-- Prettier 3.7.4 (--embedded-language-formatting off) -->
<div foo={bar}></div>
```

##### TypeScript: Fix comment inside union type gets duplicated ([#18393](prettier/prettier#18393) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
type Foo = (/** comment */ a | b) | c;

// Prettier 3.7.3
type Foo = /** comment */ (/** comment */ a | b) | c;

// Prettier 3.7.4
type Foo = /** comment */ (a | b) | c;
```

##### TypeScript: Fix unstable comment print in union type comments ([#18395](prettier/prettier#18395) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
type X = (A | B) & (
  // comment
  A | B
);

// Prettier 3.7.3 (first format)
type X = (A | B) &
  (// comment
  A | B);

// Prettier 3.7.3 (second format)
type X = (
  | A
  | B // comment
) &
  (A | B);

// Prettier 3.7.4
type X = (A | B) &
  // comment
  (A | B);
```
##### [v3.7.3](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#373)

[diff](prettier/prettier@3.7.2...3.7.3)

##### API: Fix `prettier.getFileInfo()` change that breaks VSCode extension ([#18375](prettier/prettier#18375) by [@fisker](https://github.com/fisker))

An internal refactor accidentally broke the VSCode extension plugin loading.
##### [v3.7.2](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#372)

[diff](prettier/prettier@3.7.1...3.7.2)

##### JavaScript: Fix string print when switching quotes ([#18351](prettier/prettier#18351) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
console.log("A descriptor\\'s .kind must be \"method\" or \"field\".")

// Prettier 3.7.1
console.log('A descriptor\\'s .kind must be "method" or "field".');

// Prettier 3.7.2
console.log('A descriptor\\\'s .kind must be "method" or "field".');
```

##### JavaScript: Preserve quote for embedded HTML attribute values ([#18352](prettier/prettier#18352) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```tsx
// Input
const html = /* HTML */ ` <div class="${styles.banner}"></div> `;

// Prettier 3.7.1
const html = /* HTML */ ` <div class=${styles.banner}></div> `;

// Prettier 3.7.2
const html = /* HTML */ ` <div class="${styles.banner}"></div> `;
```

##### TypeScript: Fix comment in empty type literal ([#18364](prettier/prettier#18364) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
export type XXX = {
  // tbd
};

// Prettier 3.7.1
export type XXX = { // tbd };

// Prettier 3.7.2
export type XXX = {
  // tbd
};
```
##### [v3.7.1](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#371)

[diff](prettier/prettier@3.7.0...3.7.1)

##### API: Fix performance regression in doc printer ([#18342](prettier/prettier#18342) by [@fisker](https://github.com/fisker))

Prettier 3.7.0 can be very slow when formatting big files, the regression has been fixed.
##### [v3.7.0](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#370)

[diff](prettier/prettier@3.6.2...3.7.0)

🔗 [Release Notes](https://prettier.io/blog/2025/11/27/3.7.0)
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Jul 29, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.6 |


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Aug 1, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.6 |


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Aug 4, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.6 |


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Aug 7, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.6 |


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Aug 8, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.6 |


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Aug 9, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.6 |


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Aug 11, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.6 |


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Aug 16, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.6 |


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Aug 21, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.6 |


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Aug 29, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.6 |


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Sep 1, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.6 |


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Sep 6, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.6 |


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Sep 6, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.6 |


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Sep 12, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.6 |


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Sep 16, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.6 |


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to gwennlbh/workflowdash that referenced this pull request Sep 20, 2026
##### [v3.9.6](prettier/prettier@3.9.5...bd676aa)

##### [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
##### [v3.9.4](prettier/prettier@3.9.3...3.9.4)

##### [v3.9.3](prettier/prettier@b875c90...b875c90)

##### [v3.9.2](prettier/prettier@3.9.1...b875c90)

##### [v3.9.1](prettier/prettier@3.9.0...3.9.1)

##### [v3.9.0](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#390)

[diff](prettier/prettier@3.8.5...3.9.0)

🔗 [Release Notes](https://prettier.io/blog/2026/06/27/3.9.0)
##### [v3.8.5](prettier/prettier@3.8.4...96395cb)

##### [v3.8.4](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#384)

[diff](prettier/prettier@3.8.3...3.8.4)

##### Markdown: Fix blank lines between list items and nested sub-lists being removed in Markdown/MDX ([#17746](prettier/prettier#17746) by [@byplayer](https://github.com/byplayer))

Prettier was removing blank lines between list items and their nested sub-lists, converting loose lists into tight lists and changing their semantic meaning.

<!-- prettier-ignore -->

```markdown
<!-- Input -->
- a

  - b

- c


  - d

<!-- Prettier 3.8.3 -->
- a
  - b
- c
  - d

<!-- Prettier 3.8.4 -->
- a

  - b

- c

  - d
```
##### [v3.8.3](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#383)

[diff](prettier/prettier@3.8.2...3.8.3)

##### SCSS: Prevent trailing comma in `if()` function ([#18471](prettier/prettier#18471) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```scss
// Input
$value: if(sass(false): 1; else: -1);

// Prettier 3.8.2
$value: if(
  sass(false): 1; else: -1,
);

// Prettier 3.8.3
$value: if(sass(false): 1; else: -1);
```
##### [v3.8.2](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#382)

[diff](prettier/prettier@3.8.1...3.8.2)

##### Angular: Support Angular v21.2 ([#18722](prettier/prettier#18722), [#19034](prettier/prettier#19034) by [@fisker](https://github.com/fisker))

Exhaustive typechecking with `@default never;`

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (foo) {
  @case (1) {}
  @default never;
}

<!-- Prettier 3.8.1 -->
SyntaxError: Incomplete block "default never". If you meant to write the @ character, you should use the "&#64;" HTML entity instead. (3:3)

<!-- Prettier 3.8.2 -->
@switch (foo) {
  @case (1) {}
  @default never;
}
```

`arrow function` and `instanceof` expressions.

<!-- prettier-ignore -->

```html
<!-- Input -->
@let fn = (a) =>        a?    1:2;

{{ fn ( a         instanceof b)}}

<!-- Prettier 3.8.1 -->
@let fn = (a) =>        a?    1:2;

{{ fn ( a         instanceof b)}}

<!-- Prettier 3.8.2 -->
@let fn = (a) => (a ? 1 : 2);

{{ fn(a instanceof b) }}
```
##### [v3.8.1](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#381)

[diff](prettier/prettier@3.8.0...3.8.1)

##### Include available `printers` in plugin type declarations ([#18706](prettier/prettier#18706) by [@porada](https://github.com/porada))

<!-- prettier-ignore -->

```ts
// Input
import * as prettierPluginEstree from "prettier/plugins/estree";

// Prettier 3.8.0
// Property 'printers' does not exist on type 'typeof import("prettier/plugins/estree")'. ts(2339)
prettierPluginEstree.printers.estree; //=> any

// Prettier 3.8.1
prettierPluginEstree.printers.estree; //=> Printer
prettierPluginEstree.printers["estree-json"]; //=> Printer
```
##### [v3.8.0](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#380)

[diff](prettier/prettier@3.7.4...3.8.0)

🔗 [Release Notes](https://prettier.io/blog/2026/01/14/3.8.0)
##### [v3.7.4](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#374)

[diff](prettier/prettier@3.7.3...3.7.4)

##### LWC: Avoid quote around interpolations ([#18383](prettier/prettier#18383) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```html
<!-- Input -->
<div foo={bar}>   </div>

<!-- Prettier 3.7.3 (--embedded-language-formatting off) -->
<div foo="{bar}"></div>

<!-- Prettier 3.7.4 (--embedded-language-formatting off) -->
<div foo={bar}></div>
```

##### TypeScript: Fix comment inside union type gets duplicated ([#18393](prettier/prettier#18393) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
type Foo = (/** comment */ a | b) | c;

// Prettier 3.7.3
type Foo = /** comment */ (/** comment */ a | b) | c;

// Prettier 3.7.4
type Foo = /** comment */ (a | b) | c;
```

##### TypeScript: Fix unstable comment print in union type comments ([#18395](prettier/prettier#18395) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
type X = (A | B) & (
  // comment
  A | B
);

// Prettier 3.7.3 (first format)
type X = (A | B) &
  (// comment
  A | B);

// Prettier 3.7.3 (second format)
type X = (
  | A
  | B // comment
) &
  (A | B);

// Prettier 3.7.4
type X = (A | B) &
  // comment
  (A | B);
```
##### [v3.7.3](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#373)

[diff](prettier/prettier@3.7.2...3.7.3)

##### API: Fix `prettier.getFileInfo()` change that breaks VSCode extension ([#18375](prettier/prettier#18375) by [@fisker](https://github.com/fisker))

An internal refactor accidentally broke the VSCode extension plugin loading.
##### [v3.7.2](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#372)

[diff](prettier/prettier@3.7.1...3.7.2)

##### JavaScript: Fix string print when switching quotes ([#18351](prettier/prettier#18351) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
console.log("A descriptor\\'s .kind must be \"method\" or \"field\".")

// Prettier 3.7.1
console.log('A descriptor\\'s .kind must be "method" or "field".');

// Prettier 3.7.2
console.log('A descriptor\\\'s .kind must be "method" or "field".');
```

##### JavaScript: Preserve quote for embedded HTML attribute values ([#18352](prettier/prettier#18352) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```tsx
// Input
const html = /* HTML */ ` <div class="${styles.banner}"></div> `;

// Prettier 3.7.1
const html = /* HTML */ ` <div class=${styles.banner}></div> `;

// Prettier 3.7.2
const html = /* HTML */ ` <div class="${styles.banner}"></div> `;
```

##### TypeScript: Fix comment in empty type literal ([#18364](prettier/prettier#18364) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
export type XXX = {
  // tbd
};

// Prettier 3.7.1
export type XXX = { // tbd };

// Prettier 3.7.2
export type XXX = {
  // tbd
};
```
##### [v3.7.1](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#371)

[diff](prettier/prettier@3.7.0...3.7.1)

##### API: Fix performance regression in doc printer ([#18342](prettier/prettier#18342) by [@fisker](https://github.com/fisker))

Prettier 3.7.0 can be very slow when formatting big files, the regression has been fixed.
##### [v3.7.0](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#370)

[diff](prettier/prettier@3.6.2...3.7.0)

🔗 [Release Notes](https://prettier.io/blog/2025/11/27/3.7.0)
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Sep 20, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.8 |


## [v3.9.8](prettier/prettier@3.9.7...bd676aa)



## [v3.9.7](https://github.com/prettier/prettier/releases/tag/3.9.7)

- Support Angular 22.2
- Fix regressions in v3.9

🔗 [Changelog](https://github.com/prettier/prettier/blob/3.9.7/CHANGELOG.md#397)


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to gwennlbh/workflowdash that referenced this pull request Sep 27, 2026
##### [v3.9.8](prettier/prettier@3.9.7...bd676aa)

##### [v3.9.7](https://github.com/prettier/prettier/releases/tag/3.9.7)

- Support Angular 22.2
- Fix regressions in v3.9

🔗 [Changelog](https://github.com/prettier/prettier/blob/3.9.7/CHANGELOG.md#397)
##### [v3.9.6](prettier/prettier@3.9.5...bd676aa)

##### [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
##### [v3.9.4](prettier/prettier@3.9.3...3.9.4)

##### [v3.9.3](prettier/prettier@b875c90...b875c90)

##### [v3.9.2](prettier/prettier@3.9.1...b875c90)

##### [v3.9.1](prettier/prettier@3.9.0...3.9.1)

##### [v3.9.0](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#390)

[diff](prettier/prettier@3.8.5...3.9.0)

🔗 [Release Notes](https://prettier.io/blog/2026/06/27/3.9.0)
##### [v3.8.5](prettier/prettier@3.8.4...96395cb)

##### [v3.8.4](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#384)

[diff](prettier/prettier@3.8.3...3.8.4)

##### Markdown: Fix blank lines between list items and nested sub-lists being removed in Markdown/MDX ([#17746](prettier/prettier#17746) by [@byplayer](https://github.com/byplayer))

Prettier was removing blank lines between list items and their nested sub-lists, converting loose lists into tight lists and changing their semantic meaning.

<!-- prettier-ignore -->

```markdown
<!-- Input -->
- a

  - b

- c


  - d

<!-- Prettier 3.8.3 -->
- a
  - b
- c
  - d

<!-- Prettier 3.8.4 -->
- a

  - b

- c

  - d
```
##### [v3.8.3](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#383)

[diff](prettier/prettier@3.8.2...3.8.3)

##### SCSS: Prevent trailing comma in `if()` function ([#18471](prettier/prettier#18471) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```scss
// Input
$value: if(sass(false): 1; else: -1);

// Prettier 3.8.2
$value: if(
  sass(false): 1; else: -1,
);

// Prettier 3.8.3
$value: if(sass(false): 1; else: -1);
```
##### [v3.8.2](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#382)

[diff](prettier/prettier@3.8.1...3.8.2)

##### Angular: Support Angular v21.2 ([#18722](prettier/prettier#18722), [#19034](prettier/prettier#19034) by [@fisker](https://github.com/fisker))

Exhaustive typechecking with `@default never;`

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (foo) {
  @case (1) {}
  @default never;
}

<!-- Prettier 3.8.1 -->
SyntaxError: Incomplete block "default never". If you meant to write the @ character, you should use the "&#64;" HTML entity instead. (3:3)

<!-- Prettier 3.8.2 -->
@switch (foo) {
  @case (1) {}
  @default never;
}
```

`arrow function` and `instanceof` expressions.

<!-- prettier-ignore -->

```html
<!-- Input -->
@let fn = (a) =>        a?    1:2;

{{ fn ( a         instanceof b)}}

<!-- Prettier 3.8.1 -->
@let fn = (a) =>        a?    1:2;

{{ fn ( a         instanceof b)}}

<!-- Prettier 3.8.2 -->
@let fn = (a) => (a ? 1 : 2);

{{ fn(a instanceof b) }}
```
##### [v3.8.1](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#381)

[diff](prettier/prettier@3.8.0...3.8.1)

##### Include available `printers` in plugin type declarations ([#18706](prettier/prettier#18706) by [@porada](https://github.com/porada))

<!-- prettier-ignore -->

```ts
// Input
import * as prettierPluginEstree from "prettier/plugins/estree";

// Prettier 3.8.0
// Property 'printers' does not exist on type 'typeof import("prettier/plugins/estree")'. ts(2339)
prettierPluginEstree.printers.estree; //=> any

// Prettier 3.8.1
prettierPluginEstree.printers.estree; //=> Printer
prettierPluginEstree.printers["estree-json"]; //=> Printer
```
##### [v3.8.0](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#380)

[diff](prettier/prettier@3.7.4...3.8.0)

🔗 [Release Notes](https://prettier.io/blog/2026/01/14/3.8.0)
##### [v3.7.4](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#374)

[diff](prettier/prettier@3.7.3...3.7.4)

##### LWC: Avoid quote around interpolations ([#18383](prettier/prettier#18383) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```html
<!-- Input -->
<div foo={bar}>   </div>

<!-- Prettier 3.7.3 (--embedded-language-formatting off) -->
<div foo="{bar}"></div>

<!-- Prettier 3.7.4 (--embedded-language-formatting off) -->
<div foo={bar}></div>
```

##### TypeScript: Fix comment inside union type gets duplicated ([#18393](prettier/prettier#18393) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
type Foo = (/** comment */ a | b) | c;

// Prettier 3.7.3
type Foo = /** comment */ (/** comment */ a | b) | c;

// Prettier 3.7.4
type Foo = /** comment */ (a | b) | c;
```

##### TypeScript: Fix unstable comment print in union type comments ([#18395](prettier/prettier#18395) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
type X = (A | B) & (
  // comment
  A | B
);

// Prettier 3.7.3 (first format)
type X = (A | B) &
  (// comment
  A | B);

// Prettier 3.7.3 (second format)
type X = (
  | A
  | B // comment
) &
  (A | B);

// Prettier 3.7.4
type X = (A | B) &
  // comment
  (A | B);
```
##### [v3.7.3](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#373)

[diff](prettier/prettier@3.7.2...3.7.3)

##### API: Fix `prettier.getFileInfo()` change that breaks VSCode extension ([#18375](prettier/prettier#18375) by [@fisker](https://github.com/fisker))

An internal refactor accidentally broke the VSCode extension plugin loading.
##### [v3.7.2](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#372)

[diff](prettier/prettier@3.7.1...3.7.2)

##### JavaScript: Fix string print when switching quotes ([#18351](prettier/prettier#18351) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
console.log("A descriptor\\'s .kind must be \"method\" or \"field\".")

// Prettier 3.7.1
console.log('A descriptor\\'s .kind must be "method" or "field".');

// Prettier 3.7.2
console.log('A descriptor\\\'s .kind must be "method" or "field".');
```

##### JavaScript: Preserve quote for embedded HTML attribute values ([#18352](prettier/prettier#18352) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```tsx
// Input
const html = /* HTML */ ` <div class="${styles.banner}"></div> `;

// Prettier 3.7.1
const html = /* HTML */ ` <div class=${styles.banner}></div> `;

// Prettier 3.7.2
const html = /* HTML */ ` <div class="${styles.banner}"></div> `;
```

##### TypeScript: Fix comment in empty type literal ([#18364](prettier/prettier#18364) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
export type XXX = {
  // tbd
};

// Prettier 3.7.1
export type XXX = { // tbd };

// Prettier 3.7.2
export type XXX = {
  // tbd
};
```
##### [v3.7.1](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#371)

[diff](prettier/prettier@3.7.0...3.7.1)

##### API: Fix performance regression in doc printer ([#18342](prettier/prettier#18342) by [@fisker](https://github.com/fisker))

Prettier 3.7.0 can be very slow when formatting big files, the regression has been fixed.
##### [v3.7.0](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#370)

[diff](prettier/prettier@3.6.2...3.7.0)

🔗 [Release Notes](https://prettier.io/blog/2025/11/27/3.7.0)
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Oct 2, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.9 |


## [v3.9.9](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#399)

[diff](prettier/prettier@3.9.8...3.9.9)

##### Markdown: Fix text with `$` been incorrectly parsed as math syntax ([#20140](prettier/prettier#20140) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```md
<!-- Input -->
**Uses $FOO** from `a.sh` and `b.sh`, plus `$BAR` from `c.sh`, before anything else runs here.

<!-- Prettier 3.9.8 -->
**Uses $FOO** from `a.sh` and `b.sh`, plus `$BAR`from`c.sh`, before anything else runs here.

<!-- Prettier 3.9.9 -->
**Uses $FOO** from `a.sh` and `b.sh`, plus `$BAR` from `c.sh`, before anything else runs here.
```


## [v3.9.8](prettier/prettier@3.9.7...bd676aa)



## [v3.9.7](https://github.com/prettier/prettier/releases/tag/3.9.7)

- Support Angular 22.2
- Fix regressions in v3.9

🔗 [Changelog](https://github.com/prettier/prettier/blob/3.9.7/CHANGELOG.md#397)


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to gwennlbh/workflowdash that referenced this pull request Oct 3, 2026
##### [v3.9.9](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#399)

[diff](prettier/prettier@3.9.8...3.9.9)

##### Markdown: Fix text with `$` been incorrectly parsed as math syntax ([#20140](prettier/prettier#20140) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```md
<!-- Input -->
**Uses $FOO** from `a.sh` and `b.sh`, plus `$BAR` from `c.sh`, before anything else runs here.

<!-- Prettier 3.9.8 -->
**Uses $FOO** from `a.sh` and `b.sh`, plus `$BAR`from`c.sh`, before anything else runs here.

<!-- Prettier 3.9.9 -->
**Uses $FOO** from `a.sh` and `b.sh`, plus `$BAR` from `c.sh`, before anything else runs here.
```
##### [v3.9.8](prettier/prettier@3.9.7...bd676aa)

##### [v3.9.7](https://github.com/prettier/prettier/releases/tag/3.9.7)

- Support Angular 22.2
- Fix regressions in v3.9

🔗 [Changelog](https://github.com/prettier/prettier/blob/3.9.7/CHANGELOG.md#397)
##### [v3.9.6](prettier/prettier@3.9.5...bd676aa)

##### [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
##### [v3.9.4](prettier/prettier@3.9.3...3.9.4)

##### [v3.9.3](prettier/prettier@b875c90...b875c90)

##### [v3.9.2](prettier/prettier@3.9.1...b875c90)

##### [v3.9.1](prettier/prettier@3.9.0...3.9.1)

##### [v3.9.0](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#390)

[diff](prettier/prettier@3.8.5...3.9.0)

🔗 [Release Notes](https://prettier.io/blog/2026/06/27/3.9.0)
##### [v3.8.5](prettier/prettier@3.8.4...96395cb)

##### [v3.8.4](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#384)

[diff](prettier/prettier@3.8.3...3.8.4)

##### Markdown: Fix blank lines between list items and nested sub-lists being removed in Markdown/MDX ([#17746](prettier/prettier#17746) by [@byplayer](https://github.com/byplayer))

Prettier was removing blank lines between list items and their nested sub-lists, converting loose lists into tight lists and changing their semantic meaning.

<!-- prettier-ignore -->

```markdown
<!-- Input -->
- a

  - b

- c


  - d

<!-- Prettier 3.8.3 -->
- a
  - b
- c
  - d

<!-- Prettier 3.8.4 -->
- a

  - b

- c

  - d
```
##### [v3.8.3](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#383)

[diff](prettier/prettier@3.8.2...3.8.3)

##### SCSS: Prevent trailing comma in `if()` function ([#18471](prettier/prettier#18471) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```scss
// Input
$value: if(sass(false): 1; else: -1);

// Prettier 3.8.2
$value: if(
  sass(false): 1; else: -1,
);

// Prettier 3.8.3
$value: if(sass(false): 1; else: -1);
```
##### [v3.8.2](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#382)

[diff](prettier/prettier@3.8.1...3.8.2)

##### Angular: Support Angular v21.2 ([#18722](prettier/prettier#18722), [#19034](prettier/prettier#19034) by [@fisker](https://github.com/fisker))

Exhaustive typechecking with `@default never;`

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (foo) {
  @case (1) {}
  @default never;
}

<!-- Prettier 3.8.1 -->
SyntaxError: Incomplete block "default never". If you meant to write the @ character, you should use the "&#64;" HTML entity instead. (3:3)

<!-- Prettier 3.8.2 -->
@switch (foo) {
  @case (1) {}
  @default never;
}
```

`arrow function` and `instanceof` expressions.

<!-- prettier-ignore -->

```html
<!-- Input -->
@let fn = (a) =>        a?    1:2;

{{ fn ( a         instanceof b)}}

<!-- Prettier 3.8.1 -->
@let fn = (a) =>        a?    1:2;

{{ fn ( a         instanceof b)}}

<!-- Prettier 3.8.2 -->
@let fn = (a) => (a ? 1 : 2);

{{ fn(a instanceof b) }}
```
##### [v3.8.1](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#381)

[diff](prettier/prettier@3.8.0...3.8.1)

##### Include available `printers` in plugin type declarations ([#18706](prettier/prettier#18706) by [@porada](https://github.com/porada))

<!-- prettier-ignore -->

```ts
// Input
import * as prettierPluginEstree from "prettier/plugins/estree";

// Prettier 3.8.0
// Property 'printers' does not exist on type 'typeof import("prettier/plugins/estree")'. ts(2339)
prettierPluginEstree.printers.estree; //=> any

// Prettier 3.8.1
prettierPluginEstree.printers.estree; //=> Printer
prettierPluginEstree.printers["estree-json"]; //=> Printer
```
##### [v3.8.0](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#380)

[diff](prettier/prettier@3.7.4...3.8.0)

🔗 [Release Notes](https://prettier.io/blog/2026/01/14/3.8.0)
##### [v3.7.4](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#374)

[diff](prettier/prettier@3.7.3...3.7.4)

##### LWC: Avoid quote around interpolations ([#18383](prettier/prettier#18383) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```html
<!-- Input -->
<div foo={bar}>   </div>

<!-- Prettier 3.7.3 (--embedded-language-formatting off) -->
<div foo="{bar}"></div>

<!-- Prettier 3.7.4 (--embedded-language-formatting off) -->
<div foo={bar}></div>
```

##### TypeScript: Fix comment inside union type gets duplicated ([#18393](prettier/prettier#18393) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
type Foo = (/** comment */ a | b) | c;

// Prettier 3.7.3
type Foo = /** comment */ (/** comment */ a | b) | c;

// Prettier 3.7.4
type Foo = /** comment */ (a | b) | c;
```

##### TypeScript: Fix unstable comment print in union type comments ([#18395](prettier/prettier#18395) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
type X = (A | B) & (
  // comment
  A | B
);

// Prettier 3.7.3 (first format)
type X = (A | B) &
  (// comment
  A | B);

// Prettier 3.7.3 (second format)
type X = (
  | A
  | B // comment
) &
  (A | B);

// Prettier 3.7.4
type X = (A | B) &
  // comment
  (A | B);
```
##### [v3.7.3](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#373)

[diff](prettier/prettier@3.7.2...3.7.3)

##### API: Fix `prettier.getFileInfo()` change that breaks VSCode extension ([#18375](prettier/prettier#18375) by [@fisker](https://github.com/fisker))

An internal refactor accidentally broke the VSCode extension plugin loading.
##### [v3.7.2](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#372)

[diff](prettier/prettier@3.7.1...3.7.2)

##### JavaScript: Fix string print when switching quotes ([#18351](prettier/prettier#18351) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
console.log("A descriptor\\'s .kind must be \"method\" or \"field\".")

// Prettier 3.7.1
console.log('A descriptor\\'s .kind must be "method" or "field".');

// Prettier 3.7.2
console.log('A descriptor\\\'s .kind must be "method" or "field".');
```

##### JavaScript: Preserve quote for embedded HTML attribute values ([#18352](prettier/prettier#18352) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```tsx
// Input
const html = /* HTML */ ` <div class="${styles.banner}"></div> `;

// Prettier 3.7.1
const html = /* HTML */ ` <div class=${styles.banner}></div> `;

// Prettier 3.7.2
const html = /* HTML */ ` <div class="${styles.banner}"></div> `;
```

##### TypeScript: Fix comment in empty type literal ([#18364](prettier/prettier#18364) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
export type XXX = {
  // tbd
};

// Prettier 3.7.1
export type XXX = { // tbd };

// Prettier 3.7.2
export type XXX = {
  // tbd
};
```
##### [v3.7.1](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#371)

[diff](prettier/prettier@3.7.0...3.7.1)

##### API: Fix performance regression in doc printer ([#18342](prettier/prettier#18342) by [@fisker](https://github.com/fisker))

Prettier 3.7.0 can be very slow when formatting big files, the regression has been fixed.
##### [v3.7.0](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#370)

[diff](prettier/prettier@3.6.2...3.7.0)

🔗 [Release Notes](https://prettier.io/blog/2025/11/27/3.7.0)
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Oct 3, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.9 |


## [v3.9.9](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#399)

[diff](prettier/prettier@3.9.8...3.9.9)

##### Markdown: Fix text with `$` been incorrectly parsed as math syntax ([#20140](prettier/prettier#20140) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```md
<!-- Input -->
**Uses $FOO** from `a.sh` and `b.sh`, plus `$BAR` from `c.sh`, before anything else runs here.

<!-- Prettier 3.9.8 -->
**Uses $FOO** from `a.sh` and `b.sh`, plus `$BAR`from`c.sh`, before anything else runs here.

<!-- Prettier 3.9.9 -->
**Uses $FOO** from `a.sh` and `b.sh`, plus `$BAR` from `c.sh`, before anything else runs here.
```


## [v3.9.8](prettier/prettier@3.9.7...bd676aa)



## [v3.9.7](https://github.com/prettier/prettier/releases/tag/3.9.7)

- Support Angular 22.2
- Fix regressions in v3.9

🔗 [Changelog](https://github.com/prettier/prettier/blob/3.9.7/CHANGELOG.md#397)


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Oct 4, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.9 |


## [v3.9.9](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#399)

[diff](prettier/prettier@3.9.8...3.9.9)

##### Markdown: Fix text with `$` been incorrectly parsed as math syntax ([#20140](prettier/prettier#20140) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```md
<!-- Input -->
**Uses $FOO** from `a.sh` and `b.sh`, plus `$BAR` from `c.sh`, before anything else runs here.

<!-- Prettier 3.9.8 -->
**Uses $FOO** from `a.sh` and `b.sh`, plus `$BAR`from`c.sh`, before anything else runs here.

<!-- Prettier 3.9.9 -->
**Uses $FOO** from `a.sh` and `b.sh`, plus `$BAR` from `c.sh`, before anything else runs here.
```


## [v3.9.8](prettier/prettier@3.9.7...bd676aa)



## [v3.9.7](https://github.com/prettier/prettier/releases/tag/3.9.7)

- Support Angular 22.2
- Fix regressions in v3.9

🔗 [Changelog](https://github.com/prettier/prettier/blob/3.9.7/CHANGELOG.md#397)


## [v3.9.6](prettier/prettier@3.9.5...bd676aa)



## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Oct 6, 2026
| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.9.4 | 3.9.9 |


## [v3.9.9](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#399)

[diff](prettier/prettier@3.9.8...3.9.9)

##### Markdown: Fix text with `$` been incorrectly parsed as math syntax ([#20140](prettier/prettier#20140) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```md
<!-- Input -->
**Uses $FOO** from `a.sh` and `b.sh`, plus `$BAR` from `c.sh`, before anything else runs here.

<!-- Prettier 3.9.8 -->
**Uses $FOO** from `a.sh` and `b.sh`, plus `$BAR`from`c.sh`, before anything else runs here.

<!-- Prettier 3.9.9 -->
**Uses $FOO** from `a.sh` and `b.sh`, plus `$BAR` from `c.sh`, before anything else runs here.
```


## [v3.9.8](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#398)

[diff](prettier/prettier@3.9.7...3.9.8)

##### Markdown: Don't let Liquid objects interrupt paragraphs ([#20087](prettier/prettier#20087) by [@seiyab](https://github.com/seiyab))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
If `module` is not a [`WebAssembly.Module`](/en-US/docs/WebAssembly/Reference/JavaScript_interface/Module) object instance, a
{{jsxref("TypeError")}} is thrown.

<!-- Prettier 3.9.7 -->
If `module` is not a [`WebAssembly.Module`](/en-US/docs/WebAssembly/Reference/JavaScript_interface/Module) object instance, a

{{jsxref("TypeError")}} is thrown.

<!-- Prettier 3.9.8 -->
If `module` is not a [`WebAssembly.Module`](/en-US/docs/WebAssembly/Reference/JavaScript_interface/Module) object instance, a
{{jsxref("TypeError")}} is thrown.
```


## [v3.9.7](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#397)

[diff](prettier/prettier@3.9.6...3.9.7)

##### Markdown: Prevent indentation drift in list-item code blocks ([#19647](prettier/prettier#19647), [#19990](prettier/prettier#19990) by [@Austin1serb](https://github.com/Austin1serb), [@giaBaoJS](https://github.com/giaBaoJS))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
- [x] short first line.

      second paragraph at six spaces that wraps
      onto another line here.

<!-- Prettier 3.9.6 -->
- [x] short first line.

      second paragraph at six spaces that wraps
          onto another line here.

<!-- Prettier 3.9.7 -->
- [x] short first line.

      second paragraph at six spaces that wraps
      onto another line here.
```

##### JavaScript: Fix embedded template literal idempotency ([#19725](prettier/prettier#19725) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
const foo = html`
            <div>${getText({
            value,
            })}</div>
`;

// Prettier 3.9.6 (first format)
const foo = html`
  <div>
    ${getText({
              value,
            })}
  </div>
`;

// Prettier 3.9.6 (second format)
const foo = html`
  <div>
    ${getText({
      value,
    })}
  </div>
`;

// Prettier 3.9.7
const foo = html`
  <div>
    ${getText({
      value,
    })}
  </div>
`;
```

##### Markdown: Preserve Liquid blocks after Markdown tables ([#19730](prettier/prettier#19730) by [@wanxiankai](https://github.com/wanxiankai), [@seiyab](https://github.com/seiyab))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
| Argument | Type |
| -------- | ---- |
{% set default_params = {
    "model": ["str"],
} %}

<!-- Prettier 3.9.6 -->
| Argument                  | Type |
| ------------------------- | ---- |
| {% set default_params = { |

    "model": ["str"],

} %}

<!-- Prettier 3.9.7 -->
| Argument | Type |
| -------- | ---- |
{% set default_params = {
    "model": ["str"],
} %}
```

##### Markdown: Preserve single tildes in Markdown ([#19739](prettier/prettier#19739) by [@lazerg](https://github.com/lazerg))

Since 3.9.0, single-tilde spans like `H~2~O` were rewritten to double tildes, turning subscript syntax into strike-through. Only double tildes are treated that way now, matching GitHub.

<!-- prettier-ignore -->

```markdown
<!-- Input -->
H~2~O

<!-- Prettier 3.9.6 -->
H~~2~~O

<!-- Prettier 3.9.7 -->
H~2~O
```

##### Markdown: Fix Markdown blockquote containing `>` characters ([#19802](prettier/prettier#19802) by [@seiyab](https://github.com/seiyab))

<!-- prettier-ignore -->

```md
<!-- Input -->
> **test**\>

<!-- Prettier 3.9.6 -->
> **test**>\>

<!-- Prettier 3.9.7 -->
> **test**\>
```

##### Markdown: Strip blockquote markers from a setext heading's continuation lines ([#19878](prettier/prettier#19878) by [@Kjubikstronk](https://github.com/Kjubikstronk))

A setext heading spanning multiple lines inside a blockquote kept the `>` marker of its continuation lines as literal text.

<!-- prettier-ignore -->

```md
<!-- Input -->
> Multi
> Line
> ===

<!-- Prettier 3.9.6 -->
> Multi > Line
> ===

<!-- Prettier 3.9.7 -->
> Multi
> Line
> ===
```

##### Markdown: Fix HTML block indentation drift in markdown list items ([#19987](prettier/prettier#19987) by [@lazerg](https://github.com/lazerg))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
1. Enable images:

    <p align="center">
      <img alt="example">
    </p>

<!-- Prettier 3.9.6 (--tab-width=4) -->
1. Enable images:

     <p align="center">
       <img alt="example">
     </p>

<!-- Prettier 3.9.7 (--tab-width=4) -->
1. Enable images:

    <p align="center">
      <img alt="example">
    </p>
```

##### Angular: Support `@boundary` error boundaries ([#20014](prettier/prettier#20014) by [@Yahiro025](https://github.com/Yahiro025))

<!-- prettier-ignore -->

```html
<!-- Input -->
@boundary {
<complex-chart [data]="data"/>
}
@error (let err) {
<p>{{err.message}}</p>
}

<!-- Prettier 3.9.6 -->
SyntaxError: Unexpected character "EOF" (Do you have an unescaped "{" in your template? Use "{{ '{' }}") to escape it.) (6:1)

<!-- Prettier 3.9.7 -->
@boundary {
  <complex-chart [data]="data" />
} @error (let err) {
  <p>{{ err.message }}</p>
}
```


## [v3.9.6](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#396)

[diff](prettier/prettier@3.9.5...3.9.6)

##### TypeScript: Preserve quotes for methods named `new` ([#19621](prettier/prettier#19621) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```tsx
// Input
interface Container {
  "new"(id: string): number;
}

// Prettier 3.9.5
interface Container {
  new(id: string): number;
}

// Prettier 3.9.6
interface Container {
  "new"(id: string): number;
}
```

##### TypeScript: Support `import defer` ([#19624](prettier/prettier#19624), [#19675](prettier/prettier#19675) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
import defer * as foo from "foo";

// Prettier 3.9.5
import * as foo from "foo";

// Prettier 3.9.6
import defer * as foo from "foo";
```

##### JavaScript: Added a new official plugin `@prettier/plugin-yuku` ([#19628](prettier/prettier#19628), [#19629](prettier/prettier#19629) by [@fisker](https://github.com/fisker))

`@prettier/plugin-yuku` is powered by [Yuku](https://yuku.fyi/) (A high-performance JavaScript/TypeScript compiler toolchain written in Zig).

This plugin includes two new parsers: `yuku` (JavaScript syntax) and `yuku-ts` (TypeScript syntax).

**To use this plugin:**

1. Install the plugin:

   ```bash
   yarn add --dev prettier @prettier/plugin-yuku
   ```

2. Add it to your `.prettierrc`:

   ```yaml
   plugins:
     - "@prettier/plugin-yuku"
   ```

Due to package size limitations, this plugin is not bundled with the main prettier package and must be installed separately.

For more information, check [the package homepage](https://github.com/prettier/prettier/tree/main/packages/plugin-yuku).

Big thanks to [@arshad-yaseen](https://github.com/arshad-yaseen) for his excellent work.


## [v3.9.5](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#395)

[diff](prettier/prettier@3.9.4...3.9.5)

##### Markdown: Cap ordered list mark at 999,999,999 ([#19351](prettier/prettier#19351) by [@tats-u](https://github.com/tats-u))

CommonMark parsers only support ordered list item numbers up to 999,999,999.

With this change, Prettier now caps the ordered list item number at 999,999,999 to ensure that the output is correctly parsed as an ordered list by CommonMark parsers. Numbers larger than 999,999,999 are not parsed as list item numbers and are left unchanged in the output:

<!-- prettier-ignore -->

```markdown
<!-- Input -->
999999998. text
999999998. text
999999998. text
999999998. text

1234567890123456789012) text

<!-- Prettier 3.9.4 -->
999999998. text
999999999. text
1000000000. text
1000000001. text

1234567890123456789012) text

<!-- Prettier 3.9.5 -->
999999998. text
999999999. text
999999999. text
999999999. text

1234567890123456789012) text
```

##### Markdown: Avoid corrupting empty link with title ([#19487](prettier/prettier#19487) by [@andersk](https://github.com/andersk))

Do not remove `<>` from an inline link or image with an empty URL and a title, as this removal would change its interpretation.

<!-- prettier-ignore -->

```md
<!-- Input -->
[link](<> "title")

<!-- Prettier 3.9.4 -->
[link]( "title")

<!-- Prettier 3.9.5 -->
[link](<> "title")
```

##### Less: Remove extra spaces after `[` in map lookups ([#19503](prettier/prettier#19503) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
.foo {
  color: #theme[ primary];
  color: #theme[@name];
  color: #theme[@@name];
}

// Prettier 3.9.4
.foo {
  color: #theme[ primary];
  color: #theme[ @name];
  color: #theme[ @@name];
}

// Prettier 3.9.5
.foo {
  color: #theme[primary];
  color: #theme[@name];
  color: #theme[@@name];
}
```

##### CSS: Prevent addition space in `type()` with `+` ([#19516](prettier/prettier#19516) by [@bigandy](https://github.com/bigandy))

This fixes the addition space before `+` in CSS `type()` declaration. For example `type(<number>+)` was being converted into `type(<number> +)` which is invalid CSS and does not work.

<!-- prettier-ignore -->

```css
/* Input */
div {
  border-radius: attr(br type(<length>+));
}

/* Prettier 3.9.4 */
div {
  border-radius: attr(br type(<length> +));
}

/* Prettier 3.9.5 */
div {
  border-radius: attr(br type(<length>+));
}
```

##### Less: Remove spaces between merge markers and colons ([#19517](prettier/prettier#19517) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
a {
  box-shadow  +  : 0 0 1px #000;
}

// Prettier 3.9.4
a {
  box-shadow+  : 0 0 1px #000;
}

// Prettier 3.9.5
a {
  box-shadow+: 0 0 1px #000;
}
```

##### Markdown: Preserve wiki links with aliases ([#19527](prettier/prettier#19527) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```markdown
<!-- Input -->
[[Foo:Bar]]

<!-- Prettier 3.9.4 -->
[[Foo]]

<!-- Prettier 3.9.5 -->
[[Foo:Bar]]
```

##### TypeScript: Fix comments being dropped on shorthand `type` import/export specifiers ([#19565](prettier/prettier#19565) by [@kirkwaiblinger](https://github.com/kirkwaiblinger))

<!-- prettier-ignore -->

```tsx
// Input
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";

// Prettier 3.9.4
Error: Comment "comment" was not printed. Please report this error!

// Prettier 3.9.5
export { type /* comment */ T } from "foo";
import { type /* comment */ T } from "foo";
```

##### Miscellaneous: Preserving comments' `placement` property ([#19567](prettier/prettier#19567) by [@Janther](https://github.com/Janther))

Prettier\@3.9.0 deleted an undocumented property on comments, which was already used by plugins, `comment.placement` is now available again after comment attach.

##### Flow: Stop enforcing empty module declaration to break ([#19568](prettier/prettier#19568) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```flow
// Input
declare module "foo" {}

// Prettier 3.9.4
declare module "foo" {
}

// Prettier 3.9.5
declare module "foo" {}
```

##### Angular: Support expression for exhaustive typechecking ([#19571](prettier/prettier#19571) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```html
<!-- Input -->
@switch (state.mode) {
  @default never(state);
}

<!-- Prettier 3.9.4 -->
@switch (state.mode) {
  @default never;
}

<!-- Prettier 3.9.5 -->
@switch (state.mode) {
  @default never(state);
}
```

##### TypeScript: Ignore comments inside mapped type when checking type parameter comments ([#19572](prettier/prettier#19572) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
foo<{
  // comment
  [key in keyof Foo]: number
}>();

// Prettier 3.9.4
foo<
  {
    // comment
    [key in keyof Foo]: number;
  }
>();

// Prettier 3.9.5
foo<{
  // comment
  [key in keyof Foo]: number;
}>();
```

##### Less: Fix adjacent block comments being corrupted ([#19574](prettier/prettier#19574) by [@kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```less
// Input
/* a *//* b */
/* a */* {
  color: red;
}

// Prettier 3.9.4
/* a */
/* b */
/* a * {
  color: red;
}

// Prettier 3.9.5
/* a */ /* b */
/* a */
* {
  color: red;
}
```

##### JavaScript: Handle dangling comments in `SwitchStatement` ([#19581](prettier/prettier#19581) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
switch (foo) {
 // comment
}

// Prettier 3.9.4
switch (
  foo
  // comment
) {
}

// Prettier 3.9.5
switch (foo) {
  // comment
}
```

##### TypeScript: Remove space in comment-only object type ([#19583](prettier/prettier#19583) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
var foo = {
  /* comment */
};
type Foo = {
  /* comment */
};

// Prettier 3.9.4
var foo = {/* comment */};
type Foo = { /* comment */ };

// Prettier 3.9.5
var foo = {/* comment */};
type Foo = {/* comment */};
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

prettier errors on comment in export declaration

2 participants