@biomejs/biome@2.4.11

biomejs/biome@biomejs/biome@2.4.11Apr 9, 2026by github-actions[bot]

AI Summary

This release adds new nursery rules for testing and general linting, improves the performance of `--write` operations, and fixes binding tracking issues in Svelte, Vue, and Astro files.

Key Highlights

  • Added `useConsistentTestIt` rule for test function consistency.
  • Added `useExplicitReturnType` rule for TypeScript functions.
  • Added `useDisposables` rule for `Disposable` objects.
  • Added `noMisleadingReturnType` rule for return type annotations.
  • Improved performance of `biome check --write` command.

New Features

  • Added `useConsistentTestIt` rule.
  • Added `useExplicitReturnType` rule.
  • Added `useDisposables` rule.
  • Added `noMisleadingReturnType` rule.

Full Release Notes

## 2.4.11

### Patch Changes

- [#9350](https://github.com/biomejs/biome/pull/9350) [`4af4a3a`](https://github.com/biomejs/biome/commit/4af4a3a9ca31a598e9836997b7811992eae53387) Thanks [@dyc3](https://github.com/dyc3)! - Added the new nursery rule [useConsistentTestIt](https://biomejs.dev/linter/rules/use-consistent-test-it/) in the `test` domain. The rule enforces consistent use of either `it` or `test` for test functions in Jest/Vitest suites, with separate control for top-level tests and tests inside `describe` blocks.

  Invalid:

  ```js
  test("should fly", () => {}); // Top-level test using 'test' flagged, convert to 'it'

  describe("pig", () => {
    test("should fly", () => {}); // Test inside 'describe' using 'test' flagged, convert to 'it'
  });
  ```

- [#9429](https://github.com/biomejs/biome/pull/9429) [`a2f3f7e`](https://github.com/biomejs/biome/commit/a2f3f7eb3a134ccc6851ed0eec19d1ff1636ec72) Thanks [@ematipico](https://github.com/ematipico)! - Added the new nursery lint rule [`useExplicitReturnType`](https://biomejs.dev/linter/rules/use-explicit-return-type). It reports TypeScript functions and methods that omit an explicit return type.

  ```ts
  function toString(x: any) {
    // rule triggered, it doesn't declare a return type
    return x.toString();
  }
  ```

- [#9828](https://github.com/biomejs/biome/pull/9828) [`9e40844`](https://github.com/biomejs/biome/commit/9e40844261cf7b8c573e340e11e3297ef08bcd60) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#9484](https://github.com/biomejs/biome/issues/9484): the formatter no longer panics when formatting files that contain `graphql` tagged template literals combined with parenthesized expressions.

- [#9886](https://github.com/biomejs/biome/pull/9886) [`e7c681e`](https://github.com/biomejs/biome/commit/e7c681ecbb6aed471c914167f5d067d327792f44) Thanks [@ematipico](https://github.com/ematipico)! - Fixed an issue where, occasionally, some bindings and references were not properly tracked, causing false positives from [`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/) and [`noUndeclaredVariables`](https://biomejs.dev/linter/rules/no-undeclared-variables/) in Svelte, Vue, and Astro files.

- [#9760](https://github.com/biomejs/biome/pull/9760) [`5b16d18`](https://github.com/biomejs/biome/commit/5b16d187ba63800f4b6ea5057d551ae3f2fbc68c) Thanks [@myx0m0p](https://github.com/myx0m0p)! - Fixed [#4093](https://github.com/biomejs/biome/issues/4093): the [`noDelete`](https://biomejs.dev/linter/rules/no-delete/) rule no longer triggers for `delete process.env.FOO`, since `delete` is the documented way to remove environment variables in Node.js.

- [#9799](https://github.com/biomejs/biome/pull/9799) [`2af8efd`](https://github.com/biomejs/biome/commit/2af8efd348cfa992bc7d35683de55bb8cc583260) Thanks [@minseong0324](https://github.com/minseong0324)! - Added the rule [`noMisleadingReturnType`](https://biomejs.dev/linter/rules/no-misleading-return-type/). The rule detects when a function's return type annotation is wider than what the implementation actually returns.

  ```ts
  // Flagged: `: string` is wider than `"loading" | "idle"`
  function getStatus(b: boolean): string {
    if (b) return "loading";
    return "idle";
  }
  ```

- [#9880](https://github.com/biomejs/biome/pull/9880) [`7f67749`](https://github.com/biomejs/biome/commit/7f67749e77af6e5af3dfc72a02bb99718695612e) Thanks [@dyc3](https://github.com/dyc3)! - Improved the diagnostics for [`useFind`](https://biomejs.dev/linter/rules/use-find/) to better explain the problem, why it matters, and how to fix it.

- [#9755](https://github.com/biomejs/biome/pull/9755) [`bff7bdb`](https://github.com/biomejs/biome/commit/bff7bdb1355cdf7d219a288e31c5c5a0357e3aad) Thanks [@ematipico](https://github.com/ematipico)! - Improved performance of fix-all operations (`--write`). Biome is now smarter when it runs lint rules and assist actions. First, it runs only rules that have code fixes, and then runs the rest of the rules.

- [#8651](https://github.com/biomejs/biome/pull/8651) [`aafca2d`](https://github.com/biomejs/biome/commit/aafca2d086eb24226a9cf1a69179561f70d02773) Thanks [@siketyan](https://github.com/siketyan)! - Add a new lint rule `useDisposables` for JavaScript, which detects disposable objects assigned to variables without `using` or `await using` syntax. Disposable objects that implement the `Disposable` or `AsyncDisposable` interface are intended to be disposed of after use. Not disposing them can lead to resource or memory leaks, depending on the implementation.

  **Invalid:**

  ```js
  function createDisposable(): Disposable {
    return {
      [Symbol.dispose]() {
        // do something
      },
    };
  }

  const disposable = createDisposable();
  ```

  **Valid:**

  ```js
  function createDisposable(): Disposable {
    return {
      [Symbol.dispose]() {
        // do something
      },
    };
  }

  using disposable = createDisposable();
  ```

- [#9788](https://github.com/biomejs/biome/pull/9788) [`53b8e57`](https://github.com/biomejs/biome/commit/53b8e5768e33b87298f8e0e4c896957dee6f2eb6) Thanks [@MeGaNeKoS](https://github.com/MeGaNeKoS)! - Fixed [#7760](https://github.com/biomejs/biome/issues/7760): Added support for CSS scroll-driven animation `timeline-range-name` keyframe selectors (`cover`, `contain`, `entry`, `exit`, `entry-crossing`, `exit-crossing`). Biome no longer reports parse errors on keyframes like `entry 0% { ... }` or `exit 100% { ... }`.

- [#9728](https://github.com/biomejs/biome/pull/9728) [`5085424`](https://github.com/biomejs/biome/commit/5085424db427c7874eef7ca732f237febb49fdb1) Thanks [@mkosei](https://github.com/mkosei)! - Fixed [#9696](https://github.com/biomejs/biome/issues/9696): Astro frontmatter now correctly parses regular expression literals like `/\d{4}/`.

- [#9261](https://github.com/biomejs/biome/pull/9261) [`16b6c49`](https://github.com/biomejs/biome/commit/16b6c4951793c820d109a9b502e1812fcbfca764) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#8409](https://github.com/biomejs/biome/issues/8409): CSS formatter now correctly places comments after the colon in property declarations.

  Previously, comments that appeared after the colon in CSS property values were incorrectly moved before the property name:

  ```diff
  [lang]:lang(ja) {
  -  /* system-ui,*/ font-family:
  +  font-family: /* system-ui,*/
      Hiragino Sans,
      sans-serif;
  }
  ```

- [#9441](https://github.com/biomejs/biome/pull/9441) [`957ea4c`](https://github.com/biomejs/biome/commit/957ea4c8ebe75083ba68a98f70616c88368883c5) Thanks [@soconnor-seeq](https://github.com/soconnor-seeq)! - Fixed [#1630](https://github.com/biomejs/biome/issues/1630): LSP project selection now prefers the most specific project root in nested workspaces.

- [#9878](https://github.com/biomejs/biome/pull/9878) [`de6210f`](https://github.com/biomejs/biome/commit/de6210f80fa6d1dc0ca3edd395e9d8e571766bb8) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#9118](https://github.com/biomejs/biome/issues/9118): [`noUnusedImports`](https://biomejs.dev/linter/rules/no-unused-imports/) no longer reports false positives for default imports used inside Svelte, Vue and Astro components.

- [#9879](https://github.com/biomejs/biome/pull/9879) [`ce7e2b7`](https://github.com/biomejs/biome/commit/ce7e2b762bc82319c39027d15e84a26f8708fc92) Thanks [@dyc3](https://github.com/dyc3)! - Fixed a parser diagnostic's message when vue syntax is disabled so that it no longer references the non-existant `html.parser.vue` option. This option will become available in 2.5.

- [#9880](https://github.com/biomejs/biome/pull/9880) [`7f67749`](https://github.com/biomejs/biome/commit/7f67749e77af6e5af3dfc72a02bb99718695612e) Thanks [@dyc3](https://github.com/dyc3)! - Improved the diagnostics for [`useRegexpExec`](https://biomejs.dev/linter/rules/use-regexp-exec/) to better explain the problem, why it matters, and how to fix it.

- [#9846](https://github.com/biomejs/biome/pull/9846) [`b7134d9`](https://github.com/biomejs/biome/commit/b7134d92413991c4394574353b76b1891160bc38) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#9140](https://github.com/biomejs/biome/issues/9140): Biome now parses Astro's attribute shorthand inside `.astro` files. The following snippet no longer reports a parse error:

  ```astro
  ---
  const items = ['a', 'b'];
  ---
  <ul>
    {items.map((item) => <li {item}>row</li>)}
  </ul>
  ```

- [#9790](https://github.com/biomejs/biome/pull/9790) [`67df09d`](https://github.com/biomejs/biome/commit/67df09d524fe49d3bb08dc45b7dfb99771e25bdd) Thanks [@dyc3](https://github.com/dyc3)! - Fixed [#9781](https://github.com/biomejs/biome/issues/9781): Trailing comments after a top-level `biome-ignore-all format` suppression are now preserved instead of being dropped. This applies to JavaScript, CSS, HTML, JSONC, GraphQL, and Grit files.

- [#9745](https://github.com/biomejs/biome/pull/9745) [`d87073e`](https://github.com/biomejs/biome/commit/d87073ef5586f0cf7eb74fd0d7390a3444c591ff) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#9741](https://github.com/biomejs/biome/issues/9741): the LSP server now correctly returns the [`organizeImports`](https://biomejs.dev/assist/actions/organize-imports/) code action when the client requests it via `source.organizeImports.biome` in the `only` filter. Previously, editors with `codeAction/resolve` support (e.g. Zed) received an empty response because the action was serialized with the wrong kind (`source.biome.organizeImports` instead of `source.organizeImports.biome`).

- [#9880](https://github.com/biomejs/biome/pull/9880) [`7f67749`](https://github.com/biomejs/biome/commit/7f67749e77af6e5af3dfc72a02bb99718695612e) Thanks [@dyc3](https://github.com/dyc3)! - Improved the diagnostics for [`useArraySome`](https://biomejs.dev/linter/rules/use-array-some/) to better explain the problem, why it matters, and how to fix it.

- [#9795](https://github.com/biomejs/biome/pull/9795) [`1d09f0f`](https://github.com/biomejs/biome/commit/1d09f0fae1d0270ad603e7b494d8dffb979125aa) Thanks [@dyc3](https://github.com/dyc3)! - Relaxed [`useExplicitType`](https://biomejs.dev/linter/rules/use-explicit-type/) for trivially inferrable types.

  Type annotations can now be omitted when types are trivially inferrable from:
  - Binary expressions (`const sum = 1 + 1`)
  - Comparison expressions (`const isEqual = 'a' === 'b'`, `const isTest = process.env.NODE_ENV === 'test'`)
  - Logical expressions (`const and = true && false`)
  - Class instantiation (`const date = new Date()`)
  - Array literals (`const arr = [1, 2, 3]`)
  - Conditional expressions (`const val = true ? 'yes' : 'no'`)
  - Function calls (`const num = Math.random()`)
  - Parameter defaults - any expression is now allowed (`const fn = (max = MAX_ATTEMPTS) => ...`)

  Comparison expressions always return `boolean`, so any operands are now allowed
  (including property access like `process.env.NODE_ENV`).

  Parameters with default values no longer require type annotations, as TypeScript
  can infer the type from the default value (even when referencing variables).

  Also removed the redundant `any` type validation from this rule. The `any` type
  is now only validated by the dedicated `noExplicitAny` rule, following the
  Single Responsibility Principle.

- [#9809](https://github.com/biomejs/biome/pull/9809) [`e8cad58`](https://github.com/biomejs/biome/commit/e8cad58a1baf8f8c935e8547da88905cfbfb05be) Thanks [@Netail](https://github.com/Netail)! - Added the new nursery rule [`useQwikLoaderLocation`](https://biomejs.dev/linter/rules/use-qwik-loader-location/), which enforces that Qwik loader functions are declared in the correct location.

- [#9877](https://github.com/biomejs/biome/pull/9877) [`fc9d715`](https://github.com/biomejs/biome/commit/fc9d715a904d382fcd7fb932a05896cfbafaaa44) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#9136](https://github.com/biomejs/biome/issues/9136) and [#9653](https://github.com/biomejs/biome/issues/9653): [`noUndeclaredVariables`](https://biomejs.dev/linter/rules/no-undeclared-variables/) and [`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/) no longer report false positives on several Svelte template constructs that declare or reference bindings in the host grammar:
  - `{#snippet name(params)}` — the snippet name and its parameters (including object, array, rest, and nested destructuring) are now tracked.
  - `{@render name(args)}` — the snippet name used at the render site is now resolved against the snippet declaration.
  - `{#each items as item, index (key)}` — the `item` binding (plain identifier or destructured), the optional `index`, and the optional `key` expression are now tracked.
  - `{@const name = value}` — the declared name is now tracked as a binding and the initializer is analyzed for undeclared references.
  - `{@debug a, b, c}` — each debugged identifier is now analyzed and reported if undeclared.
  - Shorthand attributes `<img {src} />` — the curly-shorthand attribute is now analyzed as an expression, so undeclared references inside it are reported.

  For example, the following template no longer triggers either rule:

  ```svelte
  <script>
  let items = [];
  let total = 0;
  </script>

  {#snippet figure(image)}
      <figure>
          <img src={image.src} alt={image.caption} />
          <figcaption>{image.caption}</figcaption>
      </figure>
  {/snippet}

  {#each items as item}
      {@const price = item.price}
      {@render figure(item)}
      <span>{price}</span>
  {/each}

  {@debug items, total}
  ```

- [#9869](https://github.com/biomejs/biome/pull/9869) [`78bce77`](https://github.com/biomejs/biome/commit/78bce773a2d8776991c93a239d462fd42bf24cc4) Thanks [@Netail](https://github.com/Netail)! - Updated [`noDuplicateFieldDefinitionNames`](https://biomejs.dev/linter/rules/no-duplicate-field-definition-names/) to also flag duplicate fields within type extensions, interface extensions & input extensions.

- [#9739](https://github.com/biomejs/biome/pull/9739) [`0bc2198`](https://github.com/biomejs/biome/commit/0bc2198735230c3bad14a831652543bd304fa0d6) Thanks [@dyc3](https://github.com/dyc3)! - Fixed Grit queries that use native Biome AST node names with the native field names that are in our `.ungram` grammar files. Queries such as `JsConditionalExpression(consequent = $cons, alternate = $alt)` now compile successfully in `biome search` and grit plugins.

- [#9811](https://github.com/biomejs/biome/pull/9811) [`2dddca3`](https://github.com/biomejs/biome/commit/2dddca3f09bda92f7f43bbaf482796f5aec7a970) Thanks [@dyc3](https://github.com/dyc3)! - Updated `noImpliedEval` to flag `new Function()` usages, as its a form of indirect `eval`, and to include `no-new-func` as a rule source.

- [#9870](https://github.com/biomejs/biome/pull/9870) [`ccf9770`](https://github.com/biomejs/biome/commit/ccf9770b37cf2d04205a5914db72c86137bca50f) Thanks [@Netail](https://github.com/Netail)! - Marked eslint-qwik-plugin's `unused-server` as redundant since it was covered by `noUnusedVariables`.

- [#9701](https://github.com/biomejs/biome/pull/9701) [`1417c3b`](https://github.com/biomejs/biome/commit/1417c3b4ece262b1500b12c9f1da1429e4d53fc4) Thanks [@dyc3](https://github.com/dyc3)! - Added the new nursery rule [`noUselessTypeConversion`](https://biomejs.dev/linter/rules/no-useless-type-conversion/), which reports redundant primitive conversion patterns such as `String(value)` when `value` is already a string.

- [#9248](https://github.com/biomejs/biome/pull/9248) [`49f00a3`](https://github.com/biomejs/biome/commit/49f00a38d64af131178ba4e096155d22055aa1c4) Thanks [@pkallos](https://github.com/pkallos)! - `useNullishCoalescing` now also detects ternary expressions that check for `null` or `undefined` and suggests rewriting them with `??`. A new `ignoreTernaryTests` option allows disabling this behavior.

- [#9863](https://github.com/biomejs/biome/pull/9863) [`6a44619`](https://github.com/biomejs/biome/commit/6a4461915f1f5f161795081706b84cc8992b12dd) Thanks [@ematipico](https://github.com/ematipico)! - Fixed [#9690](https://github.com/biomejs/biome/issues/9690): `biome check --write` is now idempotent on HTML files that contain embedded `<style>` or `<script>` blocks. Previously, each run reported "Fixed 1 file" even when the file content did not actually change, because the embedded language formatter's output was not re-indented to match the surrounding HTML block.



## What's Changed
* feat(md/fmt): format more nodes by @ematipico in https://github.com/biomejs/biome/pull/9713
* fix(markdown): preserve nested list indent tokens by @jfmcdowell in https://github.com/biomejs/biome/pull/9717
* fix(html): handle escaped regex literals in astro frontmatter by @mkosei in https://github.com/biomejs/biome/pull/9728
* test(markdown): add regression tests for mixed list markers across blank lines by @jfmcdowell in https://github.com/biomejs/biome/pull/9732
* fix(lsp): prefer most specific project root by @soconnor-seeq in https://github.com/biomejs/biome/pull/9441
* fix(markdown): fix fenced code block closing inside list items by @jfmcdowell in https://github.com/biomejs/biome/pull/9730
* fix(markdown): fix HTML block parsing inside list item continuations by @jfmcdowell in https://github.com/biomejs/biome/pull/9740
* fix(markdown): fix panic on multi-byte characters in emphasis context by @jfmcdowell in https://github.com/biomejs/biome/pull/9735
* refactor(markdown): replace skipped trivia with formatter-safe recovery by @jfmcdowell in https://github.com/biomejs/biome/pull/9746
* refactor(markdown): cleanup nits from #9746 by @jfmcdowell in https://github.com/biomejs/biome/pull/9751
* fix(lsp): regression codeAction/resolve by @ematipico in https://github.com/biomejs/biome/pull/9745
* feat(lint/js): add `noUselessTypeConversion` by @dyc3 in https://github.com/biomejs/biome/pull/9701
* fix(markdown): replace panicking code with safe fallbacks in lexer by @jfmcdowell in https://github.com/biomejs/biome/pull/9753
* refactor(markdown): emit continuation indent as structural CST node by @jfmcdowell in https://github.com/biomejs/biome/pull/9737
* fix(markdown): fix false diagnostic on nested lists with double blank lines by @jfmcdowell in https://github.com/biomejs/biome/pull/9764
* feat(css): add support for SCSS string interpolation by @denbezrukov in https://github.com/biomejs/biome/pull/9756
* refactor(markdown): deduplicate shared helper functions by @jfmcdowell in https://github.com/biomejs/biome/pull/9766
* fix(markdown): remove debug scaffolding and parser cleanup by @jfmcdowell in https://github.com/biomejs/biome/pull/9765
* refactor(flags): make variables predictable by @ematipico in https://github.com/biomejs/biome/pull/9769
* fix(markdown_parser): emit MdIndentTokenList for headers inside list items by @jfmcdowell in https://github.com/biomejs/biome/pull/9774
* fix(markdown_parser): fix lazy continuation at nested list marker indent by @jfmcdowell in https://github.com/biomejs/biome/pull/9776
* docs: clarify that elements in scope for useAltText is not configurable by @yogaraptor in https://github.com/biomejs/biome/pull/9773
* fix(markdown_parser): fix multi-byte character panic in emphasis context by @jfmcdowell in https://github.com/biomejs/biome/pull/9775
* perf(core): refactor fix-all logic by @ematipico in https://github.com/biomejs/biome/pull/9755
* feat(css): add support for scroll-driven animation keyframe selectors by @MeGaNeKoS in https://github.com/biomejs/biome/pull/9788
* fix(format): don't remove trailing comments when formatting is suppressed by @dyc3 in https://github.com/biomejs/biome/pull/9790
* test(markdown_parser): add reference HTML validation and structural invariants by @jfmcdowell in https://github.com/biomejs/biome/pull/9779
* fix(markdown_parser): reject multiline inline HTML open tag when > at line start is blockquote marker by @jfmcdowell in https://github.com/biomejs/biome/pull/9783
* fix: noDelete should not suggest undefined assignment for process.env by @myx0m0p in https://github.com/biomejs/biome/pull/9760
* feat(lint/js): add `useConsistentTestIt` by @dyc3 in https://github.com/biomejs/biome/pull/9350
* feat(useExplicitType): relax rule for trivially inferrable types by @dyc3 in https://github.com/biomejs/biome/pull/9795
* chore(deps): update dependency tombi to v0.9.13 by @renovate[bot] in https://github.com/biomejs/biome/pull/9819
* fix(markdown_parser): split bullet lists when marker type changes across blank lines by @jfmcdowell in https://github.com/biomejs/biome/pull/9785
* fix(markdown_parser): recognize setext heading inside blockquote by @jfmcdowell in https://github.com/biomejs/biome/pull/9782
* chore(deps): update github-actions by @renovate[bot] in https://github.com/biomejs/biome/pull/9823
* fix(deps): update @biomejs packages by @renovate[bot] in https://github.com/biomejs/biome/pull/9822
* chore(deps): update rust crate libc to 0.2.184 by @renovate[bot] in https://github.com/biomejs/biome/pull/9821
* chore(deps): update dependency dprint to v0.53.2 by @renovate[bot] in https://github.com/biomejs/biome/pull/9818
* refactor(useConsistentTestIt): review feedback by @dyc3 in https://github.com/biomejs/biome/pull/9827
* fix(cli): fix codeAction/resolve not considering assist actions by @elliotcourant in https://github.com/biomejs/biome/pull/9812
* test(markdown_parser): add differential fuzzer against commonmark.js by @jfmcdowell in https://github.com/biomejs/biome/pull/9784
* feat(markdown): implement basic formatter features by @tidefield in https://github.com/biomejs/biome/pull/9693
* feat(lint): add ternary expression detection to useNullishCoalescing by @pkallos in https://github.com/biomejs/biome/pull/9248
* chore(deps): update rust crate indexmap to 2.13.1 by @renovate[bot] in https://github.com/biomejs/biome/pull/9820
* fix: embedded snippets with parenthesis by @ematipico in https://github.com/biomejs/biome/pull/9828
* feat(js/lint): implement rule `useDisposables` by @siketyan in https://github.com/biomejs/biome/pull/8651
* fix(markdown_parser): reject link reference definition with trailing text after destination by @jfmcdowell in https://github.com/biomejs/biome/pull/9780
* feat(lint): rule `useExplicitReturnType` by @ematipico in https://github.com/biomejs/biome/pull/9429
* fix(markdown_parser): incorrect tight/loose list classification at marker boundaries by @jfmcdowell in https://github.com/biomejs/biome/pull/9787
* ci: add cargo-deny for `paste` crate by @dyc3 in https://github.com/biomejs/biome/pull/9579
* chore: format by @dyc3 in https://github.com/biomejs/biome/pull/9834
* chore(skills): better diagnostic advice by @dyc3 in https://github.com/biomejs/biome/pull/9830
* feat(lint): add nursery rule `noMisleadingReturnType` by @minseong0324 in https://github.com/biomejs/biome/pull/9799
* chore: update guidelines to protect maintainers by @ematipico in https://github.com/biomejs/biome/pull/9825
* chore(deps): update dependency vite to v7.3.2 [security] by @renovate[bot] in https://github.com/biomejs/biome/pull/9844
* refactor(markdown_parser): deduplicate normalize_html test helper by @jfmcdowell in https://github.com/biomejs/biome/pull/9833
* chore(deps): update rust crate tokio to 1.51.0 by @renovate[bot] in https://github.com/biomejs/biome/pull/9602
* fix(deps): update rust crates by @renovate[bot] in https://github.com/biomejs/biome/pull/9708
* refactor(migrate): auto derive `variant_index()` function by @dyc3 in https://github.com/biomejs/biome/pull/9803
* feat(noImpliedEval): flag `new Function(...)` by @dyc3 in https://github.com/biomejs/biome/pull/9811
* test: infra for custom rule migrators by @dyc3 in https://github.com/biomejs/biome/pull/9836
* refactor(markdown_parser): deduplicate link helper functions by @jfmcdowell in https://github.com/biomejs/biome/pull/9840
* fix(js): parse short hand identifier in Astro JSX files by @ematipico in https://github.com/biomejs/biome/pull/9846
* fix(ci): remove unused import: `JsFileSource` by @tidefield in https://github.com/biomejs/biome/pull/9858
* fix(grit): biome native node field names now work by @dyc3 in https://github.com/biomejs/biome/pull/9739
* fix(md-formatter): remove last hard line break  by @tidefield in https://github.com/biomejs/biome/pull/9856
* feat(lint): detect tuple widening and inferred unions in noMisleadingReturnType by @minseong0324 in https://github.com/biomejs/biome/pull/9843
* docs: improve useSimplifiedLogicExpression docs by @ematipico in https://github.com/biomejs/biome/pull/9864
* fix(core): update snippet via fix all by @ematipico in https://github.com/biomejs/biome/pull/9863
* feat(js_analyze): implement useQwikLoaderLocation by @Netail in https://github.com/biomejs/biome/pull/9809
* chore: missing rule source by @Netail in https://github.com/biomejs/biome/pull/9871
* chore: unsupported covered by by @Netail in https://github.com/biomejs/biome/pull/9870
* fix(graphql_analyze): also flag duplicate fields within extensions by @Netail in https://github.com/biomejs/biome/pull/9869
* fix(css/formatter): comment placement in lists by @ematipico in https://github.com/biomejs/biome/pull/9261
* fix(core): track of default specifiers by @ematipico in https://github.com/biomejs/biome/pull/9878
* fix(parse/html): fix disabled vue error message by @dyc3 in https://github.com/biomejs/biome/pull/9879
* fix(core): tracking of snippet and render function calls by @ematipico in https://github.com/biomejs/biome/pull/9877
* fix(lint/js): improve diagnostics to better follow rule pillars by @dyc3 in https://github.com/biomejs/biome/pull/9880
* fix(core): tracking of bindings and value references by @ematipico in https://github.com/biomejs/biome/pull/9886
* ci: release by @github-actions[bot] in https://github.com/biomejs/biome/pull/9733

## New Contributors
* @soconnor-seeq made their first contribution in https://github.com/biomejs/biome/pull/9441
* @yogaraptor made their first contribution in https://github.com/biomejs/biome/pull/9773
* @myx0m0p made their first contribution in https://github.com/biomejs/biome/pull/9760
* @elliotcourant made their first contribution in https://github.com/biomejs/biome/pull/9812
* @minseong0324 made their first contribution in https://github.com/biomejs/biome/pull/9799

**Full Changelog**: https://github.com/biomejs/biome/compare/@biomejs/biome@2.4.10...@biomejs/biome@2.4.11