Skip to content

fix(lint/noConfusingVoidType): allow unions of only void and never - #12177

Merged
dyc3 merged 1 commit into
biomejs:mainfrom
MustafaKemal0146:fix/no-confusing-void-type-void-never
Oct 7, 2026
Merged

dyc3 merged 1 commit into
biomejs:mainfrom
MustafaKemal0146:fix/no-confusing-void-type-void-never

Conversation

@MustafaKemal0146

@MustafaKemal0146 MustafaKemal0146 commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Fixes #4517.

noConfusingVoidType reported void in void | never. typescript-eslint's no-invalid-void-type allows unions made only of void and never, so they are skipped now too (parentheses included).

This PR was written primarily by Claude Code.

Test Plan

Added the upstream valid cases (void | never, never | void, a void | never return type, (void) | never) and void | never | string as invalid. The new valid cases fail without the fix.

Docs

No changes needed.

Copilot AI balanced review requested due to automatic review settings October 6, 2026 19:36
@agentscanapp

agentscanapp Bot commented Oct 6, 2026

Copy link
Copy Markdown

A maintainer will take a look as soon as they can. In the meantime, please make sure that:

  • the description follows our PR template
  • any related issues are linked
  • existing tests still pass

@changeset-bot

changeset-bot Bot commented Oct 6, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 22dd4d4

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 15 packages
Name Type
@biomejs/biome Patch
@biomejs/cli-android-arm64 Patch
@biomejs/cli-android-x64 Patch
@biomejs/cli-darwin-arm64 Patch
@biomejs/cli-darwin-x64 Patch
@biomejs/cli-linux-arm64-musl Patch
@biomejs/cli-linux-arm64 Patch
@biomejs/cli-linux-x64-musl Patch
@biomejs/cli-linux-x64 Patch
@biomejs/cli-win32-arm64 Patch
@biomejs/cli-win32-x64 Patch
@biomejs/wasm-bundler Patch
@biomejs/wasm-nodejs Patch
@biomejs/wasm-web Patch
@biomejs/backend-jsonrpc Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@github-actions github-actions Bot added A-Linter Area: linter L-JavaScript Language: JavaScript and super languages labels Oct 6, 2026
@coderabbitai

coderabbitai Bot commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: biomejs/biome/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 9b9a1bdc-50fd-4c22-b4ea-0cfa355c3494
📥 Commits

Reviewing files that changed from the base of the PR and between bee1e54 and 22dd4d4.

⛔ Files ignored due to path filters (2)
  • crates/biome_js_analyze/tests/specs/suspicious/noConfusingVoidType/invalid.ts.snap is excluded by !**/*.snap and included by **
  • crates/biome_js_analyze/tests/specs/suspicious/noConfusingVoidType/valid.ts.snap is excluded by !**/*.snap and included by **
📒 Files selected for processing (4)
  • .changeset/cyan-zebras-switch.md
  • crates/biome_js_analyze/src/lint/suspicious/no_confusing_void_type.rs
  • crates/biome_js_analyze/tests/specs/suspicious/noConfusingVoidType/invalid.ts
  • crates/biome_js_analyze/tests/specs/suspicious/noConfusingVoidType/valid.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.


Walkthrough

The rule now skips diagnostics for unions containing only void and never, including parenthesised operands. Tests cover both union orders, a throwing function, and a union that also contains string. A patch changeset records the update.

Priority: ⬇️ Low

Change: Bug fix

Merge Risk: 🔵 Low · up to 22dd4

The rule misses a diagnostic for this nested-union edge case; the impact is limited, so merging with follow-up is reasonable.

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly and concisely describes the change: allowing unions containing only void and never in noConfusingVoidType.
Description check ✅ Passed The description explains the rule change, the issue addressed, and the added test cases.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@dyc3

dyc3 commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

Do you know why this exception exists? Just curious

@MustafaKemal0146

Copy link
Copy Markdown
Contributor Author

TypeScript collapses never

@codspeed

codspeed Bot commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

Merging this PR will degrade performance by 6.02%

❌ 1 regressed benchmark
✅ 112 untouched benchmarks
⏩ 298 skipped benchmarks1

Warning

Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Benchmark BASE HEAD Efficiency
❌ load[undefined_reference/js] 2.7 ms 2.9 ms -6.02%

Tip

Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.


Comparing MustafaKemal0146:fix/no-confusing-void-type-void-never (22dd4d4) with main (bee1e54)

Open in CodSpeed

Footnotes

  1. 298 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩

@dyc3
dyc3 merged commit 215288b into biomejs:main Oct 7, 2026
37 checks passed
@dyc3

dyc3 commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

Btw, thank you for not posting massive walls of clanker text. I really appreciate it.

@github-actions github-actions Bot mentioned this pull request Oct 7, 2026
OIRNOIR pushed a commit to OIRNOIR/YouTube-Helper-Server that referenced this pull request Oct 28, 2026
This PR contains the following updates:

| Package | Type | Update | Change | Pending |
|---|---|---|---|---|
| [@biomejs/biome](https://biomejs.dev) ([source](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome)) | imports | minor | [`2.5.15` -> `2.6.2`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.5.15/2.6.2) | `2.6.3` |

---

### Release Notes

<details>
<summary>biomejs/biome (@&#8203;biomejs/biome)</summary>

### [`v2.6.2`](https://github.com/biomejs/biome/blob/HEAD/packages/@biomejs/biome/CHANGELOG.md#262)

[Compare Source](https://github.com/biomejs/biome/compare/30ffad1461051d595210f7fabcd67813942ebee4...@biomejs/[email protected])

##### Minor Changes

- [#&#8203;11479](https://github.com/biomejs/biome/pull/11479) [`5c60ba8`](https://github.com/biomejs/biome/commit/5c60ba83b6bb2442eb3d6157b328719d0c39a5c2) Thanks [@&#8203;nhedger](https://github.com/nhedger)! - Added a `--git` flag to `biome init`. The flag enables Git VCS integration and sets `vcs.useIgnoreFile` to `true` in the generated configuration, even when the command runs outside a Git repository.

- [#&#8203;11742](https://github.com/biomejs/biome/pull/11742) [`3a1356d`](https://github.com/biomejs/biome/commit/3a1356d089ee0e99c7a1c9f20df7785efe3f11b4) Thanks [@&#8203;Netail](https://github.com/Netail)! - Added the `biome migrate stylelint` command. It imports a Stylelint configuration and its ignore settings into your Biome configuration, mapping Stylelint rules to their Biome equivalents. Pass `--write` to apply the changes, and `--include-inspired` or `--include-nursery` to migrate additional rules.

- [#&#8203;12318](https://github.com/biomejs/biome/pull/12318) [`774b5b5`](https://github.com/biomejs/biome/commit/774b5b573259745d7b6a8545d39eed20f1620421) Thanks [@&#8203;Netail](https://github.com/Netail)! - Added the new assist action [`useGraphqlSortedDefinitions`](https://biomejs.dev/assist/actions/use-graphql-sorted-definitions/), which sorts the named definitions of a GraphQL document, such as types, type extensions, directives, fragments, and operations.

  **Invalid**:

  ```graphql
  type User {
    id: ID!
  }

  enum Role {
    ADMIN
    USER
  }

  directive @auth on FIELD_DEFINITION
  ```

- [#&#8203;6886](https://github.com/biomejs/biome/pull/6886) [`3479d15`](https://github.com/biomejs/biome/commit/3479d1583a888e2d393b32129616c7327af7c320) Thanks [@&#8203;christymcgrory](https://github.com/christymcgrory)! - `biome rage` now shows the resolved `files.includes` and `files.ignoreUnknown` configuration.

- [#&#8203;11102](https://github.com/biomejs/biome/pull/11102) [`0874b7f`](https://github.com/biomejs/biome/commit/0874b7f87a17474029763988c0c1f17812298441) Thanks [@&#8203;gameroman](https://github.com/gameroman)! - Added support for [`useTailwindSortedClasses`](https://biomejs.dev/linter/rules/use-tailwind-sorted-classes/) rule in HTML-ish files.

- [#&#8203;10711](https://github.com/biomejs/biome/pull/10711) [`40de5a0`](https://github.com/biomejs/biome/commit/40de5a0383473d37a4667f7cdb46817e0e73b686) Thanks [@&#8203;soconnor-seeq](https://github.com/soconnor-seeq)! - Adds a new `resolutionKind` option for object-syntax plugin entries.

  This allows shared Biome configs in monorepos to load local Grit plugins from the package that declares them instead of resolving plugin paths from the consuming project.

  ```json
  {
    "plugins": [
      { "path": "./grit/no-debugger.grit", "resolutionKind": "config" },
      { "path": "local-plugin.grit", "resolutionKind": "project" },
      { "path": "local-plugin.grit" }
    ]
  }
  ```

  Use `resolutionKind: "config"` to resolve the plugin from the configuration file that declares it. Use `resolutionKind: "project"` to resolve the plugin from the consuming project. When omitted, `resolutionKind` defaults to `project`. This only affects plugin resolution; `includes` still apply to end-user project files as usual.

- [#&#8203;11432](https://github.com/biomejs/biome/pull/11432) [`4befd08`](https://github.com/biomejs/biome/commit/4befd08057836e6d3881c768bf7a49e5820a7352) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Added `biome inspect config` to show resolved configuration values and their origins as human-readable diagnostics, including matching overrides.

  Configuration files can also extend other configurations up to ten levels deep. Repeated references to the same resolved file are ignored with an information diagnostic, while resolving multiple versions of one extended package produces an error.

- [#&#8203;11477](https://github.com/biomejs/biome/pull/11477) [`ab05554`](https://github.com/biomejs/biome/commit/ab05554518c2e2afef6294c191ef62f907cbc36e) Thanks [@&#8203;nhedger](https://github.com/nhedger)! - Added automatic Git VCS integration when running `biome init` inside a Git repository, including from nested directories and Git worktrees. The generated configuration sets `vcs.enabled` and `vcs.useIgnoreFile` to `true`, with `vcs.clientKind` set to `"git"`.

- [#&#8203;11451](https://github.com/biomejs/biome/pull/11451) [`1ac4b09`](https://github.com/biomejs/biome/commit/1ac4b09511fdef6af98369196854a6db0f2822e1) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - #### YAML is now supported

  Added support for formatting YAML files, both `.yaml` and `.yml` extensions

- [#&#8203;11432](https://github.com/biomejs/biome/pull/11432) [`4befd08`](https://github.com/biomejs/biome/commit/4befd08057836e6d3881c768bf7a49e5820a7352) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Configuration files can now recursively extend local files and npm package configurations up to ten levels. Every repeated reference participates in the merge, while resolving multiple versions of one extended package produces an error.

- [#&#8203;11713](https://github.com/biomejs/biome/pull/11713) [`ac6a640`](https://github.com/biomejs/biome/commit/ac6a640a1223ff57ac480926be6143db29fdfbdf) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added support for Grit [`range()` patterns](https://docs.grit.io/language/patterns#range-patterns), addressing [#&#8203;8454](https://github.com/biomejs/biome/issues/8454). Plugins can filter syntax nodes by optional `start_line`, `start_column`, `end_line`, and `end_column` bounds.

  For example, this pattern matches function calls contained entirely on line 2.

  ```grit
  range(start_line=2, end_line=2) as $call where {
      $call <: call_expression()
  }
  ```

- [#&#8203;11244](https://github.com/biomejs/biome/pull/11244) [`0628b53`](https://github.com/biomejs/biome/commit/0628b53121ba9ad28ba9395f808eabbcb00a6ac2) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Added the new CLI option `--profile-type-inference` to the commands `lint` and `check`.

  The profiler is designed to track the execution time of internal queries and operations, group them by file, and sort them from the most expensive to the least expensive.

  ```shell
  biome lint --profile-type-inference
  ```

  ```text
  profiler ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    i Type inference profile (Biome <version>)

    src/index.ts

      Requests (top 5 of 12 groups; 28 source records; 46 executions)
        1. Promise classification <- nursery/noFloatingPromises
        ...

      Queries (top 8 of 25 groups; 61 source records; 94 executions)
        1. Promises / infer_expression_is_promise
        ...

      Whole-module inference (top 1 of 1 group; 1 source record; 1 execution)
        1. Import depth limit
        ...

    68 files omitted.

    ℹ To show all the information, use the --verbose option. The output might be very verbose, so it's advised to analyze a single file.

    $ biome lint --profile-type-inference --verbose ./path/to/file.ts
  ```

  Use `--verbose` to include detailed timings, attribution, breadth, and implementation references for the top source records in each file.

- [#&#8203;12108](https://github.com/biomejs/biome/pull/12108) [`4fcb880`](https://github.com/biomejs/biome/commit/4fcb8806ec03ac79be2846853bacc23449d4f9ec) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Promoted 59 nursery rules to stable groups.

##### Correctness

Promoted the following rules to the `correctness` group with error severity. All of them are recommended:

- [`noDuplicateFieldDefinitionNames`](https://biomejs.dev/linter/rules/no-duplicate-field-definition-names/)
- [`noVueRefAsOperand`](https://biomejs.dev/linter/rules/no-vue-ref-as-operand/)
- [`noVueImportCompilerMacros`](https://biomejs.dev/linter/rules/no-vue-import-compiler-macros/)
- [`noVueVOnNumberValues`](https://biomejs.dev/linter/rules/no-vue-v-on-number-values/)
- [`useVueValidVFor`](https://biomejs.dev/linter/rules/use-vue-valid-v-for/)
- [`noComponentHookFactories`](https://biomejs.dev/linter/rules/no-component-hook-factories/)
- [`noJsxNamespace`](https://biomejs.dev/linter/rules/no-jsx-namespace/)
- [`useReactAsyncServerFunction`](https://biomejs.dev/linter/rules/use-react-async-server-function/)
- [`noReactNativeRawText`](https://biomejs.dev/linter/rules/no-react-native-raw-text/)
- [`useReactNativePlatformComponents`](https://biomejs.dev/linter/rules/use-react-native-platform-components/)
- [`useQwikLoaderLocation`](https://biomejs.dev/linter/rules/use-qwik-loader-location/)
- [`noPlaywrightMissingAwait`](https://biomejs.dev/linter/rules/no-playwright-missing-await/)
- [`usePlaywrightValidDescribeCallback`](https://biomejs.dev/linter/rules/use-playwright-valid-describe-callback/)

##### Suspicious

Promoted the following rules to the `suspicious` group:

- [`noLoopFunc`](https://biomejs.dev/linter/rules/no-loop-func/)
- [`noJsxLeakedDollar`](https://biomejs.dev/linter/rules/no-jsx-leaked-dollar/)
- [`noReactStringRefs`](https://biomejs.dev/linter/rules/no-react-string-refs/) (recommended)
- [`useScopedStyles`](https://biomejs.dev/linter/rules/use-scoped-styles/) (recommended)
- [`noReactNativeDeepImports`](https://biomejs.dev/linter/rules/no-react-native-deep-imports/) (recommended, error severity)
- [`noDrizzleDeleteWithoutWhere`](https://biomejs.dev/linter/rules/no-drizzle-delete-without-where/) (recommended, error severity)
- [`noDrizzleUpdateWithoutWhere`](https://biomejs.dev/linter/rules/no-drizzle-update-without-where/) (recommended, error severity)
- [`noConditionalExpect`](https://biomejs.dev/linter/rules/no-conditional-expect/)
- [`useExpect`](https://biomejs.dev/linter/rules/use-expect/)
- [`noIdenticalTestTitle`](https://biomejs.dev/linter/rules/no-identical-test-title/) (recommended)
- [`noPlaywrightForceOption`](https://biomejs.dev/linter/rules/no-playwright-force-option/)
- [`noPlaywrightNetworkidle`](https://biomejs.dev/linter/rules/no-playwright-networkidle/)
- [`noPlaywrightPagePause`](https://biomejs.dev/linter/rules/no-playwright-page-pause/)
- [`noPlaywrightWaitForNavigation`](https://biomejs.dev/linter/rules/no-playwright-wait-for-navigation/)
- [`noPlaywrightWaitForTimeout`](https://biomejs.dev/linter/rules/no-playwright-wait-for-timeout/)
- [`noDuplicateSelectors`](https://biomejs.dev/linter/rules/no-duplicate-selectors/)
- [`noEmptyObjectKeys`](https://biomejs.dev/linter/rules/no-empty-object-keys/)
- [`useBaseline`](https://biomejs.dev/linter/rules/use-baseline/)
- [`noUntrustedLicenses`](https://biomejs.dev/linter/rules/no-untrusted-licenses/)

##### Security

Promoted [`useIframeSandbox`](https://biomejs.dev/linter/rules/use-iframe-sandbox/) to the `security` group with error severity.

##### Performance

Promoted the recommended rule [`useDomNodeTextContent`](https://biomejs.dev/linter/rules/use-dom-node-text-content/) to the `performance` group with warning severity.

##### Complexity

Promoted the following rules to the `complexity` group:

- [`useArraySome`](https://biomejs.dev/linter/rules/use-array-some/)
- [`useRegexpTest`](https://biomejs.dev/linter/rules/use-regexp-test/)
- [`noUnnecessaryTemplateExpression`](https://biomejs.dev/linter/rules/no-unnecessary-template-expression/)
- [`noPlaywrightUselessAwait`](https://biomejs.dev/linter/rules/no-playwright-useless-await/)
- [`noExcessiveSelectorClasses`](https://biomejs.dev/linter/rules/no-excessive-selector-classes/)
- [`useMathMinMax`](https://biomejs.dev/linter/rules/use-math-min-max/) (recommended, warning severity)
- [`noExcessiveNestedCallbacks`](https://biomejs.dev/linter/rules/no-excessive-nested-callbacks/)

##### Style

Promoted the following rules to the `style` group with information severity:

- [`useVueConsistentDefinePropsDeclaration`](https://biomejs.dev/linter/rules/use-vue-consistent-define-props-declaration/)

- [`useVueNextTickPromise`](https://biomejs.dev/linter/rules/use-vue-next-tick-promise/) (recommended)

- [`noReactNativeLiteralColors`](https://biomejs.dev/linter/rules/no-react-native-literal-colors/)

- [`useConsistentTestIt`](https://biomejs.dev/linter/rules/use-consistent-test-it/)

- [`useTestHooksInOrder`](https://biomejs.dev/linter/rules/use-test-hooks-in-order/)

- [`useTestHooksOnTop`](https://biomejs.dev/linter/rules/use-test-hooks-on-top/)

- [`noPlaywrightEval`](https://biomejs.dev/linter/rules/no-playwright-eval/)

- [`noPlaywrightElementHandle`](https://biomejs.dev/linter/rules/no-playwright-element-handle/)

- [`noPlaywrightWaitForSelector`](https://biomejs.dev/linter/rules/no-playwright-wait-for-selector/)

- [`useReduceTypeParameter`](https://biomejs.dev/linter/rules/use-reduce-type-parameter/)

- [`useNamedCaptureGroup`](https://biomejs.dev/linter/rules/use-named-capture-group/)

- [`useUnicodeRegex`](https://biomejs.dev/linter/rules/use-unicode-regex/)

- [`useImportsFirst`](https://biomejs.dev/linter/rules/use-imports-first/)

- [`useVarsOnTop`](https://biomejs.dev/linter/rules/use-vars-on-top/)

- [`useThisInClassMethods`](https://biomejs.dev/linter/rules/use-this-in-class-methods/)

- [`noInlineStyles`](https://biomejs.dev/linter/rules/no-inline-styles/)

- [`useDomQuerySelector`](https://biomejs.dev/linter/rules/use-dom-query-selector/)

- [`noTopLevelLiterals`](https://biomejs.dev/linter/rules/no-top-level-literals/)

- [#&#8203;12206](https://github.com/biomejs/biome/pull/12206) [`0f984fb`](https://github.com/biomejs/biome/commit/0f984fbfdd05db43a245be3150eb3156088e1558) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the `ignoreUsingDeclarations` option to [`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/). When enabled, the rule no longer reports unused variables declared with `using` or `await using`, because these declarations clean up their value automatically even when the code never reads it.

  ```json
  {
    "linter": {
      "rules": {
        "correctness": {
          "noUnusedVariables": {
            "options": { "ignoreUsingDeclarations": true }
          }
        }
      }
    }
  }
  ```

- [#&#8203;12424](https://github.com/biomejs/biome/pull/12424) [`6a41490`](https://github.com/biomejs/biome/commit/6a41490f6127f3ff57259609a0bf88902598c4cf) Thanks [@&#8203;siketyan](https://github.com/siketyan)! - Removed the `javascript.parser.gritMetavariables` option. It was intended for internal use only and had no effect on how Biome parses JavaScript and TypeScript files. Biome now reports it as an unknown key and exits with a configuration error, so remove it from your configuration file.

- [#&#8203;12055](https://github.com/biomejs/biome/pull/12055) [`54870c0`](https://github.com/biomejs/biome/commit/54870c07e843a809a2c4cc485a411a22a224f153) Thanks [@&#8203;ff1451](https://github.com/ff1451)! - Added the new assist action [`useGraphqlSortedVariables`](https://biomejs.dev/assist/actions/use-graphql-sorted-variables/), which sorts the variable definitions of GraphQL operations.

  **Invalid**:

  ```graphql
  query GetUser($userId: ID!, $includePosts: Boolean = false, $after: String) {
    user(id: $userId) {
      name
    }
  }
  ```

- [#&#8203;12149](https://github.com/biomejs/biome/pull/12149) [`83df808`](https://github.com/biomejs/biome/commit/83df80848ec24a57d91bc9d5a1364abe45d85c98) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the `tailwind.stylesheet` option, which points Biome at the CSS file that holds your Tailwind CSS configuration. [`useTailwindSortedClasses`](https://biomejs.dev/linter/rules/use-tailwind-sorted-classes/) reads the `@theme`, `@utility`, and `@custom-variant` rules in that file and in the local files it imports, so your own theme values, utilities, and variants sort correctly.

  ```json5
  // biome.json
  {
    "tailwind": { "stylesheet": "./src/app.css" }
  }
  ```

  ```css
  /* src/app.css */
  @import "tailwindcss";

  @theme {
    --color-brand: #&#8203;3b82f6;
  }

  @utility content-auto {
    content-visibility: auto;
  }

  @custom-variant theme-midnight (&:where([data-theme="midnight"] *));
  ```

- [#&#8203;12206](https://github.com/biomejs/biome/pull/12206) [`0f984fb`](https://github.com/biomejs/biome/commit/0f984fbfdd05db43a245be3150eb3156088e1558) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added migration of the `ignoreRestSiblings` and `ignoreUsingDeclarations` options of `no-unused-vars`, `@typescript-eslint/no-unused-vars`, and `unused-imports/no-unused-vars` to [`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/) in `biome migrate eslint`. Options that the ESLint configuration omits are set to ESLint's defaults, so the migrated rule reports the same variables. For example, `"no-unused-vars": "error"` now migrates `ignoreRestSiblings` as `false`.

- [#&#8203;11709](https://github.com/biomejs/biome/pull/11709) [`32d12cb`](https://github.com/biomejs/biome/commit/32d12cb593533901fa0a6466a4ba966de76d8967) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Added the new command `biome inspect file`, which returns developer information for the given file.

  ```shell
  biome inspect file path/to/file.ts
  ```

  By default, the command returns the CST of the file. The command accepts the following arguments:

  - `--ast`, which returns the AST of a file.
  - `--ir`, which returns the formatting IR of a file.
  - `--semantic`, which returns the semantic model information of a file, if available.

- [#&#8203;12221](https://github.com/biomejs/biome/pull/12221) [`cb571af`](https://github.com/biomejs/biome/commit/cb571af7362beedccaf4983190cecc6e9780f017) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - The rule [`noEmptySource`](https://biomejs.dev/linter/rules/no-empty-source/) now supports Markdown files. It reports files that contain only blank lines and HTML comments. For example, the following file is now reported:

  ```md
  <!-- TODO -->
  ```

- [#&#8203;12214](https://github.com/biomejs/biome/pull/12214) [`8955b56`](https://github.com/biomejs/biome/commit/8955b561e0d2107e9288b4f2ad20489a9a1c9372) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - The rule [`noEmptySource`](https://biomejs.dev/linter/rules/no-empty-source/) now supports YAML files. It reports files with no documents and each document that has no content. For example, the second document in the following code is now reported:

  ```yaml
  name: foo
  ---
  ```

- [#&#8203;12033](https://github.com/biomejs/biome/pull/12033) [`8669e53`](https://github.com/biomejs/biome/commit/8669e536bbbbf2f459ad0b74826f7a40133120ac) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the `ignoreElements` option to [`noRedundantRoles`](https://biomejs.dev/linter/rules/no-redundant-roles/). Elements listed in this option are not checked by the rule.

  ```json
  {
    "linter": {
      "rules": {
        "a11y": {
          "noRedundantRoles": {
            "options": {
              "ignoreElements": ["button"]
            }
          }
        }
      }
    }
  }
  ```

- [#&#8203;12084](https://github.com/biomejs/biome/pull/12084) [`04e3750`](https://github.com/biomejs/biome/commit/04e3750f0e8169893fe63737616fcaf710e07fb6) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - The rule [`noRestrictedElements`](https://biomejs.dev/linter/rules/no-restricted-elements/) now supports HTML, Vue, Svelte, and Astro files. For example, with `{ "elements": { "marquee": "Use CSS animations instead." } }`, the following code is now reported:

  ```html
  <marquee>Breaking news</marquee>
  ```

- [#&#8203;11408](https://github.com/biomejs/biome/pull/11408) [`5a870f2`](https://github.com/biomejs/biome/commit/5a870f2be6851c54a597c01e28ff4b9a711fc956) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Added support for distributing named Grit rules, rule presets, and configurations through packages that have a manifest file.

  The field `plugins` is used to export named Grit plugins, and `configs` is used to export named configurations.
  Package entries must select a named export: `package/rule`, `package/presets/preset`, or `package/configs/config`. Bare package entries aren't supported.
  Rules consumed from another package are exposed under the consuming package's name, while package authors continue to reference them by their source package inside the manifest.
  Configurations consumed from another package are also exposed under the consuming package's name.

  ```json5
  // biome-manifest.json
  {
    "$schema": "./node_modules/@biomejs/biome/manifest_schema.json",
    "version": 1,
    "plugins": {
      "rules": [
        "@org/shared-rules/noDeprecatedApi",
        "@org/strict-rules/presets/recommended",
        { "useCompanyLogger": "./rules/useCompanyLogger.grit" }
      ],
      "presets": {
        "recommended": [
          "useCompanyLogger",
          "@org/shared-rules/noDeprecatedApi"
        ]
      }
    },
    "configs": [
      "@org/shared-configs/configs/recommended",
      { "base": "./configs/base.json" }
    ]
  }
  ```

  The package must publish the manifest and every referenced file, for example, through the `files` field in `package.json`.
  Plugin authors can expose their manifest through the `biome` condition with `./biome-manifest.json` as its value.

  ```json5
  // package.json
  {
    "name": "@org/biome-plugin",
    "exports": {
      "biome": "./biome-manifest.json",
      "default": "./index.js"
    },
    "files": ["biome-manifest.json", "rules", "configs"]
  }
  ```

  And then, you can load the rules in your `biome.json`:

  ```json
  // biome.json
  {
    "plugins": [
      "@org/biome-plugin/useCompanyLogger",
      "@org/biome-plugin/presets/recommended"
    ]
  }
  ```

  For more information on how to create a plugin to distribute via npm, check the relative [guide](https://biomejs.dev/guides/publish-packages/).

- [#&#8203;12264](https://github.com/biomejs/biome/pull/12264) [`90f2eaf`](https://github.com/biomejs/biome/commit/90f2eafe69230f98a29f3e2c831ece0a7153af07) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;11082](https://github.com/biomejs/biome/issues/11082): glob patterns in the `includes` option of a plugin are now matched against file paths relative to the directory of the configuration file, the same as `files.includes` and `overrides[].includes`.

  Previously, the patterns were matched against the absolute file path, so a pattern such as `packages/**/src/**` matched no files and the plugin never ran.

  ```json
  {
    "plugins": [
      { "path": "./my-plugin.grit", "includes": ["packages/**/src/**"] }
    ]
  }
  ```

  Patterns that start with `**/` keep working. Patterns that contain the absolute path of the project no longer match, and must be rewritten as relative patterns.

- [#&#8203;11133](https://github.com/biomejs/biome/pull/11133) [`1df00de`](https://github.com/biomejs/biome/commit/1df00deddfcde159e62171c991542eab6563aad8) Thanks [@&#8203;dlecan](https://github.com/dlecan)! - Added Android (Termux) support to the npm distribution ([#&#8203;1340](https://github.com/biomejs/biome/issues/1340)). `npm install @biomejs/biome` now works on Termux through the new `@biomejs/cli-android-arm64` and `@biomejs/cli-android-x64` packages, which reuse the static musl binaries.

- [#&#8203;12132](https://github.com/biomejs/biome/pull/12132) [`c5fadc4`](https://github.com/biomejs/biome/commit/c5fadc4a38758e46f4caee71d6d18b657ddb329b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Added SCSS support throughout the toolchain. Biome can now format and lint `.scss` files, and recognizes `.module.scss` files as CSS Modules.

- [#&#8203;10837](https://github.com/biomejs/biome/pull/10837) [`754432c`](https://github.com/biomejs/biome/commit/754432cae3c36722cdd4c654fe8b18f0a2fef3b2) Thanks [@&#8203;JamBalaya56562](https://github.com/JamBalaya56562)! - Added support for Google Apps Script (`.gs`) files.

  They are parsed as JavaScript scripts, so ES module `import`/`export` statements are reported as errors (Apps Script has no module system). Common Apps Script service globals (e.g. `SpreadsheetApp`, `DriveApp`, `Logger`) are recognized by `noUndeclaredVariables` and `noGlobalAssign`, and the list can be extended through the `javascript.globals` option.

- [#&#8203;11126](https://github.com/biomejs/biome/pull/11126) [`fa63050`](https://github.com/biomejs/biome/commit/fa63050d37f0ee45195ca62bf192c5e9800705b6) Thanks [@&#8203;Punisheroot](https://github.com/Punisheroot)! - Biome now recognizes files with the `.htm` extension as HTML.

- [#&#8203;12291](https://github.com/biomejs/biome/pull/12291) [`6c6619e`](https://github.com/biomejs/biome/commit/6c6619e55e1ca9a2cf93483bd8eed67477c2f548) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Changed the dependency that enables the [`tailwind` domain](https://biomejs.dev/linter/domains/#tailwind) automatically. The domain is now enabled when `package.json` declares `tailwindcss` v4 or later, instead of v3 or later, because we are currently targeting Tailwind v4 support. The domain can always be enabled manually.

- [#&#8203;11394](https://github.com/biomejs/biome/pull/11394) [`de1ad4c`](https://github.com/biomejs/biome/commit/de1ad4c4c5898524d783f5ea2c22254c1b130ef4) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - #### Markdown is now supported

  Added support for linting and formatting Markdown files. The first version of Biome Markdown parser has 100% compatibility
  against CommonMark.

  Other variants of Markdown, such as GitHub Flavored Markdown (GFM) aren't currently supported; however, we plan to support them soon.

  Formatter and Linter are automatically enabled by default.

  ##### Markdown parser

  The parser comes with an opt-in option to enable frontmatter parsing. When enabled, the first thematic break `---` is considered the opening fence of the frontmatter:

  ```json5
  // biome.json
  {
    "markdown": {
      "parser": {
        "frontmatter": true
      }
    }
  }
  ```

  ```md
  ---
  title: Lorem ipsum
  ---
  ```

  The parser also comes with an opt-in option called `cjkFriendlyEmphasis`. When enabled, the parser follows the [CommonMark CJK-friendly amendments](https://github.com/tats-u/markdown-cjk-friendly/blob/main/specification.md) and recognizes emphasis markers, such as `**`, placed directly next to Chinese, Japanese, or Korean text. Enable it only when the tool that renders your Markdown supports the same amendments, because the option changes which text Biome formats and lints as emphasis:

  ```json5
  // biome.json
  {
    "markdown": {
      "parser": {
        "cjkFriendlyEmphasis": true
      }
    }
  }
  ```

  With the option enabled, the following text is parsed as bold, instead of as literal `**`:

  ```md
  **このアスタリスクは強調記号として認識されず、そのまま表示されます。**この文のせいで。
  ```

  ##### Markdown formatter

  The formatter has great compatibility with Prettier formatting, more than 90% detected by our infrastructure. The formatter ships with
  a new option called `proseWrap`, that allows controlling how the Biome formatter should wrap paragraphs.

  For example, when `proseWrap` is set to `always`, the formatter will wrap the paragraph to match the configured `lineWidth`:

  ```json5
  // biome.json
  {
    "markdown": {
      "formatter": {
        "lineWidth": 20,
        "proseWrap": "always"
      }
    }
  }
  ```

  ```md
  Very tiny line width, so
  the paragraph is more
  compact.
  ```

  ##### Markdown linter

  The linter ships with a few rules inspired by [markdownlint](https://github.com/markdownlint/markdownlint). We plan to ship more rules in the upcoming releases.

  Some rules you can start using already:

  - [`useTopLevelHeading`](https://biomejs.dev/linter/rules/use-top-level-heading/)
  - [`useConsistentHeadingLevel`](https://biomejs.dev/linter/rules/use-consistent-heading-level/)

  ##### Markdown snippets

  Biome recognizes the code inside fenced code blocks, frontmatter, and HTML blocks as embedded languages, and formats it with
  the formatter of its language and your configuration:

  ````diff
   ```js
  -const   value   =   {a:1,b:2}
  +const value = { a: 1, b: 2 };
   ```
  ````

  HTML blocks are formatted only when the HTML formatter is enabled. A block with a syntax error stays as written, and Biome
  still formats the rest of the file.

  The option `markdown.formatter.formatEmbeds` controls this behavior, and it's enabled by default. Set it to `false` to keep
  the code of these blocks as written:

  ```json5
  // biome.json
  {
    "markdown": {
      "formatter": {
        "formatEmbeds": false
      }
    }
  }
  ```

  The command `biome migrate prettier` migrates the Prettier option [`embeddedLanguageFormatting`](https://prettier.io/docs/options#embedded-language-formatting)
  to `markdown.formatter.formatEmbeds`.

  The option `markdown.analyzeEmbeds` runs the linter and assist actions on the same blocks, with the rules and actions of
  their language, and reports their syntax errors. It's disabled by default, because fenced code blocks usually contain
  examples or partial code:

  ```json5
  // biome.json
  {
    "markdown": {
      "analyzeEmbeds": true
    }
  }
  ```

- [#&#8203;11634](https://github.com/biomejs/biome/pull/11634) [`04c3f5d`](https://github.com/biomejs/biome/commit/04c3f5d95ba0c1bbdc21ac5d9b2dbc94c2930a1d) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Added `biome inspect plugins` to list resolved rules by plugin and importing preset without loading or executing plugin code. Include globs show which files each import targets, and `--path` selects a target file. Fixed Markdown linter overrides and their configuration inspection.

- [#&#8203;12282](https://github.com/biomejs/biome/pull/12282) [`a3fa0d6`](https://github.com/biomejs/biome/commit/a3fa0d6526e5ce6ab3b0c87fb74813ecdef0b2bd) Thanks [@&#8203;ff1451](https://github.com/ff1451)! - Added the new assist action [`useGraphqlSortedArguments`](https://biomejs.dev/assist/actions/use-graphql-sorted-arguments/), which sorts the arguments of GraphQL fields and directives, and the arguments declared by field and directive definitions.

  **Invalid**:

  ```graphql
  query {
    users(orderBy: NAME, first: 10, after: "cursor") {
      name
    }
  }
  ```

- [#&#8203;10631](https://github.com/biomejs/biome/pull/10631) [`1077238`](https://github.com/biomejs/biome/commit/1077238e6361e163ab2462a3a81616cd026a7e4d) Thanks [@&#8203;thibaut-pro](https://github.com/thibaut-pro)! - Added the `sortFirst` option to the [useSortedAttributes](https://biomejs.dev/assist/actions/use-sorted-attributes/) action (JSX and HTML). It takes a list of attribute names that are sorted before all other attributes, in the order given, while the remaining attributes keep their usual sort. This is useful to keep attributes such as `key` first.

  With the following configuration:

  ```json
  {
    "assist": {
      "actions": {
        "source": {
          "useSortedAttributes": {
            "level": "on",
            "options": { "sortFirst": ["key"] }
          }
        }
      }
    }
  }
  ```

  The attributes are reordered so that `key` comes first:

  ```jsx
  // Before
  <div className={styles.investment} key={investment.id} />;

  // After
  <div key={investment.id} className={styles.investment} />;
  ```

- [#&#8203;10424](https://github.com/biomejs/biome/pull/10424) [`189b7ba`](https://github.com/biomejs/biome/commit/189b7ba08bab5bb7c1dfc3edd4029bee0e68c01e) Thanks [@&#8203;LinusU](https://github.com/LinusU)! - Added the `partitionByNewLine` option to the `useSortedInterfaceMembers` assist. When enabled, members separated by a blank line are kept in their own section and sorted only within that section, preserving the logical groupings the author intentionally introduced with empty lines.

##### Patch Changes

- [#&#8203;11953](https://github.com/biomejs/biome/pull/11953) [`354f74c`](https://github.com/biomejs/biome/commit/354f74c3c96b459fa59da9d5ce7d13abe929add1) Thanks [@&#8203;Th3S4mur41](https://github.com/Th3S4mur41)! - Enhanced the nursery rule [`useLogicalProperties`](https://biomejs.dev/linter/rules/use-logical-properties/) to check physical CSS values in addition to physical property names.

  The rule recognizes physical values in `frame-sizing`, `anchor-size()`, and `anchor()`, with direction-aware replacements controlled by the existing `direction` option.

  For `justify-content: left` and `justify-content: right`, the rule reports a diagnostic without an automatic replacement because the correct logical alignment depends on the layout axis.

  This is a second part of the rule covering parts of [#&#8203;9034](https://github.com/biomejs/biome/issues/9034)

- [#&#8203;12175](https://github.com/biomejs/biome/pull/12175) [`3730b32`](https://github.com/biomejs/biome/commit/3730b329dfddd65d89f40975cc6efd732c0ec0b7) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noDoubleComparison`](https://biomejs.dev/linter/rules/no-double-comparison/), which reports two comparisons of the same values that can be combined into one. For example, `x === y || x < y` can be written as `x <= y`.

- [#&#8203;12166](https://github.com/biomejs/biome/pull/12166) [`25eb10c`](https://github.com/biomejs/biome/commit/25eb10c1536469e597007d9bc31089900b5a7c19) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the new nursery rule [`noNestedSwitch`](https://biomejs.dev/linter/rules/no-nested-switch/), which disallows `switch` statements inside other `switch` statements.

  ```js
  switch (n) {
    case 0:
      switch (m) {} // reported
  }
  ```

- [#&#8203;12170](https://github.com/biomejs/biome/pull/12170) [`872ac9f`](https://github.com/biomejs/biome/commit/872ac9f47d88b1fb31ff88e5c964442a38dcfd46) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the new nursery rule [`noNestedTemplateLiterals`](https://biomejs.dev/linter/rules/no-nested-template-literals/), which disallows template literals written inside other template literals.

  ```js
  const message = `I have ${color ? `${count} ${color}` : count} apples`;
  ```

- [#&#8203;12111](https://github.com/biomejs/biome/pull/12111) [`f72375f`](https://github.com/biomejs/biome/commit/f72375f9bf96123771a7c74362c9003c448e076c) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noObjectConstructor`](https://biomejs.dev/linter/rules/no-object-constructor/), which disallows calling the `Object` constructor without arguments, such as `new Object()` or `Object()`. Biome can replace these calls with the object literal `{}`.

- [#&#8203;12254](https://github.com/biomejs/biome/pull/12254) [`cb88f07`](https://github.com/biomejs/biome/commit/cb88f072f66f90c478908fcb42786ea9b6b30851) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noSvelteClassDirective`](https://biomejs.dev/linter/rules/no-svelte-class-directive/), which reports Svelte's `class:` directive. Since Svelte 5.16, the `class` attribute accepts objects and arrays, and Svelte recommends them over the directive.

  ```svelte
  <div class:active={isActive}></div>
  ```

- [#&#8203;12186](https://github.com/biomejs/biome/pull/12186) [`30aa7d2`](https://github.com/biomejs/biome/commit/30aa7d2c0e911cfa36507b3624763614b11afdc1) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the new nursery rule [`noUselessDateGetTime`](https://biomejs.dev/linter/rules/no-useless-date-get-time/), which reports dates converted with `.getTime()` before being passed to the `Date` constructor. Passing the date directly, as in `new Date(date)`, already creates a copy.

  ```js
  const copy = new Date(date.getTime());
  ```

- [#&#8203;12229](https://github.com/biomejs/biome/pull/12229) [`5f8ea6c`](https://github.com/biomejs/biome/commit/5f8ea6cc9a75f666e5f8cba2f7fb5aa6b13d8da5) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noVueLifecycleAfterAwait`](https://biomejs.dev/linter/rules/no-vue-lifecycle-after-await/), which reports Vue lifecycle hooks, such as `onMounted()`, that are registered after an `await` in a component's `setup()` function. Vue doesn't run these hooks.

  ```vue
  <script>
  import { onMounted } from "vue";

  export default {
    async setup() {
      await fetchUser();
      onMounted(() => {});
    },
  };
  </script>
  ```

- [#&#8203;12077](https://github.com/biomejs/biome/pull/12077) [`3dd096f`](https://github.com/biomejs/biome/commit/3dd096f2123eb393160cb76056a52402e3d325b7) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noVueRootVIf`](https://biomejs.dev/linter/rules/no-vue-root-v-if/), which disallows `v-if` on the only root element of a Vue component template.

  ```vue
  <template>
    <div v-if="visible">Content</div>
  </template>
  ```

- [#&#8203;12136](https://github.com/biomejs/biome/pull/12136) [`b92638b`](https://github.com/biomejs/biome/commit/b92638b40689c7714fe3d84db06a7a62110f796d) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noVueShadowNativeEvents`](https://biomejs.dev/linter/rules/no-vue-shadow-native-events/), which reports Vue component events named after built-in browser events, such as `click` or `keydown`.

  ```vue
  <script setup>
  // Invalid
  const emit = defineEmits(["click"]);
  emit("click");
  </script>
  ```

- [#&#8203;12135](https://github.com/biomejs/biome/pull/12135) [`31a29b6`](https://github.com/biomejs/biome/commit/31a29b6e7ef736d2bdf6eec0a0a1bbf91b62032d) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noVueVHtml`](https://biomejs.dev/linter/rules/no-vue-v-html/), which disallows Vue's `v-html` directive. `v-html` inserts its value into the page as HTML, so text from users can run code on your page (cross-site scripting, or XSS).

  ```vue
  <template>
    <div v-html="content"></div>
  </template>
  ```

- [#&#8203;12134](https://github.com/biomejs/biome/pull/12134) [`60329af`](https://github.com/biomejs/biome/commit/60329afef23f5e314c499d0114f3d7fc35a956c3) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the new nursery rule [`noVueVText`](https://biomejs.dev/linter/rules/no-vue-v-text/), which disallows Vue's `v-text` directive in favor of text interpolation.

  For example, the following snippet triggers the rule:

  ```vue
  <div v-text="message"></div>
  ```

- [#&#8203;9817](https://github.com/biomejs/biome/pull/9817) [`241b861`](https://github.com/biomejs/biome/commit/241b86197fb26d230edf37febcfb1de3f2dfb1e0) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the new nursery rule [`noZeroFractions`](https://biomejs.dev/linter/rules/no-zero-fractions/), which disallows numeric literals with redundant zero fractions or dangling dots such as `1.0` and `1.`. Biome can now simplify these literals to shorter equivalents.

- [#&#8203;12109](https://github.com/biomejs/biome/pull/12109) [`b45d426`](https://github.com/biomejs/biome/commit/b45d4263287de9848701e8c3e634a9371975b4a9) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`useConsistentJsonFileRead`](https://biomejs.dev/linter/rules/use-consistent-json-file-read/), which enforces a consistent way of reading JSON files before passing them to `JSON.parse()`. By default, it reports files read as a `Buffer`; set `readAs` to `"buffer"` to report files read as a UTF-8 string instead.

  ```js
  const packageJson = JSON.parse(await fs.readFile("./package.json"));
  ```

- [#&#8203;12129](https://github.com/biomejs/biome/pull/12129) [`b57f874`](https://github.com/biomejs/biome/commit/b57f874123b9f7ea20440fa6a670193a5bf7c5b5) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the new nursery rule [`useMatchingFunctionName`](https://biomejs.dev/linter/rules/use-matching-function-name/), which requires a named function expression to have the same name as the variable or property it's assigned to.

  ```js
  // The function name `bar` doesn't match the variable name `foo`.
  const foo = function bar() {};
  ```

- [#&#8203;12169](https://github.com/biomejs/biome/pull/12169) [`0f1ae53`](https://github.com/biomejs/biome/commit/0f1ae5301c7d253660b8a41a07ea08a4f8e6935f) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the new nursery rule [`useSimplifiedBooleanReturn`](https://biomejs.dev/linter/rules/use-simplified-boolean-return/), which reports `if` statements that only return `true` or `false` and can be replaced by returning the condition directly.

  ```js
  function isPositive(value) {
    if (value > 0) {
      return true;
    }
    return false;
  }
  ```

- [#&#8203;11957](https://github.com/biomejs/biome/pull/11957) [`b2db9f2`](https://github.com/biomejs/biome/commit/b2db9f2c089928a28fe40a8b48be8f9b868164ab) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`useSvelteKitResolve`](https://biomejs.dev/linter/rules/use-svelte-kit-resolve/), which requires internal links and calls to `goto()`, `pushState()`, and `replaceState()` to use paths built with SvelteKit's `resolve()`.

  ```svelte
  <a href="/about">About</a>
  ```

- [#&#8203;12235](https://github.com/biomejs/biome/pull/12235) [`b7c1870`](https://github.com/biomejs/biome/commit/b7c1870a9d02c23afe522ef9d12b3547a31ce363) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`useSvelteReactiveClasses`](https://biomejs.dev/linter/rules/use-svelte-reactive-classes/), which reports `Date`, `Map`, `Set`, `URL`, and `URLSearchParams` objects that are modified in Svelte files or exported from Svelte modules. Svelte doesn't detect changes made inside these built-in objects, so the rule suggests the matching classes from `svelte/reactivity`.

  ```svelte
  <script>
    const tags = new Set();
    function addTag(tag) {
      tags.add(tag);
    }
  </script>
  ```

- [#&#8203;12172](https://github.com/biomejs/biome/pull/12172) [`b47674d`](https://github.com/biomejs/biome/commit/b47674dc21e16a829818aa4331948fea3e2abff0) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`useSvelteShorthandDirective`](https://biomejs.dev/linter/rules/use-svelte-shorthand-directive/), which enforces the shorthand syntax for Svelte `bind:`, `class:`, and `style:` directives. For example, `<input bind:value={value} />` is now reported and can be fixed to `<input bind:value />`.

- [#&#8203;12137](https://github.com/biomejs/biome/pull/12137) [`4aeca96`](https://github.com/biomejs/biome/commit/4aeca9688f062c712046ff1fc62fea5a8b8eaff5) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`useVueMatchingComponentFileName`](https://biomejs.dev/linter/rules/use-vue-matching-component-file-name/), which requires the name of a Vue component to match its file name. The following component in `MyComponent.vue` is now reported:

  ```vue
  <script>
  export default {
    name: "MyButton",
  };
  </script>
  ```

- [#&#8203;12075](https://github.com/biomejs/biome/pull/12075) [`de453c0`](https://github.com/biomejs/biome/commit/de453c0fc8a73f8e875c2f5ad3c8f3fec3e01ed6) Thanks [@&#8203;tionway](https://github.com/tionway)! - Fixed [#&#8203;11902](https://github.com/biomejs/biome/issues/11902): `biome migrate --write` now successfully migrates empty nested configuration files without introducing an invalid trailing comma.

- [#&#8203;12149](https://github.com/biomejs/biome/pull/12149) [`83df808`](https://github.com/biomejs/biome/commit/83df80848ec24a57d91bc9d5a1364abe45d85c98) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Switched [`useTailwindSortedClasses`](https://biomejs.dev/linter/rules/use-tailwind-sorted-classes/) to the Tailwind CSS v4 class order. The rule now checks the attributes and functions set in the top-level `tailwind` configuration, and its own `attributes` and `functions` options were removed. Run `biome migrate --write` to move them to `tailwind.attributes`, `tailwind.mergeFunctions`, and `tailwind.variantFunctions`.

  The rule is now part of the `project` domain, so enabling it makes Biome scan your project.

- [#&#8203;12202](https://github.com/biomejs/biome/pull/12202) [`9f1cfde`](https://github.com/biomejs/biome/commit/9f1cfdea333b1bdb10eeaca1f985f161e4e658db) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;12184](https://github.com/biomejs/biome/issues/12184): [`useImportExtensions`](https://biomejs.dev/linter/rules/use-import-extensions/) no longer misses relative imports with `.jsx` or `.tsx` extensions when using `extensionMappings` or `forceJsExtensions`. The rule reports these imports when the configured replacement resolves to an existing file.

- [#&#8203;12081](https://github.com/biomejs/biome/pull/12081) [`fd4df34`](https://github.com/biomejs/biome/commit/fd4df3476f8fe1f88784ff0f5687e8a9180348be) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`useCapitalizedConstructors`](https://biomejs.dev/linter/rules/use-capitalized-constructors/), a port of ESLint's `new-cap`. It reports `new` expressions whose callee name starts with a lowercase letter, and calls without `new` whose callee name starts with an uppercase letter.

  ```js
  const friend = new person();
  const other = Person();
  ```

- [#&#8203;12061](https://github.com/biomejs/biome/pull/12061) [`36aa8c3`](https://github.com/biomejs/biome/commit/36aa8c34e2b1f88e1dee476e3adbc1318193b4b0) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noExcessiveStatementsPerFunction`](https://biomejs.dev/linter/rules/no-excessive-statements-per-function/), a port of ESLint's [`max-statements`](https://eslint.org/docs/latest/rules/max-statements). It reports functions that contain more statements than the configured `max` (default: `10`).

- [#&#8203;12053](https://github.com/biomejs/biome/pull/12053) [`b91a445`](https://github.com/biomejs/biome/commit/b91a4452b790e7f6b5dab34e9fc009bbc0b0cc83) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`useVueConsistentEventHyphenation`](https://biomejs.dev/linter/rules/use-vue-consistent-event-hyphenation/), a port of `vue/v-on-event-hyphenation`. It enforces a consistent hyphenation style for event names in `v-on` directives on custom components. By default, hyphenated names are required, so `<MyComponent @customEvent="handler" />` is reported.

- [#&#8203;12327](https://github.com/biomejs/biome/pull/12327) [`2266df2`](https://github.com/biomejs/biome/commit/2266df231e43960c04804ea7ff81ab51d4aaad0a) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved the performance of the Biome CLI on projects with many files during cleanup.

- [#&#8203;12110](https://github.com/biomejs/biome/pull/12110) [`cf408d5`](https://github.com/biomejs/biome/commit/cf408d5c8d95a3de8a1db8dc11022c68e871c704) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the recommended nursery rule [`noOctal`](https://biomejs.dev/linter/rules/no-octal/), which disallows legacy octal literals such as `071` and decimal literals with leading zeros such as `08`. Use `0o71` for explicit octal notation.

- [#&#8203;12066](https://github.com/biomejs/biome/pull/12066) [`d13d1ba`](https://github.com/biomejs/biome/commit/d13d1ba6c82da9593856bc69e35d7af5ae92c209) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Updated rule source metadata.

- [#&#8203;12393](https://github.com/biomejs/biome/pull/12393) [`c80f28c`](https://github.com/biomejs/biome/commit/c80f28cd192db22650c847cbd570e73fdd175c40) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;12389](https://github.com/biomejs/biome/issues/12389): the Svelte formatter no longer duplicates binding names when converting redundant `bind:` initializers to shorthand syntax.

  ```diff
  -<input bind:valuevalue>
  +<input bind:value>
  ```

- [#&#8203;12325](https://github.com/biomejs/biome/pull/12325) [`31a2fb0`](https://github.com/biomejs/biome/commit/31a2fb0a2c37ff9243a20cc385230eeb8e4eb221) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved the performance of the formatter in files with little or no comments.

- [#&#8203;12223](https://github.com/biomejs/biome/pull/12223) [`9f246d7`](https://github.com/biomejs/biome/commit/9f246d7382d60f5c2047c5261e5ec43833d63d56) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noAccidentalBitwiseOperators`](https://biomejs.dev/linter/rules/no-accidental-bitwise-operators/), which reports the bitwise operators `&`, `|`, and `|=` where the logical operators `&&`, `||`, and `||=` were likely intended.

  ```js
  if (obj & obj.prop) {}
  options = options | {};
  ```

- [#&#8203;12052](https://github.com/biomejs/biome/pull/12052) [`1a6fb41`](https://github.com/biomejs/biome/commit/1a6fb418c47708524fe85293ce2a0350f72b3160) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noVueBooleanDefault`](https://biomejs.dev/linter/rules/no-vue-boolean-default/), which disallows default values for Boolean props in Vue components. Vue already defaults an absent Boolean prop to `false`.

  ```vue
  <script setup lang="ts">
  withDefaults(defineProps<{ disabled?: boolean }>(), {
    disabled: true,
  });
  </script>
  ```

- [#&#8203;12177](https://github.com/biomejs/biome/pull/12177) [`215288b`](https://github.com/biomejs/biome/commit/215288b1c1463ccb77fe53cfe2cf864826b2c03e) Thanks [@&#8203;MustafaKemal0146](https://github.com/MustafaKemal0146)! - Fixed [#&#8203;4517](https://github.com/biomejs/biome/issues/4517): [`noConfusingVoidType`](https://biomejs.dev/linter/rules/no-confusing-void-type/) no longer reports `void` in union types that contain only `void` and `never`, such as `void | never`.

- [#&#8203;12461](https://github.com/biomejs/biome/pull/12461) [`259a84e`](https://github.com/biomejs/biome/commit/259a84e89b9fe061e31beb816d7bdf67647c01ab) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed GritQL JSON snippets so patterns such as `{ $key: $value }` can now bind metavariables in object keys and values.

- [#&#8203;12185](https://github.com/biomejs/biome/pull/12185) [`08cfbd2`](https://github.com/biomejs/biome/commit/08cfbd22d2eea517df081ad22f63bd1f4984f455) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed the Tailwind CSS parser splitting dashed utility names. Classes such as `drop-shadow!`, `flex-grow-0`, and `max-w-screen-lg` now keep `drop-shadow`, `flex-grow`, and `max-w-screen` as their utility names.

- [#&#8203;12444](https://github.com/biomejs/biome/pull/12444) [`ef61338`](https://github.com/biomejs/biome/commit/ef61338b24b7125fbc3cb3d4792ec90fa005a86e) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed the match count reported by `biome search`. The summary and the `matches` field of the JSON reporters now count every match, instead of the number of searched files.

- [#&#8203;12292](https://github.com/biomejs/biome/pull/12292) [`4eadd57`](https://github.com/biomejs/biome/commit/4eadd575d6890a785998279193ceeff9d3098850) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [withastro/compiler-rs#199](https://github.com/withastro/compiler-rs/issues/199): processing instructions such as `<?xml version="1.0" encoding="UTF-8"?>` no longer cause parse errors in Astro and Vue files.

- [#&#8203;12152](https://github.com/biomejs/biome/pull/12152) [`7a573de`](https://github.com/biomejs/biome/commit/7a573de6ad415b1549a6852ae3576088e99319cd) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed the Tailwind class parser rejecting arbitrary variants whose selector starts with an attribute selector. Classes like `[[data-variant=legend]+&]:-mt-1.5` and `group-has-[[data-slot=item-description]]/item:self-start` now parse correctly.

- [#&#8203;12155](https://github.com/biomejs/biome/pull/12155) [`851d803`](https://github.com/biomejs/biome/commit/851d803c150df25c53009a324641509a20110e16) Thanks [@&#8203;erenbati](https://github.com/erenbati)! - [biomejs/biome#11949](https://github.com/biomejs/biome/issues/11949): Fixed [`noSelfAssign`](https://biomejs.dev/linter/rules/no-self-assign/) to detect self-assignments when equivalent property names use dot and bracket notation, including numeric and string-literal keys.

- [#&#8203;12112](https://github.com/biomejs/biome/pull/12112) [`db7ede6`](https://github.com/biomejs/biome/commit/db7ede6a8279fec3bcb97e03b4f105868ee5f967) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noPromiseExecutorReturn`](https://biomejs.dev/linter/rules/no-promise-executor-return/), which disallows returning values from the function passed to `new Promise()`, because `new Promise()` ignores them.

  ```js
  new Promise((resolve) => resolve(1));
  ```

- [#&#8203;12404](https://github.com/biomejs/biome/pull/12404) [`fcd3d74`](https://github.com/biomejs/biome/commit/fcd3d7400d346df6fdcd0ba3f23afdbf86ce55b6) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;12374](https://github.com/biomejs/biome/issues/12374): `biome migrate eslint` now preserves `eqeqeq`'s null comparison options when configuring [`noDoubleEquals`](https://biomejs.dev/linter/rules/no-double-equals/). Migrating the default ESLint configuration now sets `ignoreNull: false`, so comparisons such as `x == null` remain reported.

- [#&#8203;12426](https://github.com/biomejs/biome/pull/12426) [`0fe3d2b`](https://github.com/biomejs/biome/commit/0fe3d2b85a89ea3cb8b4bb8a3bc0a7adf10b1d37) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved the performance of linting by computing the range of a syntax node without allocating its edge tokens.

- [#&#8203;12441](https://github.com/biomejs/biome/pull/12441) [`c4199d7`](https://github.com/biomejs/biome/commit/c4199d791f59f2c1df243a5ea0421c18fc80e33d) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved the performance of commands that run with `--use-server`, such as `biome check --use-server`. The Biome daemon now processes the files of a command on all available CPU cores, instead of at most four files at a time.

- [#&#8203;12183](https://github.com/biomejs/biome/pull/12183) [`c08e3c3`](https://github.com/biomejs/biome/commit/c08e3c3f4ebc93e43d6b10d4bd995201b4128f21) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed the Tailwind class parser rejecting CSS variable shorthands whose fallback contains parentheses. Classes like `bg-(--a,var(--b))`, `bg-(--a,calc(1px))`, and `after:bg-(--drawer-bleed-background,var(--color-popover))` now parse correctly, including in variants (`max-(--a,var(--b)):flex`) and modifiers (`bg-red-500/(--a,var(--b))`).

- [#&#8203;12441](https://github.com/biomejs/biome/pull/12441) [`c4199d7`](https://github.com/biomejs/biome/commit/c4199d791f59f2c1df243a5ea0421c18fc80e33d) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed `biome stop` waiting 15 seconds and then failing with "the request to the remote workspace timed out", even though the Biome daemon had stopped. The command now returns as soon as the daemon shuts down.

- [#&#8203;12117](https://github.com/biomejs/biome/pull/12117) [`ae0cabd`](https://github.com/biomejs/biome/commit/ae0cabd51cddaaa0716221463cf2e0766b290501) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [`noUnreachable`](https://biomejs.dev/linter/rules/no-unreachable/), [`noUnreachableSuper`](https://biomejs.dev/linter/rules/no-unreachable-super/), [`useGetterReturn`](https://biomejs.dev/linter/rules/use-getter-return/), [`useIterableCallbackReturn`](https://biomejs.dev/linter/rules/use-iterable-callback-return/) and [`noFallthroughSwitchClause`](https://biomejs.dev/linter/rules/no-fallthrough-switch-clause/) skipping functions that contain an unlabeled `break` or `continue` inside a labeled loop or `switch`.

  For example, `noUnreachable` now reports `afterBreak()` here:

  ```js
  function f(xs) {
    outer: for (const x of xs) {
      break;
      afterBreak();
    }
  }
  ```

- [#&#8203;11093](https://github.com/biomejs/biome/pull/11093) [`78c992f`](https://github.com/biomejs/biome/commit/78c992fe8678523e8bce87be35025d5fd5d9b09c) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed CSS formatting for multiline function arguments preceded by comments:

  ```diff
   .example {
     value: outer(
       1,
       /* comment */
       nested(
  -      first,
  -      second
  -    )
  +        first,
  +        second
  +      )
     );
   }
  ```

- [#&#8203;12474](https://github.com/biomejs/biome/pull/12474) [`e55a750`](https://github.com/biomejs/biome/commit/e55a750b69c6f31756d3794379b8acd15ee08b7a) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;12471](https://github.com/biomejs/biome/issues/12471): a comment above a CSS rule no longer removes the indentation of the rule's wrapped selector.

  ```css
  /* comment */
  .sidebar-navigation
    .sidebar-navigation-item-with-a-long-descriptive-class-name {
    color: red;
  }
  ```

- [#&#8203;12180](https://github.com/biomejs/biome/pull/12180) [`6ddce62`](https://github.com/biomejs/biome/commit/6ddce62ba25364ce66987fd75625052357b8e02e) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;12179](https://github.com/biomejs/biome/issues/12179): the CSS parser now accepts Tailwind `@custom-variant` names that start with a digit, such as the `2xl` breakpoint.

  ```css
  @custom-variant 2xl (@container page (width >= 96rem));
  ```

- [#&#8203;12440](https://github.com/biomejs/biome/pull/12440) [`6636760`](https://github.com/biomejs/biome/commit/6636760be362588232aed2b9df06c5426b0ec740) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;12433](https://github.com/biomejs/biome/issues/12433): with `html.experimentalFullSupportEnabled`, the editor now offers code actions for diagnostics inside embedded code, such as expressions and scripts in Astro, Vue, Svelte, and HTML files.

- [#&#8203;12480](https://github.com/biomejs/biome/pull/12480) [`00771b4`](https://github.com/biomejs/biome/commit/00771b48c3ffecdbf1c62383ceff0bdb3430d48f) Thanks [@&#8203;vidigoat](https://github.com/vidigoat)! - Fixed the formatter duplicating comments inside an empty object, array, or class that is spread in JSX. Each formatting pass added another copy of the comment.

  ```diff
    <div
    	{
    		...{
    			/* comment */
  - 		}/* comment */
  + 		}
    	}
    />
  ```

- [#&#8203;11093](https://github.com/biomejs/biome/pull/11093) [`78c992f`](https://github.com/biomejs/biome/commit/78c992fe8678523e8bce87be35025d5fd5d9b09c) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;10131](https://github.com/biomejs/biome/issues/10131): Biome now correctly parses curried arrow functions in ternary consequents when the inner arrow's parameters use a destructuring pattern, e.g. `cond ? (x) => ({ a, b }) => body : alt`.

- [#&#8203;11563](https://github.com/biomejs/biome/pull/11563) [`a4e6528`](https://github.com/biomejs/biome/commit/a4e6528a4a0ff0405d159b5ada0e30f8f2c759e2) Thanks [@&#8203;santichausis](https://github.com/santichausis)! - Fixed [#&#8203;11419](https://github.com/biomejs/biome/issues/11419): [`noAdjacentSpacesInRegex`](https://biomejs.dev/linter/rules/no-adjacent-spaces-in-regex/) no longer applies its fix inside a regex character class (`[...]`), where it was changing what the class matches instead of just clarifying the spacing.

  For example, Biome used to "fix" this regex into matching different characters:

  ```js
  const before = /[\s   ]/;
  // Biome used to rewrite this to /[\s {3}]/, which is a different regex:
  // {3} isn't a quantifier inside a character class, it's three more
  // characters to match — the fixed regex now also matches "1", "2", "{", "}".
  ```

  Adjacent spaces outside a character class are still merged into a quantifier as before.

- [#&#8203;12451](https://github.com/biomejs/biome/pull/12451) [`c71fe6a`](https://github.com/biomejs/biome/commit/c71fe6afdf2342e38ccc4153e49f6c2ddc3a3aaa) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;12445](https://github.com/biomejs/biome/issues/12445): [`noTsIgnore`](https://biomejs.dev/linter/rules/no-ts-ignore/) no longer reports comments that merely mention `@ts-ignore`, such as `// see the note on @ts-ignore below` or JSDoc prose. The rule now follows TypeScript and only reports `@ts-ignore` at the start of a comment, or at the start of the last line of a block comment. The fix now rewrites only the directive.

- [#&#8203;12266](https://github.com/biomejs/biome/pull/12266) [`33fef85`](https://github.com/biomejs/biome/commit/33fef858a6116777bd7cd4084b4a558dd33e79f3) Thanks [@&#8203;JamBalaya56562](https://github.com/JamBalaya56562)! - Fixed [#&#8203;12265](https://github.com/biomejs/biome/issues/12265): Biome now uses the correct defaults for `semi` and `singleQuote` when migrating a Prettier configuration that doesn't set them. The migrated configuration uses `"semicolons": "always"` and `"quoteStyle": "double"`, matching Prettier's defaults.

- [#&#8203;11093](https://github.com/biomejs/biome/pull/11093) [`78c992f`](https://github.com/biomejs/biome/commit/78c992fe8678523e8bce87be35025d5fd5d9b09c) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;10515](https://github.com/biomejs/biome/issues/10515): `biome check --write` was not idempotent on Svelte files — multi-line template literals in `<script>` blocks and block comments in `<style>` blocks gained an extra indent level on every run.

- [#&#8203;12246](https://github.com/biomejs/biome/pull/12246) [`b073c2f`](https://github.com/biomejs/biome/commit/b073c2f6382ab08aa2808ffcbb1d96da279efdea) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed the parsing of Svelte `class:` and `style:` directive names. Modifiers such as `|important` in `style:color|important` are now parsed as modifiers instead of being part of the name, and `/` in `<input class:invalid/>` now closes the tag.

- [#&#8203;12246](https://github.com/biomejs/biome/pull/12246) [`b073c2f`](https://github.com/biomejs/biome/commit/b073c2f6382ab08aa2808ffcbb1d96da279efdea) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;11215](https://github.com/biomejs/biome/issues/11215): [`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/) no longer reports variables in Svelte components that are only used through the `class:` and `style:` directive shorthands, such as `<div class:active>` and `<div style:color>`.

- [#&#8203;12104](https://github.com/biomejs/biome/pull/12104) [`2bb4838`](https://github.com/biomejs/biome/commit/2bb4838a6823cc05283adc3d125ccc6d75938a23) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;12098](https://github.com/biomejs/biome/issues/12098): [`useImportExtensions`](https://biomejs.dev/linter/rules/use-import-extensions/) now reports relative imports without extensions in Vue, Svelte, and Astro files when `html.experimentalFullSupportEnabled` is enabled.

- [#&#8203;12441](https://github.com/biomejs/biome/pull/12441) [`c4199d7`](https://github.com/biomejs/biome/commit/c4199d791f59f2c1df243a5ea0421c18fc80e33d) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed commands that run with `--use-server` reporting `cancelled because of pending write` for some files instead of checking them. Biome now sends a cancelled request again, so the command reports the same diagnostics as a run without `--use-server`.

- [#&#8203;12242](https://github.com/biomejs/biome/pull/12242) [`0ec0a46`](https://github.com/biomejs/biome/commit/0ec0a4627a008a21ec29860d2ef5a80845e90202) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed a false positive in [`useVueConsistentDefinePropsDeclaration`](https://biomejs.dev/linter/rules/use-vue-consistent-define-props-declaration/). The rule no longer reports calls such as `a.b.c(0)` or calls to a locally imported `defineProps` function. It now only checks calls to Vue's `defineProps` macro.

- [#&#8203;12244](https://github.com/biomejs/biome/pull/12244) [`fe217c6`](https://github.com/biomejs/biome/commit/fe217c6b794157b5430a8890f3f7b14cfd3bc38e) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed a false positive in [`noVueDuplicateKeys`](https://biomejs.dev/linter/rules/no-vue-duplicate-keys/) where variables created from props wrapped in `withDefaults()` were reported as duplicates of those props. The following code is now valid:

  ```vue
  <script setup lang="ts">
  import { toRefs } from "vue";

  const props = withDefaults(defineProps<{ text: string }>(), {});
  const { text } = toRefs(props);
  </script>
  ```

- [#&#8203;12240](https://github.com/biomejs/biome/pull/…
OIRNOIR pushed a commit to OIRNOIR/YouTube-Helper-Client that referenced this pull request Oct 28, 2026
This PR contains the following updates:

| Package | Type | Update | Change | Pending |
|---|---|---|---|---|
| [@biomejs/biome](https://biomejs.dev) ([source](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome)) | imports | minor | [`2.5.15` -> `2.6.2`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.5.15/2.6.2) | `2.6.3` |

---

### Release Notes

<details>
<summary>biomejs/biome (@&#8203;biomejs/biome)</summary>

### [`v2.6.2`](https://github.com/biomejs/biome/blob/HEAD/packages/@biomejs/biome/CHANGELOG.md#262)

[Compare Source](https://github.com/biomejs/biome/compare/30ffad1461051d595210f7fabcd67813942ebee4...@biomejs/[email protected])

##### Minor Changes

- [#&#8203;11479](https://github.com/biomejs/biome/pull/11479) [`5c60ba8`](https://github.com/biomejs/biome/commit/5c60ba83b6bb2442eb3d6157b328719d0c39a5c2) Thanks [@&#8203;nhedger](https://github.com/nhedger)! - Added a `--git` flag to `biome init`. The flag enables Git VCS integration and sets `vcs.useIgnoreFile` to `true` in the generated configuration, even when the command runs outside a Git repository.

- [#&#8203;11742](https://github.com/biomejs/biome/pull/11742) [`3a1356d`](https://github.com/biomejs/biome/commit/3a1356d089ee0e99c7a1c9f20df7785efe3f11b4) Thanks [@&#8203;Netail](https://github.com/Netail)! - Added the `biome migrate stylelint` command. It imports a Stylelint configuration and its ignore settings into your Biome configuration, mapping Stylelint rules to their Biome equivalents. Pass `--write` to apply the changes, and `--include-inspired` or `--include-nursery` to migrate additional rules.

- [#&#8203;12318](https://github.com/biomejs/biome/pull/12318) [`774b5b5`](https://github.com/biomejs/biome/commit/774b5b573259745d7b6a8545d39eed20f1620421) Thanks [@&#8203;Netail](https://github.com/Netail)! - Added the new assist action [`useGraphqlSortedDefinitions`](https://biomejs.dev/assist/actions/use-graphql-sorted-definitions/), which sorts the named definitions of a GraphQL document, such as types, type extensions, directives, fragments, and operations.

  **Invalid**:

  ```graphql
  type User {
    id: ID!
  }

  enum Role {
    ADMIN
    USER
  }

  directive @auth on FIELD_DEFINITION
  ```

- [#&#8203;6886](https://github.com/biomejs/biome/pull/6886) [`3479d15`](https://github.com/biomejs/biome/commit/3479d1583a888e2d393b32129616c7327af7c320) Thanks [@&#8203;christymcgrory](https://github.com/christymcgrory)! - `biome rage` now shows the resolved `files.includes` and `files.ignoreUnknown` configuration.

- [#&#8203;11102](https://github.com/biomejs/biome/pull/11102) [`0874b7f`](https://github.com/biomejs/biome/commit/0874b7f87a17474029763988c0c1f17812298441) Thanks [@&#8203;gameroman](https://github.com/gameroman)! - Added support for [`useTailwindSortedClasses`](https://biomejs.dev/linter/rules/use-tailwind-sorted-classes/) rule in HTML-ish files.

- [#&#8203;10711](https://github.com/biomejs/biome/pull/10711) [`40de5a0`](https://github.com/biomejs/biome/commit/40de5a0383473d37a4667f7cdb46817e0e73b686) Thanks [@&#8203;soconnor-seeq](https://github.com/soconnor-seeq)! - Adds a new `resolutionKind` option for object-syntax plugin entries.

  This allows shared Biome configs in monorepos to load local Grit plugins from the package that declares them instead of resolving plugin paths from the consuming project.

  ```json
  {
    "plugins": [
      { "path": "./grit/no-debugger.grit", "resolutionKind": "config" },
      { "path": "local-plugin.grit", "resolutionKind": "project" },
      { "path": "local-plugin.grit" }
    ]
  }
  ```

  Use `resolutionKind: "config"` to resolve the plugin from the configuration file that declares it. Use `resolutionKind: "project"` to resolve the plugin from the consuming project. When omitted, `resolutionKind` defaults to `project`. This only affects plugin resolution; `includes` still apply to end-user project files as usual.

- [#&#8203;11432](https://github.com/biomejs/biome/pull/11432) [`4befd08`](https://github.com/biomejs/biome/commit/4befd08057836e6d3881c768bf7a49e5820a7352) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Added `biome inspect config` to show resolved configuration values and their origins as human-readable diagnostics, including matching overrides.

  Configuration files can also extend other configurations up to ten levels deep. Repeated references to the same resolved file are ignored with an information diagnostic, while resolving multiple versions of one extended package produces an error.

- [#&#8203;11477](https://github.com/biomejs/biome/pull/11477) [`ab05554`](https://github.com/biomejs/biome/commit/ab05554518c2e2afef6294c191ef62f907cbc36e) Thanks [@&#8203;nhedger](https://github.com/nhedger)! - Added automatic Git VCS integration when running `biome init` inside a Git repository, including from nested directories and Git worktrees. The generated configuration sets `vcs.enabled` and `vcs.useIgnoreFile` to `true`, with `vcs.clientKind` set to `"git"`.

- [#&#8203;11451](https://github.com/biomejs/biome/pull/11451) [`1ac4b09`](https://github.com/biomejs/biome/commit/1ac4b09511fdef6af98369196854a6db0f2822e1) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - #### YAML is now supported

  Added support for formatting YAML files, both `.yaml` and `.yml` extensions

- [#&#8203;11432](https://github.com/biomejs/biome/pull/11432) [`4befd08`](https://github.com/biomejs/biome/commit/4befd08057836e6d3881c768bf7a49e5820a7352) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Configuration files can now recursively extend local files and npm package configurations up to ten levels. Every repeated reference participates in the merge, while resolving multiple versions of one extended package produces an error.

- [#&#8203;11713](https://github.com/biomejs/biome/pull/11713) [`ac6a640`](https://github.com/biomejs/biome/commit/ac6a640a1223ff57ac480926be6143db29fdfbdf) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added support for Grit [`range()` patterns](https://docs.grit.io/language/patterns#range-patterns), addressing [#&#8203;8454](https://github.com/biomejs/biome/issues/8454). Plugins can filter syntax nodes by optional `start_line`, `start_column`, `end_line`, and `end_column` bounds.

  For example, this pattern matches function calls contained entirely on line 2.

  ```grit
  range(start_line=2, end_line=2) as $call where {
      $call <: call_expression()
  }
  ```

- [#&#8203;11244](https://github.com/biomejs/biome/pull/11244) [`0628b53`](https://github.com/biomejs/biome/commit/0628b53121ba9ad28ba9395f808eabbcb00a6ac2) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Added the new CLI option `--profile-type-inference` to the commands `lint` and `check`.

  The profiler is designed to track the execution time of internal queries and operations, group them by file, and sort them from the most expensive to the least expensive.

  ```shell
  biome lint --profile-type-inference
  ```

  ```text
  profiler ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    i Type inference profile (Biome <version>)

    src/index.ts

      Requests (top 5 of 12 groups; 28 source records; 46 executions)
        1. Promise classification <- nursery/noFloatingPromises
        ...

      Queries (top 8 of 25 groups; 61 source records; 94 executions)
        1. Promises / infer_expression_is_promise
        ...

      Whole-module inference (top 1 of 1 group; 1 source record; 1 execution)
        1. Import depth limit
        ...

    68 files omitted.

    ℹ To show all the information, use the --verbose option. The output might be very verbose, so it's advised to analyze a single file.

    $ biome lint --profile-type-inference --verbose ./path/to/file.ts
  ```

  Use `--verbose` to include detailed timings, attribution, breadth, and implementation references for the top source records in each file.

- [#&#8203;12108](https://github.com/biomejs/biome/pull/12108) [`4fcb880`](https://github.com/biomejs/biome/commit/4fcb8806ec03ac79be2846853bacc23449d4f9ec) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Promoted 59 nursery rules to stable groups.

##### Correctness

Promoted the following rules to the `correctness` group with error severity. All of them are recommended:

- [`noDuplicateFieldDefinitionNames`](https://biomejs.dev/linter/rules/no-duplicate-field-definition-names/)
- [`noVueRefAsOperand`](https://biomejs.dev/linter/rules/no-vue-ref-as-operand/)
- [`noVueImportCompilerMacros`](https://biomejs.dev/linter/rules/no-vue-import-compiler-macros/)
- [`noVueVOnNumberValues`](https://biomejs.dev/linter/rules/no-vue-v-on-number-values/)
- [`useVueValidVFor`](https://biomejs.dev/linter/rules/use-vue-valid-v-for/)
- [`noComponentHookFactories`](https://biomejs.dev/linter/rules/no-component-hook-factories/)
- [`noJsxNamespace`](https://biomejs.dev/linter/rules/no-jsx-namespace/)
- [`useReactAsyncServerFunction`](https://biomejs.dev/linter/rules/use-react-async-server-function/)
- [`noReactNativeRawText`](https://biomejs.dev/linter/rules/no-react-native-raw-text/)
- [`useReactNativePlatformComponents`](https://biomejs.dev/linter/rules/use-react-native-platform-components/)
- [`useQwikLoaderLocation`](https://biomejs.dev/linter/rules/use-qwik-loader-location/)
- [`noPlaywrightMissingAwait`](https://biomejs.dev/linter/rules/no-playwright-missing-await/)
- [`usePlaywrightValidDescribeCallback`](https://biomejs.dev/linter/rules/use-playwright-valid-describe-callback/)

##### Suspicious

Promoted the following rules to the `suspicious` group:

- [`noLoopFunc`](https://biomejs.dev/linter/rules/no-loop-func/)
- [`noJsxLeakedDollar`](https://biomejs.dev/linter/rules/no-jsx-leaked-dollar/)
- [`noReactStringRefs`](https://biomejs.dev/linter/rules/no-react-string-refs/) (recommended)
- [`useScopedStyles`](https://biomejs.dev/linter/rules/use-scoped-styles/) (recommended)
- [`noReactNativeDeepImports`](https://biomejs.dev/linter/rules/no-react-native-deep-imports/) (recommended, error severity)
- [`noDrizzleDeleteWithoutWhere`](https://biomejs.dev/linter/rules/no-drizzle-delete-without-where/) (recommended, error severity)
- [`noDrizzleUpdateWithoutWhere`](https://biomejs.dev/linter/rules/no-drizzle-update-without-where/) (recommended, error severity)
- [`noConditionalExpect`](https://biomejs.dev/linter/rules/no-conditional-expect/)
- [`useExpect`](https://biomejs.dev/linter/rules/use-expect/)
- [`noIdenticalTestTitle`](https://biomejs.dev/linter/rules/no-identical-test-title/) (recommended)
- [`noPlaywrightForceOption`](https://biomejs.dev/linter/rules/no-playwright-force-option/)
- [`noPlaywrightNetworkidle`](https://biomejs.dev/linter/rules/no-playwright-networkidle/)
- [`noPlaywrightPagePause`](https://biomejs.dev/linter/rules/no-playwright-page-pause/)
- [`noPlaywrightWaitForNavigation`](https://biomejs.dev/linter/rules/no-playwright-wait-for-navigation/)
- [`noPlaywrightWaitForTimeout`](https://biomejs.dev/linter/rules/no-playwright-wait-for-timeout/)
- [`noDuplicateSelectors`](https://biomejs.dev/linter/rules/no-duplicate-selectors/)
- [`noEmptyObjectKeys`](https://biomejs.dev/linter/rules/no-empty-object-keys/)
- [`useBaseline`](https://biomejs.dev/linter/rules/use-baseline/)
- [`noUntrustedLicenses`](https://biomejs.dev/linter/rules/no-untrusted-licenses/)

##### Security

Promoted [`useIframeSandbox`](https://biomejs.dev/linter/rules/use-iframe-sandbox/) to the `security` group with error severity.

##### Performance

Promoted the recommended rule [`useDomNodeTextContent`](https://biomejs.dev/linter/rules/use-dom-node-text-content/) to the `performance` group with warning severity.

##### Complexity

Promoted the following rules to the `complexity` group:

- [`useArraySome`](https://biomejs.dev/linter/rules/use-array-some/)
- [`useRegexpTest`](https://biomejs.dev/linter/rules/use-regexp-test/)
- [`noUnnecessaryTemplateExpression`](https://biomejs.dev/linter/rules/no-unnecessary-template-expression/)
- [`noPlaywrightUselessAwait`](https://biomejs.dev/linter/rules/no-playwright-useless-await/)
- [`noExcessiveSelectorClasses`](https://biomejs.dev/linter/rules/no-excessive-selector-classes/)
- [`useMathMinMax`](https://biomejs.dev/linter/rules/use-math-min-max/) (recommended, warning severity)
- [`noExcessiveNestedCallbacks`](https://biomejs.dev/linter/rules/no-excessive-nested-callbacks/)

##### Style

Promoted the following rules to the `style` group with information severity:

- [`useVueConsistentDefinePropsDeclaration`](https://biomejs.dev/linter/rules/use-vue-consistent-define-props-declaration/)

- [`useVueNextTickPromise`](https://biomejs.dev/linter/rules/use-vue-next-tick-promise/) (recommended)

- [`noReactNativeLiteralColors`](https://biomejs.dev/linter/rules/no-react-native-literal-colors/)

- [`useConsistentTestIt`](https://biomejs.dev/linter/rules/use-consistent-test-it/)

- [`useTestHooksInOrder`](https://biomejs.dev/linter/rules/use-test-hooks-in-order/)

- [`useTestHooksOnTop`](https://biomejs.dev/linter/rules/use-test-hooks-on-top/)

- [`noPlaywrightEval`](https://biomejs.dev/linter/rules/no-playwright-eval/)

- [`noPlaywrightElementHandle`](https://biomejs.dev/linter/rules/no-playwright-element-handle/)

- [`noPlaywrightWaitForSelector`](https://biomejs.dev/linter/rules/no-playwright-wait-for-selector/)

- [`useReduceTypeParameter`](https://biomejs.dev/linter/rules/use-reduce-type-parameter/)

- [`useNamedCaptureGroup`](https://biomejs.dev/linter/rules/use-named-capture-group/)

- [`useUnicodeRegex`](https://biomejs.dev/linter/rules/use-unicode-regex/)

- [`useImportsFirst`](https://biomejs.dev/linter/rules/use-imports-first/)

- [`useVarsOnTop`](https://biomejs.dev/linter/rules/use-vars-on-top/)

- [`useThisInClassMethods`](https://biomejs.dev/linter/rules/use-this-in-class-methods/)

- [`noInlineStyles`](https://biomejs.dev/linter/rules/no-inline-styles/)

- [`useDomQuerySelector`](https://biomejs.dev/linter/rules/use-dom-query-selector/)

- [`noTopLevelLiterals`](https://biomejs.dev/linter/rules/no-top-level-literals/)

- [#&#8203;12206](https://github.com/biomejs/biome/pull/12206) [`0f984fb`](https://github.com/biomejs/biome/commit/0f984fbfdd05db43a245be3150eb3156088e1558) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the `ignoreUsingDeclarations` option to [`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/). When enabled, the rule no longer reports unused variables declared with `using` or `await using`, because these declarations clean up their value automatically even when the code never reads it.

  ```json
  {
    "linter": {
      "rules": {
        "correctness": {
          "noUnusedVariables": {
            "options": { "ignoreUsingDeclarations": true }
          }
        }
      }
    }
  }
  ```

- [#&#8203;12424](https://github.com/biomejs/biome/pull/12424) [`6a41490`](https://github.com/biomejs/biome/commit/6a41490f6127f3ff57259609a0bf88902598c4cf) Thanks [@&#8203;siketyan](https://github.com/siketyan)! - Removed the `javascript.parser.gritMetavariables` option. It was intended for internal use only and had no effect on how Biome parses JavaScript and TypeScript files. Biome now reports it as an unknown key and exits with a configuration error, so remove it from your configuration file.

- [#&#8203;12055](https://github.com/biomejs/biome/pull/12055) [`54870c0`](https://github.com/biomejs/biome/commit/54870c07e843a809a2c4cc485a411a22a224f153) Thanks [@&#8203;ff1451](https://github.com/ff1451)! - Added the new assist action [`useGraphqlSortedVariables`](https://biomejs.dev/assist/actions/use-graphql-sorted-variables/), which sorts the variable definitions of GraphQL operations.

  **Invalid**:

  ```graphql
  query GetUser($userId: ID!, $includePosts: Boolean = false, $after: String) {
    user(id: $userId) {
      name
    }
  }
  ```

- [#&#8203;12149](https://github.com/biomejs/biome/pull/12149) [`83df808`](https://github.com/biomejs/biome/commit/83df80848ec24a57d91bc9d5a1364abe45d85c98) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the `tailwind.stylesheet` option, which points Biome at the CSS file that holds your Tailwind CSS configuration. [`useTailwindSortedClasses`](https://biomejs.dev/linter/rules/use-tailwind-sorted-classes/) reads the `@theme`, `@utility`, and `@custom-variant` rules in that file and in the local files it imports, so your own theme values, utilities, and variants sort correctly.

  ```json5
  // biome.json
  {
    "tailwind": { "stylesheet": "./src/app.css" }
  }
  ```

  ```css
  /* src/app.css */
  @import "tailwindcss";

  @theme {
    --color-brand: #&#8203;3b82f6;
  }

  @utility content-auto {
    content-visibility: auto;
  }

  @custom-variant theme-midnight (&:where([data-theme="midnight"] *));
  ```

- [#&#8203;12206](https://github.com/biomejs/biome/pull/12206) [`0f984fb`](https://github.com/biomejs/biome/commit/0f984fbfdd05db43a245be3150eb3156088e1558) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added migration of the `ignoreRestSiblings` and `ignoreUsingDeclarations` options of `no-unused-vars`, `@typescript-eslint/no-unused-vars`, and `unused-imports/no-unused-vars` to [`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/) in `biome migrate eslint`. Options that the ESLint configuration omits are set to ESLint's defaults, so the migrated rule reports the same variables. For example, `"no-unused-vars": "error"` now migrates `ignoreRestSiblings` as `false`.

- [#&#8203;11709](https://github.com/biomejs/biome/pull/11709) [`32d12cb`](https://github.com/biomejs/biome/commit/32d12cb593533901fa0a6466a4ba966de76d8967) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Added the new command `biome inspect file`, which returns developer information for the given file.

  ```shell
  biome inspect file path/to/file.ts
  ```

  By default, the command returns the CST of the file. The command accepts the following arguments:

  - `--ast`, which returns the AST of a file.
  - `--ir`, which returns the formatting IR of a file.
  - `--semantic`, which returns the semantic model information of a file, if available.

- [#&#8203;12221](https://github.com/biomejs/biome/pull/12221) [`cb571af`](https://github.com/biomejs/biome/commit/cb571af7362beedccaf4983190cecc6e9780f017) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - The rule [`noEmptySource`](https://biomejs.dev/linter/rules/no-empty-source/) now supports Markdown files. It reports files that contain only blank lines and HTML comments. For example, the following file is now reported:

  ```md
  <!-- TODO -->
  ```

- [#&#8203;12214](https://github.com/biomejs/biome/pull/12214) [`8955b56`](https://github.com/biomejs/biome/commit/8955b561e0d2107e9288b4f2ad20489a9a1c9372) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - The rule [`noEmptySource`](https://biomejs.dev/linter/rules/no-empty-source/) now supports YAML files. It reports files with no documents and each document that has no content. For example, the second document in the following code is now reported:

  ```yaml
  name: foo
  ---
  ```

- [#&#8203;12033](https://github.com/biomejs/biome/pull/12033) [`8669e53`](https://github.com/biomejs/biome/commit/8669e536bbbbf2f459ad0b74826f7a40133120ac) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the `ignoreElements` option to [`noRedundantRoles`](https://biomejs.dev/linter/rules/no-redundant-roles/). Elements listed in this option are not checked by the rule.

  ```json
  {
    "linter": {
      "rules": {
        "a11y": {
          "noRedundantRoles": {
            "options": {
              "ignoreElements": ["button"]
            }
          }
        }
      }
    }
  }
  ```

- [#&#8203;12084](https://github.com/biomejs/biome/pull/12084) [`04e3750`](https://github.com/biomejs/biome/commit/04e3750f0e8169893fe63737616fcaf710e07fb6) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - The rule [`noRestrictedElements`](https://biomejs.dev/linter/rules/no-restricted-elements/) now supports HTML, Vue, Svelte, and Astro files. For example, with `{ "elements": { "marquee": "Use CSS animations instead." } }`, the following code is now reported:

  ```html
  <marquee>Breaking news</marquee>
  ```

- [#&#8203;11408](https://github.com/biomejs/biome/pull/11408) [`5a870f2`](https://github.com/biomejs/biome/commit/5a870f2be6851c54a597c01e28ff4b9a711fc956) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Added support for distributing named Grit rules, rule presets, and configurations through packages that have a manifest file.

  The field `plugins` is used to export named Grit plugins, and `configs` is used to export named configurations.
  Package entries must select a named export: `package/rule`, `package/presets/preset`, or `package/configs/config`. Bare package entries aren't supported.
  Rules consumed from another package are exposed under the consuming package's name, while package authors continue to reference them by their source package inside the manifest.
  Configurations consumed from another package are also exposed under the consuming package's name.

  ```json5
  // biome-manifest.json
  {
    "$schema": "./node_modules/@biomejs/biome/manifest_schema.json",
    "version": 1,
    "plugins": {
      "rules": [
        "@org/shared-rules/noDeprecatedApi",
        "@org/strict-rules/presets/recommended",
        { "useCompanyLogger": "./rules/useCompanyLogger.grit" }
      ],
      "presets": {
        "recommended": [
          "useCompanyLogger",
          "@org/shared-rules/noDeprecatedApi"
        ]
      }
    },
    "configs": [
      "@org/shared-configs/configs/recommended",
      { "base": "./configs/base.json" }
    ]
  }
  ```

  The package must publish the manifest and every referenced file, for example, through the `files` field in `package.json`.
  Plugin authors can expose their manifest through the `biome` condition with `./biome-manifest.json` as its value.

  ```json5
  // package.json
  {
    "name": "@org/biome-plugin",
    "exports": {
      "biome": "./biome-manifest.json",
      "default": "./index.js"
    },
    "files": ["biome-manifest.json", "rules", "configs"]
  }
  ```

  And then, you can load the rules in your `biome.json`:

  ```json
  // biome.json
  {
    "plugins": [
      "@org/biome-plugin/useCompanyLogger",
      "@org/biome-plugin/presets/recommended"
    ]
  }
  ```

  For more information on how to create a plugin to distribute via npm, check the relative [guide](https://biomejs.dev/guides/publish-packages/).

- [#&#8203;12264](https://github.com/biomejs/biome/pull/12264) [`90f2eaf`](https://github.com/biomejs/biome/commit/90f2eafe69230f98a29f3e2c831ece0a7153af07) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;11082](https://github.com/biomejs/biome/issues/11082): glob patterns in the `includes` option of a plugin are now matched against file paths relative to the directory of the configuration file, the same as `files.includes` and `overrides[].includes`.

  Previously, the patterns were matched against the absolute file path, so a pattern such as `packages/**/src/**` matched no files and the plugin never ran.

  ```json
  {
    "plugins": [
      { "path": "./my-plugin.grit", "includes": ["packages/**/src/**"] }
    ]
  }
  ```

  Patterns that start with `**/` keep working. Patterns that contain the absolute path of the project no longer match, and must be rewritten as relative patterns.

- [#&#8203;11133](https://github.com/biomejs/biome/pull/11133) [`1df00de`](https://github.com/biomejs/biome/commit/1df00deddfcde159e62171c991542eab6563aad8) Thanks [@&#8203;dlecan](https://github.com/dlecan)! - Added Android (Termux) support to the npm distribution ([#&#8203;1340](https://github.com/biomejs/biome/issues/1340)). `npm install @biomejs/biome` now works on Termux through the new `@biomejs/cli-android-arm64` and `@biomejs/cli-android-x64` packages, which reuse the static musl binaries.

- [#&#8203;12132](https://github.com/biomejs/biome/pull/12132) [`c5fadc4`](https://github.com/biomejs/biome/commit/c5fadc4a38758e46f4caee71d6d18b657ddb329b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Added SCSS support throughout the toolchain. Biome can now format and lint `.scss` files, and recognizes `.module.scss` files as CSS Modules.

- [#&#8203;10837](https://github.com/biomejs/biome/pull/10837) [`754432c`](https://github.com/biomejs/biome/commit/754432cae3c36722cdd4c654fe8b18f0a2fef3b2) Thanks [@&#8203;JamBalaya56562](https://github.com/JamBalaya56562)! - Added support for Google Apps Script (`.gs`) files.

  They are parsed as JavaScript scripts, so ES module `import`/`export` statements are reported as errors (Apps Script has no module system). Common Apps Script service globals (e.g. `SpreadsheetApp`, `DriveApp`, `Logger`) are recognized by `noUndeclaredVariables` and `noGlobalAssign`, and the list can be extended through the `javascript.globals` option.

- [#&#8203;11126](https://github.com/biomejs/biome/pull/11126) [`fa63050`](https://github.com/biomejs/biome/commit/fa63050d37f0ee45195ca62bf192c5e9800705b6) Thanks [@&#8203;Punisheroot](https://github.com/Punisheroot)! - Biome now recognizes files with the `.htm` extension as HTML.

- [#&#8203;12291](https://github.com/biomejs/biome/pull/12291) [`6c6619e`](https://github.com/biomejs/biome/commit/6c6619e55e1ca9a2cf93483bd8eed67477c2f548) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Changed the dependency that enables the [`tailwind` domain](https://biomejs.dev/linter/domains/#tailwind) automatically. The domain is now enabled when `package.json` declares `tailwindcss` v4 or later, instead of v3 or later, because we are currently targeting Tailwind v4 support. The domain can always be enabled manually.

- [#&#8203;11394](https://github.com/biomejs/biome/pull/11394) [`de1ad4c`](https://github.com/biomejs/biome/commit/de1ad4c4c5898524d783f5ea2c22254c1b130ef4) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - #### Markdown is now supported

  Added support for linting and formatting Markdown files. The first version of Biome Markdown parser has 100% compatibility
  against CommonMark.

  Other variants of Markdown, such as GitHub Flavored Markdown (GFM) aren't currently supported; however, we plan to support them soon.

  Formatter and Linter are automatically enabled by default.

  ##### Markdown parser

  The parser comes with an opt-in option to enable frontmatter parsing. When enabled, the first thematic break `---` is considered the opening fence of the frontmatter:

  ```json5
  // biome.json
  {
    "markdown": {
      "parser": {
        "frontmatter": true
      }
    }
  }
  ```

  ```md
  ---
  title: Lorem ipsum
  ---
  ```

  The parser also comes with an opt-in option called `cjkFriendlyEmphasis`. When enabled, the parser follows the [CommonMark CJK-friendly amendments](https://github.com/tats-u/markdown-cjk-friendly/blob/main/specification.md) and recognizes emphasis markers, such as `**`, placed directly next to Chinese, Japanese, or Korean text. Enable it only when the tool that renders your Markdown supports the same amendments, because the option changes which text Biome formats and lints as emphasis:

  ```json5
  // biome.json
  {
    "markdown": {
      "parser": {
        "cjkFriendlyEmphasis": true
      }
    }
  }
  ```

  With the option enabled, the following text is parsed as bold, instead of as literal `**`:

  ```md
  **このアスタリスクは強調記号として認識されず、そのまま表示されます。**この文のせいで。
  ```

  ##### Markdown formatter

  The formatter has great compatibility with Prettier formatting, more than 90% detected by our infrastructure. The formatter ships with
  a new option called `proseWrap`, that allows controlling how the Biome formatter should wrap paragraphs.

  For example, when `proseWrap` is set to `always`, the formatter will wrap the paragraph to match the configured `lineWidth`:

  ```json5
  // biome.json
  {
    "markdown": {
      "formatter": {
        "lineWidth": 20,
        "proseWrap": "always"
      }
    }
  }
  ```

  ```md
  Very tiny line width, so
  the paragraph is more
  compact.
  ```

  ##### Markdown linter

  The linter ships with a few rules inspired by [markdownlint](https://github.com/markdownlint/markdownlint). We plan to ship more rules in the upcoming releases.

  Some rules you can start using already:

  - [`useTopLevelHeading`](https://biomejs.dev/linter/rules/use-top-level-heading/)
  - [`useConsistentHeadingLevel`](https://biomejs.dev/linter/rules/use-consistent-heading-level/)

  ##### Markdown snippets

  Biome recognizes the code inside fenced code blocks, frontmatter, and HTML blocks as embedded languages, and formats it with
  the formatter of its language and your configuration:

  ````diff
   ```js
  -const   value   =   {a:1,b:2}
  +const value = { a: 1, b: 2 };
   ```
  ````

  HTML blocks are formatted only when the HTML formatter is enabled. A block with a syntax error stays as written, and Biome
  still formats the rest of the file.

  The option `markdown.formatter.formatEmbeds` controls this behavior, and it's enabled by default. Set it to `false` to keep
  the code of these blocks as written:

  ```json5
  // biome.json
  {
    "markdown": {
      "formatter": {
        "formatEmbeds": false
      }
    }
  }
  ```

  The command `biome migrate prettier` migrates the Prettier option [`embeddedLanguageFormatting`](https://prettier.io/docs/options#embedded-language-formatting)
  to `markdown.formatter.formatEmbeds`.

  The option `markdown.analyzeEmbeds` runs the linter and assist actions on the same blocks, with the rules and actions of
  their language, and reports their syntax errors. It's disabled by default, because fenced code blocks usually contain
  examples or partial code:

  ```json5
  // biome.json
  {
    "markdown": {
      "analyzeEmbeds": true
    }
  }
  ```

- [#&#8203;11634](https://github.com/biomejs/biome/pull/11634) [`04c3f5d`](https://github.com/biomejs/biome/commit/04c3f5d95ba0c1bbdc21ac5d9b2dbc94c2930a1d) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Added `biome inspect plugins` to list resolved rules by plugin and importing preset without loading or executing plugin code. Include globs show which files each import targets, and `--path` selects a target file. Fixed Markdown linter overrides and their configuration inspection.

- [#&#8203;12282](https://github.com/biomejs/biome/pull/12282) [`a3fa0d6`](https://github.com/biomejs/biome/commit/a3fa0d6526e5ce6ab3b0c87fb74813ecdef0b2bd) Thanks [@&#8203;ff1451](https://github.com/ff1451)! - Added the new assist action [`useGraphqlSortedArguments`](https://biomejs.dev/assist/actions/use-graphql-sorted-arguments/), which sorts the arguments of GraphQL fields and directives, and the arguments declared by field and directive definitions.

  **Invalid**:

  ```graphql
  query {
    users(orderBy: NAME, first: 10, after: "cursor") {
      name
    }
  }
  ```

- [#&#8203;10631](https://github.com/biomejs/biome/pull/10631) [`1077238`](https://github.com/biomejs/biome/commit/1077238e6361e163ab2462a3a81616cd026a7e4d) Thanks [@&#8203;thibaut-pro](https://github.com/thibaut-pro)! - Added the `sortFirst` option to the [useSortedAttributes](https://biomejs.dev/assist/actions/use-sorted-attributes/) action (JSX and HTML). It takes a list of attribute names that are sorted before all other attributes, in the order given, while the remaining attributes keep their usual sort. This is useful to keep attributes such as `key` first.

  With the following configuration:

  ```json
  {
    "assist": {
      "actions": {
        "source": {
          "useSortedAttributes": {
            "level": "on",
            "options": { "sortFirst": ["key"] }
          }
        }
      }
    }
  }
  ```

  The attributes are reordered so that `key` comes first:

  ```jsx
  // Before
  <div className={styles.investment} key={investment.id} />;

  // After
  <div key={investment.id} className={styles.investment} />;
  ```

- [#&#8203;10424](https://github.com/biomejs/biome/pull/10424) [`189b7ba`](https://github.com/biomejs/biome/commit/189b7ba08bab5bb7c1dfc3edd4029bee0e68c01e) Thanks [@&#8203;LinusU](https://github.com/LinusU)! - Added the `partitionByNewLine` option to the `useSortedInterfaceMembers` assist. When enabled, members separated by a blank line are kept in their own section and sorted only within that section, preserving the logical groupings the author intentionally introduced with empty lines.

##### Patch Changes

- [#&#8203;11953](https://github.com/biomejs/biome/pull/11953) [`354f74c`](https://github.com/biomejs/biome/commit/354f74c3c96b459fa59da9d5ce7d13abe929add1) Thanks [@&#8203;Th3S4mur41](https://github.com/Th3S4mur41)! - Enhanced the nursery rule [`useLogicalProperties`](https://biomejs.dev/linter/rules/use-logical-properties/) to check physical CSS values in addition to physical property names.

  The rule recognizes physical values in `frame-sizing`, `anchor-size()`, and `anchor()`, with direction-aware replacements controlled by the existing `direction` option.

  For `justify-content: left` and `justify-content: right`, the rule reports a diagnostic without an automatic replacement because the correct logical alignment depends on the layout axis.

  This is a second part of the rule covering parts of [#&#8203;9034](https://github.com/biomejs/biome/issues/9034)

- [#&#8203;12175](https://github.com/biomejs/biome/pull/12175) [`3730b32`](https://github.com/biomejs/biome/commit/3730b329dfddd65d89f40975cc6efd732c0ec0b7) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noDoubleComparison`](https://biomejs.dev/linter/rules/no-double-comparison/), which reports two comparisons of the same values that can be combined into one. For example, `x === y || x < y` can be written as `x <= y`.

- [#&#8203;12166](https://github.com/biomejs/biome/pull/12166) [`25eb10c`](https://github.com/biomejs/biome/commit/25eb10c1536469e597007d9bc31089900b5a7c19) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the new nursery rule [`noNestedSwitch`](https://biomejs.dev/linter/rules/no-nested-switch/), which disallows `switch` statements inside other `switch` statements.

  ```js
  switch (n) {
    case 0:
      switch (m) {} // reported
  }
  ```

- [#&#8203;12170](https://github.com/biomejs/biome/pull/12170) [`872ac9f`](https://github.com/biomejs/biome/commit/872ac9f47d88b1fb31ff88e5c964442a38dcfd46) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the new nursery rule [`noNestedTemplateLiterals`](https://biomejs.dev/linter/rules/no-nested-template-literals/), which disallows template literals written inside other template literals.

  ```js
  const message = `I have ${color ? `${count} ${color}` : count} apples`;
  ```

- [#&#8203;12111](https://github.com/biomejs/biome/pull/12111) [`f72375f`](https://github.com/biomejs/biome/commit/f72375f9bf96123771a7c74362c9003c448e076c) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noObjectConstructor`](https://biomejs.dev/linter/rules/no-object-constructor/), which disallows calling the `Object` constructor without arguments, such as `new Object()` or `Object()`. Biome can replace these calls with the object literal `{}`.

- [#&#8203;12254](https://github.com/biomejs/biome/pull/12254) [`cb88f07`](https://github.com/biomejs/biome/commit/cb88f072f66f90c478908fcb42786ea9b6b30851) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noSvelteClassDirective`](https://biomejs.dev/linter/rules/no-svelte-class-directive/), which reports Svelte's `class:` directive. Since Svelte 5.16, the `class` attribute accepts objects and arrays, and Svelte recommends them over the directive.

  ```svelte
  <div class:active={isActive}></div>
  ```

- [#&#8203;12186](https://github.com/biomejs/biome/pull/12186) [`30aa7d2`](https://github.com/biomejs/biome/commit/30aa7d2c0e911cfa36507b3624763614b11afdc1) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the new nursery rule [`noUselessDateGetTime`](https://biomejs.dev/linter/rules/no-useless-date-get-time/), which reports dates converted with `.getTime()` before being passed to the `Date` constructor. Passing the date directly, as in `new Date(date)`, already creates a copy.

  ```js
  const copy = new Date(date.getTime());
  ```

- [#&#8203;12229](https://github.com/biomejs/biome/pull/12229) [`5f8ea6c`](https://github.com/biomejs/biome/commit/5f8ea6cc9a75f666e5f8cba2f7fb5aa6b13d8da5) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noVueLifecycleAfterAwait`](https://biomejs.dev/linter/rules/no-vue-lifecycle-after-await/), which reports Vue lifecycle hooks, such as `onMounted()`, that are registered after an `await` in a component's `setup()` function. Vue doesn't run these hooks.

  ```vue
  <script>
  import { onMounted } from "vue";

  export default {
    async setup() {
      await fetchUser();
      onMounted(() => {});
    },
  };
  </script>
  ```

- [#&#8203;12077](https://github.com/biomejs/biome/pull/12077) [`3dd096f`](https://github.com/biomejs/biome/commit/3dd096f2123eb393160cb76056a52402e3d325b7) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noVueRootVIf`](https://biomejs.dev/linter/rules/no-vue-root-v-if/), which disallows `v-if` on the only root element of a Vue component template.

  ```vue
  <template>
    <div v-if="visible">Content</div>
  </template>
  ```

- [#&#8203;12136](https://github.com/biomejs/biome/pull/12136) [`b92638b`](https://github.com/biomejs/biome/commit/b92638b40689c7714fe3d84db06a7a62110f796d) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noVueShadowNativeEvents`](https://biomejs.dev/linter/rules/no-vue-shadow-native-events/), which reports Vue component events named after built-in browser events, such as `click` or `keydown`.

  ```vue
  <script setup>
  // Invalid
  const emit = defineEmits(["click"]);
  emit("click");
  </script>
  ```

- [#&#8203;12135](https://github.com/biomejs/biome/pull/12135) [`31a29b6`](https://github.com/biomejs/biome/commit/31a29b6e7ef736d2bdf6eec0a0a1bbf91b62032d) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noVueVHtml`](https://biomejs.dev/linter/rules/no-vue-v-html/), which disallows Vue's `v-html` directive. `v-html` inserts its value into the page as HTML, so text from users can run code on your page (cross-site scripting, or XSS).

  ```vue
  <template>
    <div v-html="content"></div>
  </template>
  ```

- [#&#8203;12134](https://github.com/biomejs/biome/pull/12134) [`60329af`](https://github.com/biomejs/biome/commit/60329afef23f5e314c499d0114f3d7fc35a956c3) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the new nursery rule [`noVueVText`](https://biomejs.dev/linter/rules/no-vue-v-text/), which disallows Vue's `v-text` directive in favor of text interpolation.

  For example, the following snippet triggers the rule:

  ```vue
  <div v-text="message"></div>
  ```

- [#&#8203;9817](https://github.com/biomejs/biome/pull/9817) [`241b861`](https://github.com/biomejs/biome/commit/241b86197fb26d230edf37febcfb1de3f2dfb1e0) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the new nursery rule [`noZeroFractions`](https://biomejs.dev/linter/rules/no-zero-fractions/), which disallows numeric literals with redundant zero fractions or dangling dots such as `1.0` and `1.`. Biome can now simplify these literals to shorter equivalents.

- [#&#8203;12109](https://github.com/biomejs/biome/pull/12109) [`b45d426`](https://github.com/biomejs/biome/commit/b45d4263287de9848701e8c3e634a9371975b4a9) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`useConsistentJsonFileRead`](https://biomejs.dev/linter/rules/use-consistent-json-file-read/), which enforces a consistent way of reading JSON files before passing them to `JSON.parse()`. By default, it reports files read as a `Buffer`; set `readAs` to `"buffer"` to report files read as a UTF-8 string instead.

  ```js
  const packageJson = JSON.parse(await fs.readFile("./package.json"));
  ```

- [#&#8203;12129](https://github.com/biomejs/biome/pull/12129) [`b57f874`](https://github.com/biomejs/biome/commit/b57f874123b9f7ea20440fa6a670193a5bf7c5b5) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the new nursery rule [`useMatchingFunctionName`](https://biomejs.dev/linter/rules/use-matching-function-name/), which requires a named function expression to have the same name as the variable or property it's assigned to.

  ```js
  // The function name `bar` doesn't match the variable name `foo`.
  const foo = function bar() {};
  ```

- [#&#8203;12169](https://github.com/biomejs/biome/pull/12169) [`0f1ae53`](https://github.com/biomejs/biome/commit/0f1ae5301c7d253660b8a41a07ea08a4f8e6935f) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the new nursery rule [`useSimplifiedBooleanReturn`](https://biomejs.dev/linter/rules/use-simplified-boolean-return/), which reports `if` statements that only return `true` or `false` and can be replaced by returning the condition directly.

  ```js
  function isPositive(value) {
    if (value > 0) {
      return true;
    }
    return false;
  }
  ```

- [#&#8203;11957](https://github.com/biomejs/biome/pull/11957) [`b2db9f2`](https://github.com/biomejs/biome/commit/b2db9f2c089928a28fe40a8b48be8f9b868164ab) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`useSvelteKitResolve`](https://biomejs.dev/linter/rules/use-svelte-kit-resolve/), which requires internal links and calls to `goto()`, `pushState()`, and `replaceState()` to use paths built with SvelteKit's `resolve()`.

  ```svelte
  <a href="/about">About</a>
  ```

- [#&#8203;12235](https://github.com/biomejs/biome/pull/12235) [`b7c1870`](https://github.com/biomejs/biome/commit/b7c1870a9d02c23afe522ef9d12b3547a31ce363) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`useSvelteReactiveClasses`](https://biomejs.dev/linter/rules/use-svelte-reactive-classes/), which reports `Date`, `Map`, `Set`, `URL`, and `URLSearchParams` objects that are modified in Svelte files or exported from Svelte modules. Svelte doesn't detect changes made inside these built-in objects, so the rule suggests the matching classes from `svelte/reactivity`.

  ```svelte
  <script>
    const tags = new Set();
    function addTag(tag) {
      tags.add(tag);
    }
  </script>
  ```

- [#&#8203;12172](https://github.com/biomejs/biome/pull/12172) [`b47674d`](https://github.com/biomejs/biome/commit/b47674dc21e16a829818aa4331948fea3e2abff0) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`useSvelteShorthandDirective`](https://biomejs.dev/linter/rules/use-svelte-shorthand-directive/), which enforces the shorthand syntax for Svelte `bind:`, `class:`, and `style:` directives. For example, `<input bind:value={value} />` is now reported and can be fixed to `<input bind:value />`.

- [#&#8203;12137](https://github.com/biomejs/biome/pull/12137) [`4aeca96`](https://github.com/biomejs/biome/commit/4aeca9688f062c712046ff1fc62fea5a8b8eaff5) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`useVueMatchingComponentFileName`](https://biomejs.dev/linter/rules/use-vue-matching-component-file-name/), which requires the name of a Vue component to match its file name. The following component in `MyComponent.vue` is now reported:

  ```vue
  <script>
  export default {
    name: "MyButton",
  };
  </script>
  ```

- [#&#8203;12075](https://github.com/biomejs/biome/pull/12075) [`de453c0`](https://github.com/biomejs/biome/commit/de453c0fc8a73f8e875c2f5ad3c8f3fec3e01ed6) Thanks [@&#8203;tionway](https://github.com/tionway)! - Fixed [#&#8203;11902](https://github.com/biomejs/biome/issues/11902): `biome migrate --write` now successfully migrates empty nested configuration files without introducing an invalid trailing comma.

- [#&#8203;12149](https://github.com/biomejs/biome/pull/12149) [`83df808`](https://github.com/biomejs/biome/commit/83df80848ec24a57d91bc9d5a1364abe45d85c98) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Switched [`useTailwindSortedClasses`](https://biomejs.dev/linter/rules/use-tailwind-sorted-classes/) to the Tailwind CSS v4 class order. The rule now checks the attributes and functions set in the top-level `tailwind` configuration, and its own `attributes` and `functions` options were removed. Run `biome migrate --write` to move them to `tailwind.attributes`, `tailwind.mergeFunctions`, and `tailwind.variantFunctions`.

  The rule is now part of the `project` domain, so enabling it makes Biome scan your project.

- [#&#8203;12202](https://github.com/biomejs/biome/pull/12202) [`9f1cfde`](https://github.com/biomejs/biome/commit/9f1cfdea333b1bdb10eeaca1f985f161e4e658db) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;12184](https://github.com/biomejs/biome/issues/12184): [`useImportExtensions`](https://biomejs.dev/linter/rules/use-import-extensions/) no longer misses relative imports with `.jsx` or `.tsx` extensions when using `extensionMappings` or `forceJsExtensions`. The rule reports these imports when the configured replacement resolves to an existing file.

- [#&#8203;12081](https://github.com/biomejs/biome/pull/12081) [`fd4df34`](https://github.com/biomejs/biome/commit/fd4df3476f8fe1f88784ff0f5687e8a9180348be) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`useCapitalizedConstructors`](https://biomejs.dev/linter/rules/use-capitalized-constructors/), a port of ESLint's `new-cap`. It reports `new` expressions whose callee name starts with a lowercase letter, and calls without `new` whose callee name starts with an uppercase letter.

  ```js
  const friend = new person();
  const other = Person();
  ```

- [#&#8203;12061](https://github.com/biomejs/biome/pull/12061) [`36aa8c3`](https://github.com/biomejs/biome/commit/36aa8c34e2b1f88e1dee476e3adbc1318193b4b0) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noExcessiveStatementsPerFunction`](https://biomejs.dev/linter/rules/no-excessive-statements-per-function/), a port of ESLint's [`max-statements`](https://eslint.org/docs/latest/rules/max-statements). It reports functions that contain more statements than the configured `max` (default: `10`).

- [#&#8203;12053](https://github.com/biomejs/biome/pull/12053) [`b91a445`](https://github.com/biomejs/biome/commit/b91a4452b790e7f6b5dab34e9fc009bbc0b0cc83) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`useVueConsistentEventHyphenation`](https://biomejs.dev/linter/rules/use-vue-consistent-event-hyphenation/), a port of `vue/v-on-event-hyphenation`. It enforces a consistent hyphenation style for event names in `v-on` directives on custom components. By default, hyphenated names are required, so `<MyComponent @customEvent="handler" />` is reported.

- [#&#8203;12327](https://github.com/biomejs/biome/pull/12327) [`2266df2`](https://github.com/biomejs/biome/commit/2266df231e43960c04804ea7ff81ab51d4aaad0a) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved the performance of the Biome CLI on projects with many files during cleanup.

- [#&#8203;12110](https://github.com/biomejs/biome/pull/12110) [`cf408d5`](https://github.com/biomejs/biome/commit/cf408d5c8d95a3de8a1db8dc11022c68e871c704) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the recommended nursery rule [`noOctal`](https://biomejs.dev/linter/rules/no-octal/), which disallows legacy octal literals such as `071` and decimal literals with leading zeros such as `08`. Use `0o71` for explicit octal notation.

- [#&#8203;12066](https://github.com/biomejs/biome/pull/12066) [`d13d1ba`](https://github.com/biomejs/biome/commit/d13d1ba6c82da9593856bc69e35d7af5ae92c209) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Updated rule source metadata.

- [#&#8203;12393](https://github.com/biomejs/biome/pull/12393) [`c80f28c`](https://github.com/biomejs/biome/commit/c80f28cd192db22650c847cbd570e73fdd175c40) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;12389](https://github.com/biomejs/biome/issues/12389): the Svelte formatter no longer duplicates binding names when converting redundant `bind:` initializers to shorthand syntax.

  ```diff
  -<input bind:valuevalue>
  +<input bind:value>
  ```

- [#&#8203;12325](https://github.com/biomejs/biome/pull/12325) [`31a2fb0`](https://github.com/biomejs/biome/commit/31a2fb0a2c37ff9243a20cc385230eeb8e4eb221) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved the performance of the formatter in files with little or no comments.

- [#&#8203;12223](https://github.com/biomejs/biome/pull/12223) [`9f246d7`](https://github.com/biomejs/biome/commit/9f246d7382d60f5c2047c5261e5ec43833d63d56) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noAccidentalBitwiseOperators`](https://biomejs.dev/linter/rules/no-accidental-bitwise-operators/), which reports the bitwise operators `&`, `|`, and `|=` where the logical operators `&&`, `||`, and `||=` were likely intended.

  ```js
  if (obj & obj.prop) {}
  options = options | {};
  ```

- [#&#8203;12052](https://github.com/biomejs/biome/pull/12052) [`1a6fb41`](https://github.com/biomejs/biome/commit/1a6fb418c47708524fe85293ce2a0350f72b3160) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noVueBooleanDefault`](https://biomejs.dev/linter/rules/no-vue-boolean-default/), which disallows default values for Boolean props in Vue components. Vue already defaults an absent Boolean prop to `false`.

  ```vue
  <script setup lang="ts">
  withDefaults(defineProps<{ disabled?: boolean }>(), {
    disabled: true,
  });
  </script>
  ```

- [#&#8203;12177](https://github.com/biomejs/biome/pull/12177) [`215288b`](https://github.com/biomejs/biome/commit/215288b1c1463ccb77fe53cfe2cf864826b2c03e) Thanks [@&#8203;MustafaKemal0146](https://github.com/MustafaKemal0146)! - Fixed [#&#8203;4517](https://github.com/biomejs/biome/issues/4517): [`noConfusingVoidType`](https://biomejs.dev/linter/rules/no-confusing-void-type/) no longer reports `void` in union types that contain only `void` and `never`, such as `void | never`.

- [#&#8203;12461](https://github.com/biomejs/biome/pull/12461) [`259a84e`](https://github.com/biomejs/biome/commit/259a84e89b9fe061e31beb816d7bdf67647c01ab) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed GritQL JSON snippets so patterns such as `{ $key: $value }` can now bind metavariables in object keys and values.

- [#&#8203;12185](https://github.com/biomejs/biome/pull/12185) [`08cfbd2`](https://github.com/biomejs/biome/commit/08cfbd22d2eea517df081ad22f63bd1f4984f455) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed the Tailwind CSS parser splitting dashed utility names. Classes such as `drop-shadow!`, `flex-grow-0`, and `max-w-screen-lg` now keep `drop-shadow`, `flex-grow`, and `max-w-screen` as their utility names.

- [#&#8203;12444](https://github.com/biomejs/biome/pull/12444) [`ef61338`](https://github.com/biomejs/biome/commit/ef61338b24b7125fbc3cb3d4792ec90fa005a86e) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed the match count reported by `biome search`. The summary and the `matches` field of the JSON reporters now count every match, instead of the number of searched files.

- [#&#8203;12292](https://github.com/biomejs/biome/pull/12292) [`4eadd57`](https://github.com/biomejs/biome/commit/4eadd575d6890a785998279193ceeff9d3098850) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [withastro/compiler-rs#199](https://github.com/withastro/compiler-rs/issues/199): processing instructions such as `<?xml version="1.0" encoding="UTF-8"?>` no longer cause parse errors in Astro and Vue files.

- [#&#8203;12152](https://github.com/biomejs/biome/pull/12152) [`7a573de`](https://github.com/biomejs/biome/commit/7a573de6ad415b1549a6852ae3576088e99319cd) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed the Tailwind class parser rejecting arbitrary variants whose selector starts with an attribute selector. Classes like `[[data-variant=legend]+&]:-mt-1.5` and `group-has-[[data-slot=item-description]]/item:self-start` now parse correctly.

- [#&#8203;12155](https://github.com/biomejs/biome/pull/12155) [`851d803`](https://github.com/biomejs/biome/commit/851d803c150df25c53009a324641509a20110e16) Thanks [@&#8203;erenbati](https://github.com/erenbati)! - [biomejs/biome#11949](https://github.com/biomejs/biome/issues/11949): Fixed [`noSelfAssign`](https://biomejs.dev/linter/rules/no-self-assign/) to detect self-assignments when equivalent property names use dot and bracket notation, including numeric and string-literal keys.

- [#&#8203;12112](https://github.com/biomejs/biome/pull/12112) [`db7ede6`](https://github.com/biomejs/biome/commit/db7ede6a8279fec3bcb97e03b4f105868ee5f967) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Added the nursery rule [`noPromiseExecutorReturn`](https://biomejs.dev/linter/rules/no-promise-executor-return/), which disallows returning values from the function passed to `new Promise()`, because `new Promise()` ignores them.

  ```js
  new Promise((resolve) => resolve(1));
  ```

- [#&#8203;12404](https://github.com/biomejs/biome/pull/12404) [`fcd3d74`](https://github.com/biomejs/biome/commit/fcd3d7400d346df6fdcd0ba3f23afdbf86ce55b6) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;12374](https://github.com/biomejs/biome/issues/12374): `biome migrate eslint` now preserves `eqeqeq`'s null comparison options when configuring [`noDoubleEquals`](https://biomejs.dev/linter/rules/no-double-equals/). Migrating the default ESLint configuration now sets `ignoreNull: false`, so comparisons such as `x == null` remain reported.

- [#&#8203;12426](https://github.com/biomejs/biome/pull/12426) [`0fe3d2b`](https://github.com/biomejs/biome/commit/0fe3d2b85a89ea3cb8b4bb8a3bc0a7adf10b1d37) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved the performance of linting by computing the range of a syntax node without allocating its edge tokens.

- [#&#8203;12441](https://github.com/biomejs/biome/pull/12441) [`c4199d7`](https://github.com/biomejs/biome/commit/c4199d791f59f2c1df243a5ea0421c18fc80e33d) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved the performance of commands that run with `--use-server`, such as `biome check --use-server`. The Biome daemon now processes the files of a command on all available CPU cores, instead of at most four files at a time.

- [#&#8203;12183](https://github.com/biomejs/biome/pull/12183) [`c08e3c3`](https://github.com/biomejs/biome/commit/c08e3c3f4ebc93e43d6b10d4bd995201b4128f21) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed the Tailwind class parser rejecting CSS variable shorthands whose fallback contains parentheses. Classes like `bg-(--a,var(--b))`, `bg-(--a,calc(1px))`, and `after:bg-(--drawer-bleed-background,var(--color-popover))` now parse correctly, including in variants (`max-(--a,var(--b)):flex`) and modifiers (`bg-red-500/(--a,var(--b))`).

- [#&#8203;12441](https://github.com/biomejs/biome/pull/12441) [`c4199d7`](https://github.com/biomejs/biome/commit/c4199d791f59f2c1df243a5ea0421c18fc80e33d) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed `biome stop` waiting 15 seconds and then failing with "the request to the remote workspace timed out", even though the Biome daemon had stopped. The command now returns as soon as the daemon shuts down.

- [#&#8203;12117](https://github.com/biomejs/biome/pull/12117) [`ae0cabd`](https://github.com/biomejs/biome/commit/ae0cabd51cddaaa0716221463cf2e0766b290501) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [`noUnreachable`](https://biomejs.dev/linter/rules/no-unreachable/), [`noUnreachableSuper`](https://biomejs.dev/linter/rules/no-unreachable-super/), [`useGetterReturn`](https://biomejs.dev/linter/rules/use-getter-return/), [`useIterableCallbackReturn`](https://biomejs.dev/linter/rules/use-iterable-callback-return/) and [`noFallthroughSwitchClause`](https://biomejs.dev/linter/rules/no-fallthrough-switch-clause/) skipping functions that contain an unlabeled `break` or `continue` inside a labeled loop or `switch`.

  For example, `noUnreachable` now reports `afterBreak()` here:

  ```js
  function f(xs) {
    outer: for (const x of xs) {
      break;
      afterBreak();
    }
  }
  ```

- [#&#8203;11093](https://github.com/biomejs/biome/pull/11093) [`78c992f`](https://github.com/biomejs/biome/commit/78c992fe8678523e8bce87be35025d5fd5d9b09c) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed CSS formatting for multiline function arguments preceded by comments:

  ```diff
   .example {
     value: outer(
       1,
       /* comment */
       nested(
  -      first,
  -      second
  -    )
  +        first,
  +        second
  +      )
     );
   }
  ```

- [#&#8203;12474](https://github.com/biomejs/biome/pull/12474) [`e55a750`](https://github.com/biomejs/biome/commit/e55a750b69c6f31756d3794379b8acd15ee08b7a) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;12471](https://github.com/biomejs/biome/issues/12471): a comment above a CSS rule no longer removes the indentation of the rule's wrapped selector.

  ```css
  /* comment */
  .sidebar-navigation
    .sidebar-navigation-item-with-a-long-descriptive-class-name {
    color: red;
  }
  ```

- [#&#8203;12180](https://github.com/biomejs/biome/pull/12180) [`6ddce62`](https://github.com/biomejs/biome/commit/6ddce62ba25364ce66987fd75625052357b8e02e) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;12179](https://github.com/biomejs/biome/issues/12179): the CSS parser now accepts Tailwind `@custom-variant` names that start with a digit, such as the `2xl` breakpoint.

  ```css
  @custom-variant 2xl (@container page (width >= 96rem));
  ```

- [#&#8203;12440](https://github.com/biomejs/biome/pull/12440) [`6636760`](https://github.com/biomejs/biome/commit/6636760be362588232aed2b9df06c5426b0ec740) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;12433](https://github.com/biomejs/biome/issues/12433): with `html.experimentalFullSupportEnabled`, the editor now offers code actions for diagnostics inside embedded code, such as expressions and scripts in Astro, Vue, Svelte, and HTML files.

- [#&#8203;12480](https://github.com/biomejs/biome/pull/12480) [`00771b4`](https://github.com/biomejs/biome/commit/00771b48c3ffecdbf1c62383ceff0bdb3430d48f) Thanks [@&#8203;vidigoat](https://github.com/vidigoat)! - Fixed the formatter duplicating comments inside an empty object, array, or class that is spread in JSX. Each formatting pass added another copy of the comment.

  ```diff
    <div
    	{
    		...{
    			/* comment */
  - 		}/* comment */
  + 		}
    	}
    />
  ```

- [#&#8203;11093](https://github.com/biomejs/biome/pull/11093) [`78c992f`](https://github.com/biomejs/biome/commit/78c992fe8678523e8bce87be35025d5fd5d9b09c) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;10131](https://github.com/biomejs/biome/issues/10131): Biome now correctly parses curried arrow functions in ternary consequents when the inner arrow's parameters use a destructuring pattern, e.g. `cond ? (x) => ({ a, b }) => body : alt`.

- [#&#8203;11563](https://github.com/biomejs/biome/pull/11563) [`a4e6528`](https://github.com/biomejs/biome/commit/a4e6528a4a0ff0405d159b5ada0e30f8f2c759e2) Thanks [@&#8203;santichausis](https://github.com/santichausis)! - Fixed [#&#8203;11419](https://github.com/biomejs/biome/issues/11419): [`noAdjacentSpacesInRegex`](https://biomejs.dev/linter/rules/no-adjacent-spaces-in-regex/) no longer applies its fix inside a regex character class (`[...]`), where it was changing what the class matches instead of just clarifying the spacing.

  For example, Biome used to "fix" this regex into matching different characters:

  ```js
  const before = /[\s   ]/;
  // Biome used to rewrite this to /[\s {3}]/, which is a different regex:
  // {3} isn't a quantifier inside a character class, it's three more
  // characters to match — the fixed regex now also matches "1", "2", "{", "}".
  ```

  Adjacent spaces outside a character class are still merged into a quantifier as before.

- [#&#8203;12451](https://github.com/biomejs/biome/pull/12451) [`c71fe6a`](https://github.com/biomejs/biome/commit/c71fe6afdf2342e38ccc4153e49f6c2ddc3a3aaa) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;12445](https://github.com/biomejs/biome/issues/12445): [`noTsIgnore`](https://biomejs.dev/linter/rules/no-ts-ignore/) no longer reports comments that merely mention `@ts-ignore`, such as `// see the note on @ts-ignore below` or JSDoc prose. The rule now follows TypeScript and only reports `@ts-ignore` at the start of a comment, or at the start of the last line of a block comment. The fix now rewrites only the directive.

- [#&#8203;12266](https://github.com/biomejs/biome/pull/12266) [`33fef85`](https://github.com/biomejs/biome/commit/33fef858a6116777bd7cd4084b4a558dd33e79f3) Thanks [@&#8203;JamBalaya56562](https://github.com/JamBalaya56562)! - Fixed [#&#8203;12265](https://github.com/biomejs/biome/issues/12265): Biome now uses the correct defaults for `semi` and `singleQuote` when migrating a Prettier configuration that doesn't set them. The migrated configuration uses `"semicolons": "always"` and `"quoteStyle": "double"`, matching Prettier's defaults.

- [#&#8203;11093](https://github.com/biomejs/biome/pull/11093) [`78c992f`](https://github.com/biomejs/biome/commit/78c992fe8678523e8bce87be35025d5fd5d9b09c) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;10515](https://github.com/biomejs/biome/issues/10515): `biome check --write` was not idempotent on Svelte files — multi-line template literals in `<script>` blocks and block comments in `<style>` blocks gained an extra indent level on every run.

- [#&#8203;12246](https://github.com/biomejs/biome/pull/12246) [`b073c2f`](https://github.com/biomejs/biome/commit/b073c2f6382ab08aa2808ffcbb1d96da279efdea) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed the parsing of Svelte `class:` and `style:` directive names. Modifiers such as `|important` in `style:color|important` are now parsed as modifiers instead of being part of the name, and `/` in `<input class:invalid/>` now closes the tag.

- [#&#8203;12246](https://github.com/biomejs/biome/pull/12246) [`b073c2f`](https://github.com/biomejs/biome/commit/b073c2f6382ab08aa2808ffcbb1d96da279efdea) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;11215](https://github.com/biomejs/biome/issues/11215): [`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/) no longer reports variables in Svelte components that are only used through the `class:` and `style:` directive shorthands, such as `<div class:active>` and `<div style:color>`.

- [#&#8203;12104](https://github.com/biomejs/biome/pull/12104) [`2bb4838`](https://github.com/biomejs/biome/commit/2bb4838a6823cc05283adc3d125ccc6d75938a23) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;12098](https://github.com/biomejs/biome/issues/12098): [`useImportExtensions`](https://biomejs.dev/linter/rules/use-import-extensions/) now reports relative imports without extensions in Vue, Svelte, and Astro files when `html.experimentalFullSupportEnabled` is enabled.

- [#&#8203;12441](https://github.com/biomejs/biome/pull/12441) [`c4199d7`](https://github.com/biomejs/biome/commit/c4199d791f59f2c1df243a5ea0421c18fc80e33d) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed commands that run with `--use-server` reporting `cancelled because of pending write` for some files instead of checking them. Biome now sends a cancelled request again, so the command reports the same diagnostics as a run without `--use-server`.

- [#&#8203;12242](https://github.com/biomejs/biome/pull/12242) [`0ec0a46`](https://github.com/biomejs/biome/commit/0ec0a4627a008a21ec29860d2ef5a80845e90202) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed a false positive in [`useVueConsistentDefinePropsDeclaration`](https://biomejs.dev/linter/rules/use-vue-consistent-define-props-declaration/). The rule no longer reports calls such as `a.b.c(0)` or calls to a locally imported `defineProps` function. It now only checks calls to Vue's `defineProps` macro.

- [#&#8203;12244](https://github.com/biomejs/biome/pull/12244) [`fe217c6`](https://github.com/biomejs/biome/commit/fe217c6b794157b5430a8890f3f7b14cfd3bc38e) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed a false positive in [`noVueDuplicateKeys`](https://biomejs.dev/linter/rules/no-vue-duplicate-keys/) where variables created from props wrapped in `withDefaults()` were reported as duplicates of those props. The following code is now valid:

  ```vue
  <script setup lang="ts">
  import { toRefs } from "vue";

  const props = withDefaults(defineProps<{ text: string }>(), {});
  const { text } = toRefs(props);
  </script>
  ```

- [#&#8203;12240](https://github.com/biomejs/biome/pull/…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-Linter Area: linter L-JavaScript Language: JavaScript and super languages

Projects

None yet

Development

Successfully merging this pull request may close these issues.

💅 noConfusingVoidType shouldn't report for void | never

3 participants