@biomejs/biome@2.4.16

blackboardsh/electrobun@biomejs/biome@2.4.16May 27, 2026by github-actions[bot]

AI Summary

A patch release for Biome CLI fixing various formatting and linting issues across Astro, HTML, Vue, Svelte, and configuration parsing.

Key Highlights

  • Fixed diagnostics location in Astro files
  • Fixed HTML formatting where comments could split closing tags
  • Added support for `formatter.trailingCommas` in overrides
  • Improved Vue and Svelte formatting for standalone interpolations

New Features

  • Support for `formatter.trailingCommas` in overrides
  • Support for SCSS `@include ... using` clauses

Full Release Notes

## 2.4.16

### Patch Changes

- [#10329](https://github.com/biomejs/biome/pull/10329) [`ef764d5`](https://github.com/biomejs/biome/commit/ef764d51b9f5be18ec5a4f9b4dce732512e5d805) Thanks [@Conaclos](https://github.com/Conaclos)! - Fixed an issue where diagnostics showed an incorrect location in Astro files.

- [#10363](https://github.com/biomejs/biome/pull/10363) [`50aa415`](https://github.com/biomejs/biome/commit/50aa4157599a1ac5c77c13bce81f5c87240beff0) Thanks [@dyc3](https://github.com/dyc3)! - Fixed HTML formatting for a case where comments could cause the formatter to split up a closing tag, which would cause the resulting HTML to be syntactically invalid.

  Input:

  ```html
  <span
    ><!-- 1
  --><span>a</span
    ><!-- 2
  --><span>b</span
    ><!-- 3
  --></span>
  ```

  Output:

  ```diff
    <span
  	  ><!-- 1
  - --> <span>a</span<!-- 2
  - --> ><span>b</span><!-- 3
  + --><span>a</span><!-- 2
  + --><span>b</span><!-- 3
    --></span
    >
  ```

- [#10465](https://github.com/biomejs/biome/pull/10465) [`0c718da`](https://github.com/biomejs/biome/commit/0c718da81770f47d65845bc1a006f99512d9359b) Thanks [@dfedoryshchev](https://github.com/dfedoryshchev)! - Fixed diagnostics emitted by the `noUntrustedLicenses` rule.

- [#10358](https://github.com/biomejs/biome/pull/10358) [`05c2617`](https://github.com/biomejs/biome/commit/05c26176573534a0abfa92d454d244f9569bc77d) Thanks [@dyc3](https://github.com/dyc3)! - Fixed [#10356](https://github.com/biomejs/biome/issues/10356): `biome rage --linter` now displays rules enabled through linter domains in the enabled rules list.

- [#10300](https://github.com/biomejs/biome/pull/10300) [`950247c`](https://github.com/biomejs/biome/commit/950247c389e693c16b47d61d8ef0f1b85d1a1b02) Thanks [@dyc3](https://github.com/dyc3)! - Fixed [#10265](https://github.com/biomejs/biome/issues/10265): Svelte function bindings such as `bind:value={get, set}` are now parsed more precisely, so [`noCommaOperator`](https://biomejs.dev/linter/rules/no-comma-operator/) won't emit false positives for that syntax anymore.

- [#9786](https://github.com/biomejs/biome/pull/9786) [`e71f584`](https://github.com/biomejs/biome/commit/e71f58490f3121432d1bc24ae5330ecf96391a40) Thanks [@MeGaNeKoS](https://github.com/MeGaNeKoS)! - Fixed [#8480](https://github.com/biomejs/biome/issues/8480): [`useDestructuring`](https://biomejs.dev/linter/rules/use-destructuring/) now provides `variableDeclarator` and `assignmentExpression` options to control which contexts enforce destructuring, matching ESLint's `prefer-destructuring` configuration. Both default to `{array: true, object: true}`. The diagnostic for object destructuring in assignment expressions now instructs users to wrap the assignment in parentheses.

- [#10425](https://github.com/biomejs/biome/pull/10425) [`1948b72`](https://github.com/biomejs/biome/commit/1948b7242e092ed0cfcf501ef6f119202b8ea93b) Thanks [@sjh9714](https://github.com/sjh9714)! - Fixed [#10244](https://github.com/biomejs/biome/issues/10244): The `useOptionalChain` rule now detects negated guard inequality chains like `!foo || foo.bar !== "x"`.

- [#10442](https://github.com/biomejs/biome/pull/10442) [`001f94f`](https://github.com/biomejs/biome/commit/001f94f696d9baca3c231d39895a01d4dd528d52) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#10411](https://github.com/biomejs/biome/issues/10411): [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/) no longer causes a stack overflow when a nested function returns an object with shorthand properties that shadow destructured variables from an outer scope.

- [#10318](https://github.com/biomejs/biome/pull/10318) [`9b1577f`](https://github.com/biomejs/biome/commit/9b1577fa400279d9b0222cbc920cfa9ddcf1c9d6) Thanks [@dyc3](https://github.com/dyc3)! - Added support for `formatter.trailingCommas` in overrides. This option was previously available in the top-level formatter configuration but missing from formatter overrides.

- [#10319](https://github.com/biomejs/biome/pull/10319) [`2e37709`](https://github.com/biomejs/biome/commit/2e3770923f9fb4e33606113e726014f7b63730d0) Thanks [@dyc3](https://github.com/dyc3)! - Fixed Vue and Svelte formatting for standalone interpolations in inline elements. Biome now preserves existing newlines in cases like:

  ```diff
  - <span> {{ value }} </span>
  + <span>
  +   {{ value }}
  + </span>
  ```

- [#10365](https://github.com/biomejs/biome/pull/10365) [`0a58eb0`](https://github.com/biomejs/biome/commit/0a58eb0982460b757a26f94d958a7e40c0686227) Thanks [@Netail](https://github.com/Netail)! - Fixed [#10361](https://github.com/biomejs/biome/issues/10361): [`noUnusedFunctionParameters`](https://biomejs.dev/linter/rules/no-unused-function-parameters/) now mentions the parameter name in the diagnostic.

- [#10439](https://github.com/biomejs/biome/pull/10439) [`df6b867`](https://github.com/biomejs/biome/commit/df6b867bb6fd210cc75ac03d832e7281eced5b61) Thanks [@denbezrukov](https://github.com/denbezrukov)! - Fixed CSS and SCSS formatting for comments around declaration colons so comments between property names, colons, and values stay at the same boundary as Prettier.

  ```diff
   .selector {
  -  color: /* red, */
  -    blue;
  +  color: /* red, */ blue;
   }
  ```

- [#10344](https://github.com/biomejs/biome/pull/10344) [`b30208c`](https://github.com/biomejs/biome/commit/b30208c06365907d6fb376f030bc75bbf5e3dea9) Thanks [@siketyan](https://github.com/siketyan)! - Fixed [`#10123`](https://github.com/biomejs/biome/issues/10123): Corrected the [`noReactNativeDeepImports`](https://biomejs.dev/linter/rules/no-react-native-deep-imports/) source rule to point to the proper upstream rule, so users can migrate from the original rule correctly.

- [#10328](https://github.com/biomejs/biome/pull/10328) [`b59133f`](https://github.com/biomejs/biome/commit/b59133fd2a8afa33564914df531f7f752b48ecee) Thanks [@dyc3](https://github.com/dyc3)! - Fixed [#10309](https://github.com/biomejs/biome/issues/10309): Biome no longer adds newlines to Astro frontmatter when linter or assist `--write` mode is enabled.



## What's Changed
* fix(format/html/vue): preserve newlines around standalone interpolations by @dyc3 in https://github.com/biomejs/biome/pull/10319
* refactor(css_parser): remove `allow_css_ratio` from SCSS expression parsing functions by @denbezrukov in https://github.com/biomejs/biome/pull/10325
* fix(astro): display diagnostic advices with the correct location by @Conaclos in https://github.com/biomejs/biome/pull/10329
* fix: trim astro frontmatter content before processing it by @dyc3 in https://github.com/biomejs/biome/pull/10328
* fix(config): support trailingCommas in overrides by @dyc3 in https://github.com/biomejs/biome/pull/10318
* chore(deps): update rust:1.95.0-bullseye docker digest to b26cecc by @renovate[bot] in https://github.com/biomejs/biome/pull/10334
* chore(deps): update rust:1.95.0-trixie docker digest to 5b1e348 by @renovate[bot] in https://github.com/biomejs/biome/pull/10335
* chore(deps): update dependency @types/node to v24.12.3 by @renovate[bot] in https://github.com/biomejs/biome/pull/10336
* chore(deps): update dependency tombi to v0.10.6 by @renovate[bot] in https://github.com/biomejs/biome/pull/10337
* feat(css_parser): support for SCSS `@include ... using` clauses by @denbezrukov in https://github.com/biomejs/biome/pull/10327
* chore(deps): update github-actions by @renovate[bot] in https://github.com/biomejs/biome/pull/10338
* chore(deps): update pnpm to v10.33.4 by @renovate[bot] in https://github.com/biomejs/biome/pull/10339
* chore(deps): update rust crate filetime to 0.2.28 by @renovate[bot] in https://github.com/biomejs/biome/pull/10340
* chore(deps): update dependency @changesets/changelog-github to v0.7.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/10342
* feat(parse/tailwind): differentiate between number and non-number values by @dyc3 in https://github.com/biomejs/biome/pull/10332
* chore(deps): update rust crate rayon to 1.12.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/10343
* fix(markdown_parser): parse tab-indented siblings by @jfmcdowell in https://github.com/biomejs/biome/pull/10333
* fix(lint/js): correct the rule source of `noReactNativeDeepImports` by @siketyan in https://github.com/biomejs/biome/pull/10344
* fix(markdown_parser): column-aware tab handling around block containers by @jfmcdowell in https://github.com/biomejs/biome/pull/10345
* chore: update pnpm to the lateset by @ematipico in https://github.com/biomejs/biome/pull/10348
* chore: fix renovate config by @dyc3 in https://github.com/biomejs/biome/pull/10352
* feat(css_parser): support SCSS interpolated selector  by @denbezrukov in https://github.com/biomejs/biome/pull/10351
* feat(useDestructuring): add options for assignment/declaration and improve diagnostic for bare object assignments by @MeGaNeKoS in https://github.com/biomejs/biome/pull/9786
* chore: remove benchmark from repository by @ematipico in https://github.com/biomejs/biome/pull/10355
* fix(rage): print rules enabled by domains by @dyc3 in https://github.com/biomejs/biome/pull/10358
* feat(css): support SCSS interpolation in attribute selectors by @denbezrukov in https://github.com/biomejs/biome/pull/10357
* fix(js_analyze): noUnusedFunctionParameters mention parameter name by @Netail in https://github.com/biomejs/biome/pull/10365
* feat(parse/html): parse svelte function bindings more precisely by @dyc3 in https://github.com/biomejs/biome/pull/10300
* feat(css_formatter): add support for formatting SCSS keyframes selectors by @denbezrukov in https://github.com/biomejs/biome/pull/10362
* fix: yaml linting panic fixes by @jjroush in https://github.com/biomejs/biome/pull/10287
* feat(css_parser): add support for SCSS interpolated dashed identifiers and properties by @denbezrukov in https://github.com/biomejs/biome/pull/10367
* fix(markdown_parser): handle ordered sublist continuation by @jfmcdowell in https://github.com/biomejs/biome/pull/10349
* docs: fix duplicate-word typos in code comments by @dfedoryshchev in https://github.com/biomejs/biome/pull/10371
* test(markdown_parser): add CST list invariants by @jfmcdowell in https://github.com/biomejs/biome/pull/10369
* chore: yaml formatting infra by @ematipico in https://github.com/biomejs/biome/pull/10366
* chore(goverance): cover expenses for representing Biome at a conference by @Conaclos in https://github.com/biomejs/biome/pull/10246
* docs: clarify vcs.root description by @Dotify71 in https://github.com/biomejs/biome/pull/10379
* Revert "docs: clarify vcs.root description" by @ematipico in https://github.com/biomejs/biome/pull/10381
* feat(css_parser): add support for SCSS parent selectors by @denbezrukov in https://github.com/biomejs/biome/pull/10370
* fix(css_parser): parse CSS custom functions in SCSS by @denbezrukov in https://github.com/biomejs/biome/pull/10387
* feat(useSortedClasses): scaffold v4 parser-based sort module by @jiwon79 in https://github.com/biomejs/biome/pull/10291
* fix(css_parser): support semicolonless SCSS statement at-rules by @denbezrukov in https://github.com/biomejs/biome/pull/10389
* fix(format/html): fix case where comments cause invalid html by @dyc3 in https://github.com/biomejs/biome/pull/10363
* fix(markdown_parser): break paragraph at sibling list marker without tab by @jfmcdowell in https://github.com/biomejs/biome/pull/10376
* feat(css_formatter): preserve raw scss string interpolation by @denbezrukov in https://github.com/biomejs/biome/pull/10388
* fix(service): correct FileExistsParams typo by @yanthomasdev in https://github.com/biomejs/biome/pull/10399
* chore(deps): update rust crate bpaf to 0.9.26 by @renovate[bot] in https://github.com/biomejs/biome/pull/10403
* chore(deps): update rust crate filetime to 0.2.29 by @renovate[bot] in https://github.com/biomejs/biome/pull/10404
* chore(deps): update dependency tombi to v0.11.4 by @renovate[bot] in https://github.com/biomejs/biome/pull/10405
* chore(deps): update rust crate dashmap to 6.2.1 by @renovate[bot] in https://github.com/biomejs/biome/pull/10406
* chore: remove dashmap from project by @ematipico in https://github.com/biomejs/biome/pull/10407
* chore(deps): update dependency @types/node to v24.12.4 by @renovate[bot] in https://github.com/biomejs/biome/pull/10400
* chore(deps): update pnpm to v11.1.2 by @renovate[bot] in https://github.com/biomejs/biome/pull/10401
* fix(css_formatter): preserve scss identifier interpolation spacing by @denbezrukov in https://github.com/biomejs/biome/pull/10398
* chore(format/html): fix unused code warnings in release builds by @dyc3 in https://github.com/biomejs/biome/pull/10412
* chore(service): make grit opt-in by @ematipico in https://github.com/biomejs/biome/pull/10410
* feat(css_formatter): preserve source-tight scss binary edges by @denbezrukov in https://github.com/biomejs/biome/pull/10413
* refactor: make yaml, md and graphql gated via rust features by @ematipico in https://github.com/biomejs/biome/pull/10416
* feat(css_parser): add support for parsing and formatting unknown SCSS/CSS at-rules by @denbezrukov in https://github.com/biomejs/biome/pull/10397
* refactor: make plugins opt-in via feature gate by @ematipico in https://github.com/biomejs/biome/pull/10418
* feat(css_formatter): align SCSS map pair value layout by @denbezrukov in https://github.com/biomejs/biome/pull/10417
* fix: incorrect build when using build or test by @ematipico in https://github.com/biomejs/biome/pull/10426
* ci: agent scan, zizmor and reduce permissions by @ematipico in https://github.com/biomejs/biome/pull/10428
* ci: remove checkout step from agentscan workflow by @MatteoGabriele in https://github.com/biomejs/biome/pull/10429
* fix(css_parser): classify interpolated query feature ranges correctly by @denbezrukov in https://github.com/biomejs/biome/pull/10421
* docs: remove outdated Caveats section in `useImportExtensions` by @Dotify71 in https://github.com/biomejs/biome/pull/10431
* docs: remove redundant default phrase in `useConsistentObjectDefinitions` rule by @Dotify71 in https://github.com/biomejs/biome/pull/10430
* fix(css_formatter): preserve blank lines between SCSS map pairs by @denbezrukov in https://github.com/biomejs/biome/pull/10427
* ci: fix preview releases by @dyc3 in https://github.com/biomejs/biome/pull/10436
* fix(useSortedClasses): sort Tailwind v4 arbitrary values by @jiwon79 in https://github.com/biomejs/biome/pull/10414
* fix(css_parser): improve diagnostics for missing attribute names and empty selectors in SCSS by @denbezrukov in https://github.com/biomejs/biome/pull/10437
* ci: remove corepack by @ematipico in https://github.com/biomejs/biome/pull/10440
* fix(css_formatter): improve comment handling in generic CSS properties by @denbezrukov in https://github.com/biomejs/biome/pull/10439
* fix(css_formatter): align commented SCSS map value layout by @denbezrukov in https://github.com/biomejs/biome/pull/10445
* fix(css_formatter): handle control variable maps in SCSS map expressions by @denbezrukov in https://github.com/biomejs/biome/pull/10446
* fix(inference): pass correct scope on return statements by @ematipico in https://github.com/biomejs/biome/pull/10442
* feat(css_parser): parse interpolated scss nested properties by @denbezrukov in https://github.com/biomejs/biome/pull/10455
* chore(deps): update rust:1.95.0-bullseye docker digest to 28afaeb by @renovate[bot] in https://github.com/biomejs/biome/pull/10457
* fix(test): leaky CLI tests by @ematipico in https://github.com/biomejs/biome/pull/10463
* fix(css_formatter): align SCSS map comment trailing commas by @denbezrukov in https://github.com/biomejs/biome/pull/10449
* fix(markdown_parser): keep list blank-line separators inside the preceding item by @jfmcdowell in https://github.com/biomejs/biome/pull/10466
* chore(deps): update rust crate jiff to 0.2.27 by @renovate[bot] in https://github.com/biomejs/biome/pull/10459
* docs: fix duplicate "from" in noUntrustedLicenses diagnostic by @dfedoryshchev in https://github.com/biomejs/biome/pull/10465
* fix(lint): detect optional-chain inequality guards by @sjh9714 in https://github.com/biomejs/biome/pull/10425
* chore(deps): update dependency tombi to v0.11.7 by @renovate[bot] in https://github.com/biomejs/biome/pull/10458
* fix(core): regression in emitted types by @ematipico in https://github.com/biomejs/biome/pull/10478
* fix(parser/yaml): correctly lex and parse alias as mapping key by @siketyan in https://github.com/biomejs/biome/pull/10472
* fix(markdown_parser): terminate fenced code blocks at list-item boundaries by @jfmcdowell in https://github.com/biomejs/biome/pull/10471
* ci: release by @github-actions[bot] in https://github.com/biomejs/biome/pull/10326

## New Contributors
* @jjroush made their first contribution in https://github.com/biomejs/biome/pull/10287
* @Dotify71 made their first contribution in https://github.com/biomejs/biome/pull/10379
* @MatteoGabriele made their first contribution in https://github.com/biomejs/biome/pull/10429
* @sjh9714 made their first contribution in https://github.com/biomejs/biome/pull/10425

**Full Changelog**: https://github.com/biomejs/biome/compare/@biomejs/biome@2.4.15...@biomejs/biome@2.4.16