Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Prevent trailing comma for scss if-function syntax#18471

Merged
fisker merged 4 commits into
prettier:mainprettier/prettier:mainfrom
kovsu:fix-#18465kovsu/prettier:fix-#18465Copy head branch name to clipboard
Dec 16, 2025
Merged

Prevent trailing comma for scss if-function syntax#18471
fisker merged 4 commits into
prettier:mainprettier/prettier:mainfrom
kovsu:fix-#18465kovsu/prettier:fix-#18465Copy head branch name to clipboard

Conversation

@kovsu

@kovsu kovsu commented Dec 11, 2025

Copy link
Copy Markdown
Collaborator

Description

fix: #18465

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.

@pkg-pr-new

pkg-pr-new Bot commented Dec 11, 2025

Copy link
Copy Markdown

Open in StackBlitz

yarn add https://pkg.pr.new/@prettier/plugin-hermes@18471.tgz
yarn add https://pkg.pr.new/@prettier/plugin-oxc@18471.tgz
yarn add https://pkg.pr.new/prettier@18471.tgz

commit: 22d9b55

@netlify

netlify Bot commented Dec 11, 2025

Copy link
Copy Markdown

Deploy Preview for prettier ready!

Name Link
🔨 Latest commit 461abe1
🔍 Latest deploy log https://app.netlify.com/projects/prettier/deploys/6940a9980f52e600070d713c
😎 Deploy Preview https://deploy-preview-18471--prettier.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

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

@fisker
fisker merged commit f3c5c4e into prettier:main Dec 16, 2025
16 of 17 checks passed
@kovsu
kovsu deleted the fix-#18465 branch December 16, 2025 00:43
@conblem

conblem commented Apr 14, 2026

Copy link
Copy Markdown

When can we expect a release of this? There have been several new releases since this was merged.

fisker added a commit that referenced this pull request Apr 15, 2026
Co-authored-by: fisker Cheung <lionkay@gmail.com>
@fisker

fisker commented Apr 15, 2026

Copy link
Copy Markdown
Member

Released v3.8.3 with this change. https://github.com/prettier/prettier/releases/tag/3.8.3

sys-support pushed a commit to 3caravelle/renovate that referenced this pull request Apr 15, 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.8.2` → `3.8.3`](https://renovatebot.com/diffs/npm/prettier/3.8.2/3.8.3) | ![age](https://developer.mend.io/api/mc/badges/age/npm/prettier/3.8.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/prettier/3.8.2/3.8.3?slim=true) |

---

### Release Notes

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

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

[Compare Source](prettier/prettier@3.8.2...3.8.3)

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

##### SCSS: Prevent trailing comma in `if()` function ([#&#8203;18471](prettier/prettier#18471) by [@&#8203;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);
```

</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/27
Co-authored-by: Renovate Bot <renovate-bot@3caravelle.com>
Co-committed-by: Renovate Bot <renovate-bot@3caravelle.com>
apricote pushed a commit to hetznercloud/fleeting-plugin-hetzner that referenced this pull request Apr 15, 2026
…fleeting-plugin-hetzner!365)

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.8.2` → `3.8.3` | ![age](https://developer.mend.io/api/mc/badges/age/npm/prettier/3.8.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/prettier/3.8.2/3.8.3?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.8.3`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#383)

[Compare Source](prettier/prettier@3.8.2...3.8.3)

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

##### SCSS: Prevent trailing comma in `if()` function ([#&#8203;18471](prettier/prettier#18471) by [@&#8203;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);
```

</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 [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMjAuMiIsInVwZGF0ZWRJblZlciI6IjQzLjEyMC4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
robbevp pushed a commit to robbevp/website-robbevanpetegem that referenced this pull request Apr 18, 2026
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [eslint](https://eslint.org) ([source](https://github.com/eslint/eslint)) | devDependencies | patch | [`9.39.3` -> `9.39.4`](https://renovatebot.com/diffs/npm/eslint/9.39.3/9.39.4) |
| [prettier](https://prettier.io) ([source](https://github.com/prettier/prettier)) | devDependencies | patch | [`3.8.1` -> `3.8.3`](https://renovatebot.com/diffs/npm/prettier/3.8.1/3.8.3) |
| [stylelint](https://stylelint.io) ([source](https://github.com/stylelint/stylelint)) | devDependencies | minor | [`17.4.0` -> `17.8.0`](https://renovatebot.com/diffs/npm/stylelint/17.4.0/17.8.0) |

---

### Release Notes

<details>
<summary>eslint/eslint (eslint)</summary>

### [`v9.39.4`](https://github.com/eslint/eslint/releases/tag/v9.39.4)

[Compare Source](eslint/eslint@v9.39.3...v9.39.4)

#### Bug Fixes

- [`f18f6c8`](eslint/eslint@f18f6c8) fix: update dependency minimatch to ^3.1.5 ([#&#8203;20564](eslint/eslint#20564)) (Milos Djermanovic)
- [`a3c868f`](eslint/eslint@a3c868f) fix: update dependency [@&#8203;eslint/eslintrc](https://github.com/eslint/eslintrc) to ^3.3.4 ([#&#8203;20554](eslint/eslint#20554)) (Milos Djermanovic)
- [`234d005`](eslint/eslint@234d005) fix: minimatch security vulnerability patch for v9.x ([#&#8203;20549](eslint/eslint#20549)) (Andrej Beles)
- [`b1b37ee`](eslint/eslint@b1b37ee) fix: update `ajv` to `6.14.0` to address security vulnerabilities ([#&#8203;20538](eslint/eslint#20538)) (루밀LuMir)

#### Documentation

- [`4675152`](eslint/eslint@4675152) docs: add deprecation notice partial ([#&#8203;20520](eslint/eslint#20520)) (Milos Djermanovic)

#### Chores

- [`b8b4eb1`](eslint/eslint@b8b4eb1) chore: update dependencies for ESLint v9.39.4 ([#&#8203;20596](eslint/eslint#20596)) (Francesco Trotta)
- [`71b2f6b`](eslint/eslint@71b2f6b) chore: package.json update for [@&#8203;eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`1d16c2f`](eslint/eslint@1d16c2f) ci: pin Node.js 25.6.1 ([#&#8203;20563](eslint/eslint#20563)) (Milos Djermanovic)

</details>

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

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

[Compare Source](prettier/prettier@3.8.2...3.8.3)

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

##### SCSS: Prevent trailing comma in `if()` function ([#&#8203;18471](prettier/prettier#18471) by [@&#8203;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)

[Compare Source](prettier/prettier@3.8.1...3.8.2)

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

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

Exhaustive typechecking with `@default never;`

<!-- prettier-ignore -->

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

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

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

`arrow function` and `instanceof` expressions.

<!-- prettier-ignore -->

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

{{ fn ( a         instanceof b)}}

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

{{ fn ( a         instanceof b)}}

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

{{ fn(a instanceof b) }}
```

</details>

<details>
<summary>stylelint/stylelint (stylelint)</summary>

### [`v17.8.0`](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1780---2026-04-15)

[Compare Source](stylelint/stylelint@17.7.0...17.8.0)

It adds 3 new rules and 1 configuration property.

- Added: `languageOptions.directionality` configuration property ([#&#8203;8687](stylelint/stylelint#8687)) ([@&#8203;sw1tch3roo](https://github.com/sw1tch3roo)).
- Added: `property-layout-mappings` rule ([#&#8203;8687](stylelint/stylelint#8687)) ([@&#8203;sw1tch3roo](https://github.com/sw1tch3roo)).
- Added: `relative-selector-nesting-notation` rule ([#&#8203;8730](stylelint/stylelint#8730)) ([@&#8203;sw1tch3roo](https://github.com/sw1tch3roo)).
- Added: `selector-no-deprecated` rule ([#&#8203;8694](stylelint/stylelint#8694)) ([@&#8203;immitsu](https://github.com/immitsu)).

### [`v17.7.0`](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1770---2026-04-12)

[Compare Source](stylelint/stylelint@17.6.0...17.7.0)

It fixes 4 bugs, including clearer problem messages by removing filler words and leading with the problem. We've also released `1.0.0` of [create-stylelint](https://github.com/stylelint/create-stylelint) to help with first-time Stylelint setup.

- Fixed: clarity of problem messages ([#&#8203;9199](stylelint/stylelint#9199)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `--print-config` CLI flag to hide internal properties ([#&#8203;9194](stylelint/stylelint#9194)) ([@&#8203;ybiquitous](https://github.com/ybiquitous)).
- Fixed: `function-url-quotes` false positives when URLs have modifiers ([#&#8203;8702](stylelint/stylelint#8702)) ([@&#8203;immitsu](https://github.com/immitsu)).
- Fixed: `selector-no-qualifying-type` false positives for `:has()` ([#&#8203;9182](stylelint/stylelint#9182)) ([@&#8203;romainmenke](https://github.com/romainmenke)).

### [`v17.6.0`](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1760---2026-03-26)

[Compare Source](stylelint/stylelint@17.5.0...17.6.0)

It adds support for extending units in `languageOptions`, which then apply to rules like `declaration-property-value-no-unknown`, and fixes 2 bugs.

- Added: support for extending units to `languageOptions` ([#&#8203;9166](stylelint/stylelint#9166)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: missing `ruleMetadata` when linting multiple files with overrides ([#&#8203;9154](stylelint/stylelint#9154)) ([@&#8203;kovsu](https://github.com/kovsu)).
- Fixed: `custom-property-no-missing-var-function` false positives for `timeline-scope` and `animation-timeline` ([#&#8203;9164](stylelint/stylelint#9164)) ([@&#8203;splincode](https://github.com/splincode)).

### [`v17.5.0`](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1750---2026-03-19)

[Compare Source](stylelint/stylelint@17.4.0...17.5.0)

It deprecates two rule options, adds 1 rule option and fixes 7 bugs. We've also released [`2.1.0`](https://github.com/stylelint/vscode-stylelint/releases/tag/2.1.0) of [our VS Code extension](https://marketplace.visualstudio.com/items?itemName=stylelint.vscode-stylelint), which adds 8 new requested features, and our [first release](https://www.npmjs.com/package/@&#8203;stylelint/language-server) of the Stylelint Language Server.

- Deprecated: `*syntax` options from `declaration-property-value-no-unknown` ([#&#8203;9102](stylelint/stylelint#9102)) ([@&#8203;ragini-pandey](https://github.com/ragini-pandey)).
- Added: `ignoreMediaFeatureNameValues: {}` to `media-feature-name-value-no-unknown` ([#&#8203;8976](stylelint/stylelint#8976)) ([@&#8203;kovsu](https://github.com/kovsu)).
- Fixed: `node_modules` not ignored when using `codeFilename` in Node.js API ([#&#8203;9130](stylelint/stylelint#9130)) ([@&#8203;adalinesimonian](https://github.com/adalinesimonian)).
- Fixed: `Error TS7016` for imported `css-tree` types ([#&#8203;9133](stylelint/stylelint#9133)) ([@&#8203;ragini-pandey](https://github.com/ragini-pandey)).
- Fixed: `declaration-property-value-keyword-no-deprecated` false positives for function arguments ([#&#8203;9116](stylelint/stylelint#9116)) ([@&#8203;ragini-pandey](https://github.com/ragini-pandey)).
- Fixed: `declaration-property-value-no-unknown` false positives for `calc-size()` containing `size` keyword ([#&#8203;9105](stylelint/stylelint#9105)) ([@&#8203;hriztam](https://github.com/hriztam)).
- Fixed: `no-descending-specificity` & `no-duplicate-selectors` false negatives for equivalent compound selectors ([#&#8203;8977](stylelint/stylelint#8977)) ([@&#8203;kovsu](https://github.com/kovsu)).
- Fixed: `no-invalid-position-declaration` false positives for `@mixin` and `@scope` ([#&#8203;9120](stylelint/stylelint#9120)) ([@&#8203;ragini-pandey](https://github.com/ragini-pandey)).
- Fixed: `property-no-unknown` false negatives for `types` ([#&#8203;9117](stylelint/stylelint#9117)) ([@&#8203;Mouvedia](https://github.com/Mouvedia)).

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

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- 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:eyJjcmVhdGVkSW5WZXIiOiI0MS42MS4wIiwidXBkYXRlZEluVmVyIjoiNDEuNjEuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Reviewed-on: https://git.robbevp.be/robbevp/website-robbevanpetegem/pulls/508
Co-authored-by: Renovate Bot <renovate@robbevp.be>
Co-committed-by: Renovate Bot <renovate@robbevp.be>
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)
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 add comma break Scss "if" syntax logic

3 participants

Morty Proxy This is a proxified and sanitized view of the page, visit original site.