Skip to content

fix(lint/css): recognize Vue :deep() pseudo-class - #11184

Merged
ematipico merged 3 commits into
biomejs:mainfrom
subotac:fix/vue-deep-pseudo-class
Aug 3, 2026
Merged

fix(lint/css): recognize Vue :deep() pseudo-class#11184
ematipico merged 3 commits into
biomejs:mainfrom
subotac:fix/vue-deep-pseudo-class

Conversation

@subotac

@subotac subotac commented Aug 2, 2026

Copy link
Copy Markdown

Summary

Fixes #11176.

Changes

  • Fixed noUnknownPseudoClass incorrectly reporting Vue :deep() as an unknown pseudo-class.
  • The exception applies only to inline CSS inside .vue files; regular CSS behavior is unchanged.
  • Added a CLI regression test and updated snapshots:
    • :deep() is accepted.
    • :unknown is still correctly reported.
  • Added a patch changeset.

Validation

  • Ran the relevant test suite.
  • Verified that Vue inline CSS accepts :deep() without diagnostics.
  • Confirmed that unknown pseudo-classes (e.g. :unknown) continue to produce diagnostics.
  • Confirmed that behavior for non-.vue CSS remains unchanged.

@changeset-bot

changeset-bot Bot commented Aug 2, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: d5ec621

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

This PR includes changesets to release 13 packages
Name Type
@biomejs/biome Patch
@biomejs/cli-win32-x64 Patch
@biomejs/cli-win32-arm64 Patch
@biomejs/cli-darwin-x64 Patch
@biomejs/cli-darwin-arm64 Patch
@biomejs/cli-linux-x64 Patch
@biomejs/cli-linux-arm64 Patch
@biomejs/cli-linux-x64-musl Patch
@biomejs/cli-linux-arm64-musl Patch
@biomejs/wasm-web Patch
@biomejs/wasm-bundler Patch
@biomejs/wasm-nodejs 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

@github-actions

github-actions Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

❌ Automation signals

Activity patterns show signs of automation.

View full analysis →

This is an automated analysis by AgentScan

@github-actions github-actions Bot added agentscan:automated-account A-CLI Area: CLI A-Linter Area: linter L-CSS Language: CSS and super languages labels Aug 2, 2026
@coderabbitai

coderabbitai Bot commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: e7210d38-fe77-4e1d-9863-435d197a6ce7

📥 Commits

Reviewing files that changed from the base of the PR and between 4927ea4 and d5ec621.

⛔ Files ignored due to path filters (1)
  • crates/biome_html_analyze/tests/specs/correctness/noUnknownPseudoClass/valid.vue.snap is excluded by !**/*.snap and included by **
📒 Files selected for processing (2)
  • crates/biome_html_analyze/tests/spec_tests.rs
  • crates/biome_html_analyze/tests/specs/correctness/noUnknownPseudoClass/valid.vue

Walkthrough

The noUnknownPseudoClass rule now accepts Vue’s :deep() pseudo-class in embedded CSS. The HTML test harness validates rule metadata for extracted JSON scripts. A Vue fixture covers nested :deep(span) styling without diagnostics. A patch changeset documents the fix.

Suggested reviewers: ematipico

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the primary change: recognising Vue's :deep() pseudo-class in the CSS lint rule.
Description check ✅ Passed The description directly explains the fix, scope, regression coverage, validation, and changeset.
Linked Issues check ✅ Passed The changes satisfy issue #11176 by accepting Vue's :deep() in .vue CSS and adding regression coverage.
Out of Scope Changes check ✅ Passed The test harness adjustment supports the new Vue fixture, and all other changes relate to the linked issue.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitai coderabbitai Bot 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.

🧹 Nitpick comments (1)
crates/biome_css_analyze/src/lint/correctness/no_unknown_pseudo_class.rs (1)

217-217: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Document the new Vue exception in rustdoc.

This rule change adds :deep() as a valid Vue embedded pseudo-class, but the rule documentation is not updated. Add a valid example or a short note so generated rule documentation describes this exception.

As per coding guidelines, Rust rule changes must be documented with rustdoc.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@crates/biome_css_analyze/src/lint/correctness/no_unknown_pseudo_class.rs` at
line 217, Update the rustdoc for the rule containing the Vue-specific check in
the unknown pseudo-class analyzer to document that :deep() is valid when
analyzing Vue embedded files. Add either a concise explanatory note or a valid
usage example, while preserving the existing documentation for other contexts.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@crates/biome_css_analyze/src/lint/correctness/no_unknown_pseudo_class.rs`:
- Line 217: Update the rustdoc for the rule containing the Vue-specific check in
the unknown pseudo-class analyzer to document that :deep() is valid when
analyzing Vue embedded files. Add either a concise explanatory note or a valid
usage example, while preserving the existing documentation for other contexts.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 9f0b6a77-525b-46be-8ff0-0a535f48068a

📥 Commits

Reviewing files that changed from the base of the PR and between 9847e68 and f79d70c.

⛔ Files ignored due to path filters (1)
  • crates/biome_cli/tests/snapshots/main_cases_handle_vue_files/lint_vue_deep_pseudo_class.snap is excluded by !**/*.snap and included by **
📒 Files selected for processing (3)
  • .changeset/big-paws-divide.md
  • crates/biome_cli/tests/cases/handle_vue_files.rs
  • crates/biome_css_analyze/src/lint/correctness/no_unknown_pseudo_class.rs

Comment thread crates/biome_cli/tests/cases/handle_vue_files.rs Outdated
@codspeed-hq

codspeed-hq Bot commented Aug 2, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 96 untouched benchmarks
⏩ 190 skipped benchmarks1


Comparing subotac:fix/vue-deep-pseudo-class (d5ec621) with main (9847e68)

Open in CodSpeed

Footnotes

  1. 190 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.

Comment thread crates/biome_css_analyze/tests/spec_tests.rs Outdated
@github-actions github-actions Bot added the L-HTML Language: HTML and super languages label Aug 2, 2026
@ematipico
ematipico merged commit 135f476 into biomejs:main Aug 3, 2026
35 checks passed
@github-actions github-actions Bot mentioned this pull request Aug 3, 2026
OIRNOIR pushed a commit to OIRNOIR/YouTube-Helper-Client that referenced this pull request Aug 11, 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 | patch | [`2.5.6` -> `2.5.7`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.5.6/2.5.7) | `2.5.8` |

---

### Release Notes

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

### [`v2.5.7`](https://github.com/biomejs/biome/blob/HEAD/packages/@&#8203;biomejs/biome/CHANGELOG.md#257)

[Compare Source](https://github.com/biomejs/biome/compare/@biomejs/biome@2.5.6...@biomejs/biome@2.5.7)

##### Patch Changes

- [#&#8203;10822](biomejs/biome#10822) [`c171b3b`](biomejs/biome@c171b3b) Thanks [@&#8203;pkallos](https://github.com/pkallos)! - Added the option `ignoreIfStatements` to [useNullishCoalescing](https://biomejs.dev/linter/rules/use-nullish-coalescing/). Biome now flags `if` statements that only assign to a nullish variable (such as `if (!a) { a = b }`) and can rewrite them to `??=`. When enabled, Biome ignores those `if` statements.

- [#&#8203;11136](biomejs/biome#11136) [`e63354c`](biomejs/biome@e63354c) Thanks [@&#8203;AkashNaickar](https://github.com/AkashNaickar)! - Added a new nursery rule [`noExtendNative`](https://biomejs.dev/linter/rules/no-extend-native/), which reports extending the prototype of a built-in object.

- [#&#8203;10094](biomejs/biome#10094) [`e007143`](biomejs/biome@e007143) Thanks [@&#8203;THEjacob1000](https://github.com/THEjacob1000)! - Added the nursery rule [`noTailwindArbitraryValue`](https://biomejs.dev/linter/rules/no-tailwind-arbitrary-value/). Biome now reports Tailwind CSS arbitrary values such as `w-[400px]`, including in HTML/JSX class attributes, configured utility functions, and tagged templates.

- [#&#8203;11184](biomejs/biome#11184) [`135f476`](biomejs/biome@135f476) Thanks [@&#8203;subotac](https://github.com/subotac)! - Fixed [#&#8203;11176](biomejs/biome#11176): `noUnknownPseudoClass` now recognizes Vue's `:deep()` pseudo-class inside `.vue` style blocks.

- [#&#8203;8239](biomejs/biome#8239) [`a519f9d`](biomejs/biome@a519f9d) Thanks [@&#8203;cormacrelf](https://github.com/cormacrelf)! - Fixed [#&#8203;8233](biomejs/biome#8233), where Biome CLI in
  stdin mode didn't work correctly when handling files in projects with nested
  configurations. For example, with the following structure,
  `--stdin-file-path=subdirectory/...` would not use the nested configuration in
  `subdirectory/biome.json`:

  ```
  ├── biome.json
  └── subdirectory
      ├── biome.json
      └── lib.js
  ```

  ```shell
  biome format --write --stdin-file-path=subdirectory/lib.js < subdirectory/lib.js
  ```

  Now, the nested configuration is correctly picked up and applied.

  In addition, Biome now shows a warning if `--stdin-file-path` is provided but
  that path is ignored and therefore not formatted or fixed.

- [#&#8203;11138](biomejs/biome#11138) [`8c2c6bd`](biomejs/biome@8c2c6bd) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [`noUnnecessaryConditions`](https://biomejs.dev/linter/rules/no-unnecessary-conditions/): Biome now chooses the same function overload as TypeScript when an argument is a callback, so conditions that were previously missed are reported.

  The following code is now invalid, because a parameter typed `() => void` accepts an `async` callback and `schedule` therefore returns `string`:

  ```ts
  declare function schedule(handler: () => void): string;
  declare function schedule(handler: () => Promise<void>): string | undefined;

  schedule(async () => {}) ?? "fallback";
  ```

  The following code is also now invalid, because `map(() => 42)` returns `42`:

  ```ts
  type Mapper<T> = () => T;
  declare function map<T>(mapper: Mapper<T>): T;

  map(() => 42) || flag;
  ```

- [#&#8203;11138](biomejs/biome#11138) [`8c2c6bd`](biomejs/biome@8c2c6bd) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;11087](biomejs/biome#11087): [`noUnnecessaryConditions`](https://biomejs.dev/linter/rules/no-unnecessary-conditions/) no longer reports optional chains and nullish coalescing whose receiver can be nullish.

  For example, the optional chain and fallback in the following code are no longer reported:

  ```ts
  declare const usage: { range: { startDate: string } } | null;
  const startDate = usage?.range.startDate ?? "N/A";
  ```

- [#&#8203;11118](biomejs/biome#11118) [`9c16840`](biomejs/biome@9c16840) Thanks [@&#8203;subotac](https://github.com/subotac)! - Fixed [#&#8203;11098](biomejs/biome#11098): The HTML formatter now preserves the configured trailing newline when a file ends with a comment.

  ```diff
  -<!-- trailing comment -->
  \ No newline at end of file
  +<!-- trailing comment -->
  ```

- [#&#8203;11201](biomejs/biome#11201) [`0e80610`](biomejs/biome@0e80610) Thanks [@&#8203;Bishwas-py](https://github.com/Bishwas-py)! - Fixed [#&#8203;11182](biomejs/biome#11182): suppression comments for [`noPositiveTabindex`](https://biomejs.dev/linter/rules/no-positive-tabindex/) now suppress the rule in HTML files when the attributes of the element span multiple lines.

- [#&#8203;11079](biomejs/biome#11079) [`607afd2`](biomejs/biome@607afd2) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - The HTML formatter now lays out the `srcset` attribute of `<img>` and `<source>` as the list of candidates it is. Runs of whitespace between candidates collapse, and once the list no longer fits on one line each candidate goes on its own line with the descriptors aligned:

  ```diff
  - <img srcset="/visual@0.5.png  400w, /visual.png 805w, /visual@2x.png 1610w, /visual@3x.png 2415w" />
  + <img
  +   srcset="
  +     /visual@0.5.png  400w,
  +     /visual.png      805w,
  +     /visual@2x.png  1610w,
  +     /visual@3x.png  2415w
  +   "
  + />
  ```

- [#&#8203;11156](biomejs/biome#11156) [`fed72c7`](biomejs/biome@fed72c7) Thanks [@&#8203;saberoueslati](https://github.com/saberoueslati)! - Fixed [#&#8203;11129](biomejs/biome#11129): [`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/) no longer reports Vue bindings as unused when they are assigned through automatically unwrapped template refs.

- [#&#8203;11124](biomejs/biome#11124) [`d890b39`](biomejs/biome@d890b39) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatting of line comments between a declaration colon and value to preserve their source indentation.

  ```diff
   .test {
     background:
  -  /////// foo
  -  // bar
  +        /////// foo
  +        // bar
       radial-gradient(circle, #&#8203;000, transparent);
   }
  ```

- [#&#8203;11113](biomejs/biome#11113) [`3d8ab73`](biomejs/biome@3d8ab73) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatting of long block comments between comma-separated property values:

  ```diff
   .foo {
     box-shadow:
  -    1000px /* long long long long long long long long long long long long comment */ 1000px /* long long long long long long long long long comment */ 2px color(srgb 0.555555555 0.555555555 0.555555555),
  +    1000px
  +      /* long long long long long long long long long long long long comment */
  +      1000px /* long long long long long long long long long comment */ 2px
  +      color(srgb 0.555555555 0.555555555 0.555555555),
       1px 1px black;
   }
  ```

- [#&#8203;11127](biomejs/biome#11127) [`da5c1a5`](biomejs/biome@da5c1a5) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - The HTML formatter now picks the quote character for an attribute by counting the quotes in the value rather than looking only for a double quote. `&apos;` and `&quot;` count as the characters they stand for, and only the character that ends up as the delimiter stays escaped:

  ```diff
  - <div title='123 &apos;&quot; 456'></div>
  + <div title="123 '&quot; 456"></div>
  ```

  Entities that are not quotes, such as `&amp;` or `&[#&#8203;39](https://github.com/biomejs/biome/issues/39);`, are left exactly as written.

- [#&#8203;11193](biomejs/biome#11193) [`77035bb`](biomejs/biome@77035bb) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed the HTML formatter collapsing the blank line between an element and the text that follows it. A blank line before text is now kept, the way one before another element already was:

  ```diff
    <div>foo</div>
  -
    text
  ```

- [#&#8203;11106](biomejs/biome#11106) [`ad80f57`](biomejs/biome@ad80f57) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - The HTML formatter now writes the HTML5 doctype in lowercase, matching Prettier:

  ```diff
  - <!DOCTYPE html>
  + <!doctype html>
  ```

  This only applies to a plain `.html` file whose doctype stands alone. A doctype that names a DTD keeps the case it was written with, since the rest of the declaration is not lowercased either:

  ```html
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  ```

  A `.vue`, `.svelte`, or `.astro` file keeps whatever the author wrote.

- [#&#8203;11188](biomejs/biome#11188) [`60679db`](biomejs/biome@60679db) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed the HTML formatter printing a comment twice when it ended the line of the last element in a document:

  ```diff
  - text<!-- a --><!-- a -->
  + text<!-- a -->
  ```

- [#&#8203;11077](biomejs/biome#11077) [`4dcd0d9`](biomejs/biome@4dcd0d9) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed a bug where the HTML formatter collapsed the whitespace inside `<textarea>`, `<xmp>` and `<plaintext>`, changing what the page renders.

  ```diff
  - <textarea>
  -  line one
  - line two </textarea>
  + <textarea>line one line two</textarea>
  ```

  Biome now prints the content of these elements exactly as it appears in the source, matching the existing behavior for `<pre>`.

- [#&#8203;11194](biomejs/biome#11194) [`abfbb11`](biomejs/biome@abfbb11) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed the HTML formatter refusing to format a Svelte file containing an array pattern that skips a position:

  ```svelte
  {#each animals as [, value]}
  	<p>{value}</p>
  {/each}
  ```

- [#&#8203;10094](biomejs/biome#10094) [`e007143`](biomejs/biome@e007143) Thanks [@&#8203;THEjacob1000](https://github.com/THEjacob1000)! - Fixed [`useSortedClasses`](https://biomejs.dev/linter/rules/use-sorted-classes/) to correctly detect unsorted classes in static member expression tagged templates (e.g. `tw.div\`...\`\`). Previously, these were silently skipped due to surrounding whitespace trivia not being stripped from the tag name.

- [#&#8203;11078](biomejs/biome#11078) [`10da30e`](biomejs/biome@10da30e) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed Vue single-file components failing to parse when they contain a custom block such as `<i18n>` or `<docs>`, or a `<template>` written in another language. Their content is no longer read as HTML, so a block may hold whatever its own tooling expects:

  ```vue
  <docs>
  This block is prose, and it may mention a `<my-component>` without closing it.
  </docs>

  <template lang="pug">
    .test
      #foo
  </template>
  ```

  Previously both blocks produced a parse error and the whole file was left unformatted. Biome now prints their content unchanged while still formatting the opening tag.

- [#&#8203;11231](biomejs/biome#11231) [`4afd901`](biomejs/biome@4afd901) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Improved the performance of the following lint rules:

  - [`noArguments`](https://biomejs.dev/linter/rules/no-arguments/).
  - [`noGlobalAssign`](https://biomejs.dev/linter/rules/no-global-assign/).
  - [`noUndeclaredVariables`](https://biomejs.dev/linter/rules/no-undeclared-variables/).
  - [`noRestrictedGlobals`](https://biomejs.dev/linter/rules/no-restricted-globals/).
  - [`noInvalidUseBeforeDeclaration`](https://biomejs.dev/linter/rules/no-invalid-use-before-declaration/).
  - [`noShadow`](https://biomejs.dev/linter/rules/no-shadow/).
  - [`noRedeclare`](https://biomejs.dev/linter/rules/no-redeclare/).

- [#&#8203;11134](biomejs/biome#11134) [`2fa0a62`](biomejs/biome@2fa0a62) Thanks [@&#8203;yanthomasdev](https://github.com/yanthomasdev)! - Clarified the warning emitted when using the experimental `json` and `json-pretty` reporters.

- [#&#8203;11198](biomejs/biome#11198) [`ed88b13`](biomejs/biome@ed88b13) Thanks [@&#8203;saberoueslati](https://github.com/saberoueslati)! - Fixed [#&#8203;11171](biomejs/biome#11171): variables referenced only inside a Svelte attachment (`{@Attach ...}`) are no longer reported as unused by [`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/) and [`noUnusedImports`](https://biomejs.dev/linter/rules/no-unused-imports/).

- [#&#8203;11155](biomejs/biome#11155) [`6ee17ea`](biomejs/biome@6ee17ea) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved performance when printing diagnostics to the console.

- [#&#8203;11160](biomejs/biome#11160) [`217f8ad`](biomejs/biome@217f8ad) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved the performance of [`noFloatingPromises`](https://biomejs.dev/linter/rules/no-floating-promises/) by skipping type inference for assignment statements, which are always considered handled.

- [#&#8203;11159](biomejs/biome#11159) [`26c23d9`](biomejs/biome@26c23d9) Thanks [@&#8203;saberoueslati](https://github.com/saberoueslati)! - Fixed [#&#8203;11144](biomejs/biome#11144): [`noFloatingPromises`](https://biomejs.dev/linter/rules/no-floating-promises/) no longer reports already-awaited optional Promise values.

- [#&#8203;11138](biomejs/biome#11138) [`8c2c6bd`](biomejs/biome@8c2c6bd) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;11121](biomejs/biome#11121): [`noUnnecessaryConditions`](https://biomejs.dev/linter/rules/no-unnecessary-conditions/) no longer reports conditions based on an inapplicable function overload.

  For example, the condition in the following code is no longer reported because `query({})` selects the overload that returns `boolean`:

  ```ts
  declare function query(options: { initial: string }): { isPending: false };
  declare function query(options: { initial?: string }): { isPending: boolean };

  const { isPending } = query({});
  isPending || fallback;
  ```

- [#&#8203;11152](biomejs/biome#11152) [`c4fc6a9`](biomejs/biome@c4fc6a9) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved the performance of collecting rule timings with `--profile-rules` in heavily multithreaded environments.

- [#&#8203;11128](biomejs/biome#11128) [`4d3ff76`](biomejs/biome@4d3ff76) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;7635](biomejs/biome#7635): [`noDeprecatedImports`](https://biomejs.dev/linter/rules/no-deprecated-imports/) now detects deprecated ambient declarations that are exported separately.

- [#&#8203;11117](biomejs/biome#11117) [`01f7ef5`](biomejs/biome@01f7ef5) Thanks [@&#8203;subotac](https://github.com/subotac)! - Fixed [#&#8203;11014](biomejs/biome#11014): [`noDelete`](https://biomejs.dev/linter/rules/no-delete/) no longer reports `process.env["FOO"]` style property deletions.

- [#&#8203;11168](biomejs/biome#11168) [`9847e68`](biomejs/biome@9847e68) Thanks [@&#8203;saberoueslati](https://github.com/saberoueslati)! - Added the nursery rule [`noNonScalableViewport`](https://biomejs.dev/linter/rules/no-non-scalable-viewport), which reports viewport metadata that disables user scaling with `user-scalable=no`.

  For example:

  ```html
  <meta name="viewport" content="width=device-width, user-scalable=no" />
  ```

- [#&#8203;11154](biomejs/biome#11154) [`a1d6b1f`](biomejs/biome@a1d6b1f) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved the performance of [`noImportCycles`](https://biomejs.dev/linter/rules/no-import-cycles/) by skipping graph traversals for imports that cannot be part of a cycle.

- [#&#8203;11175](biomejs/biome#11175) [`d96d6dd`](biomejs/biome@d96d6dd) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed CSS parsing of registered custom properties: Biome now correctly validates the `syntax` descriptor of `@property` rules.

</details>

---

### Configuration

📅 **Schedule**: (UTC)

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

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

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

---

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

---

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

Reviewed-on: https://git.oirnoir.dev/OIRNOIR/YouTube-Helper-Client/pulls/16
OIRNOIR pushed a commit to OIRNOIR/YouTube-Helper-Server that referenced this pull request Aug 11, 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 | patch | [`2.5.6` -> `2.5.7`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.5.6/2.5.7) | `2.5.8` |

---

### Release Notes

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

### [`v2.5.7`](https://github.com/biomejs/biome/blob/HEAD/packages/@&#8203;biomejs/biome/CHANGELOG.md#257)

[Compare Source](https://github.com/biomejs/biome/compare/@biomejs/biome@2.5.6...@biomejs/biome@2.5.7)

##### Patch Changes

- [#&#8203;10822](biomejs/biome#10822) [`c171b3b`](biomejs/biome@c171b3b) Thanks [@&#8203;pkallos](https://github.com/pkallos)! - Added the option `ignoreIfStatements` to [useNullishCoalescing](https://biomejs.dev/linter/rules/use-nullish-coalescing/). Biome now flags `if` statements that only assign to a nullish variable (such as `if (!a) { a = b }`) and can rewrite them to `??=`. When enabled, Biome ignores those `if` statements.

- [#&#8203;11136](biomejs/biome#11136) [`e63354c`](biomejs/biome@e63354c) Thanks [@&#8203;AkashNaickar](https://github.com/AkashNaickar)! - Added a new nursery rule [`noExtendNative`](https://biomejs.dev/linter/rules/no-extend-native/), which reports extending the prototype of a built-in object.

- [#&#8203;10094](biomejs/biome#10094) [`e007143`](biomejs/biome@e007143) Thanks [@&#8203;THEjacob1000](https://github.com/THEjacob1000)! - Added the nursery rule [`noTailwindArbitraryValue`](https://biomejs.dev/linter/rules/no-tailwind-arbitrary-value/). Biome now reports Tailwind CSS arbitrary values such as `w-[400px]`, including in HTML/JSX class attributes, configured utility functions, and tagged templates.

- [#&#8203;11184](biomejs/biome#11184) [`135f476`](biomejs/biome@135f476) Thanks [@&#8203;subotac](https://github.com/subotac)! - Fixed [#&#8203;11176](biomejs/biome#11176): `noUnknownPseudoClass` now recognizes Vue's `:deep()` pseudo-class inside `.vue` style blocks.

- [#&#8203;8239](biomejs/biome#8239) [`a519f9d`](biomejs/biome@a519f9d) Thanks [@&#8203;cormacrelf](https://github.com/cormacrelf)! - Fixed [#&#8203;8233](biomejs/biome#8233), where Biome CLI in
  stdin mode didn't work correctly when handling files in projects with nested
  configurations. For example, with the following structure,
  `--stdin-file-path=subdirectory/...` would not use the nested configuration in
  `subdirectory/biome.json`:

  ```
  ├── biome.json
  └── subdirectory
      ├── biome.json
      └── lib.js
  ```

  ```shell
  biome format --write --stdin-file-path=subdirectory/lib.js < subdirectory/lib.js
  ```

  Now, the nested configuration is correctly picked up and applied.

  In addition, Biome now shows a warning if `--stdin-file-path` is provided but
  that path is ignored and therefore not formatted or fixed.

- [#&#8203;11138](biomejs/biome#11138) [`8c2c6bd`](biomejs/biome@8c2c6bd) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [`noUnnecessaryConditions`](https://biomejs.dev/linter/rules/no-unnecessary-conditions/): Biome now chooses the same function overload as TypeScript when an argument is a callback, so conditions that were previously missed are reported.

  The following code is now invalid, because a parameter typed `() => void` accepts an `async` callback and `schedule` therefore returns `string`:

  ```ts
  declare function schedule(handler: () => void): string;
  declare function schedule(handler: () => Promise<void>): string | undefined;

  schedule(async () => {}) ?? "fallback";
  ```

  The following code is also now invalid, because `map(() => 42)` returns `42`:

  ```ts
  type Mapper<T> = () => T;
  declare function map<T>(mapper: Mapper<T>): T;

  map(() => 42) || flag;
  ```

- [#&#8203;11138](biomejs/biome#11138) [`8c2c6bd`](biomejs/biome@8c2c6bd) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;11087](biomejs/biome#11087): [`noUnnecessaryConditions`](https://biomejs.dev/linter/rules/no-unnecessary-conditions/) no longer reports optional chains and nullish coalescing whose receiver can be nullish.

  For example, the optional chain and fallback in the following code are no longer reported:

  ```ts
  declare const usage: { range: { startDate: string } } | null;
  const startDate = usage?.range.startDate ?? "N/A";
  ```

- [#&#8203;11118](biomejs/biome#11118) [`9c16840`](biomejs/biome@9c16840) Thanks [@&#8203;subotac](https://github.com/subotac)! - Fixed [#&#8203;11098](biomejs/biome#11098): The HTML formatter now preserves the configured trailing newline when a file ends with a comment.

  ```diff
  -<!-- trailing comment -->
  \ No newline at end of file
  +<!-- trailing comment -->
  ```

- [#&#8203;11201](biomejs/biome#11201) [`0e80610`](biomejs/biome@0e80610) Thanks [@&#8203;Bishwas-py](https://github.com/Bishwas-py)! - Fixed [#&#8203;11182](biomejs/biome#11182): suppression comments for [`noPositiveTabindex`](https://biomejs.dev/linter/rules/no-positive-tabindex/) now suppress the rule in HTML files when the attributes of the element span multiple lines.

- [#&#8203;11079](biomejs/biome#11079) [`607afd2`](biomejs/biome@607afd2) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - The HTML formatter now lays out the `srcset` attribute of `<img>` and `<source>` as the list of candidates it is. Runs of whitespace between candidates collapse, and once the list no longer fits on one line each candidate goes on its own line with the descriptors aligned:

  ```diff
  - <img srcset="/visual@0.5.png  400w, /visual.png 805w, /visual@2x.png 1610w, /visual@3x.png 2415w" />
  + <img
  +   srcset="
  +     /visual@0.5.png  400w,
  +     /visual.png      805w,
  +     /visual@2x.png  1610w,
  +     /visual@3x.png  2415w
  +   "
  + />
  ```

- [#&#8203;11156](biomejs/biome#11156) [`fed72c7`](biomejs/biome@fed72c7) Thanks [@&#8203;saberoueslati](https://github.com/saberoueslati)! - Fixed [#&#8203;11129](biomejs/biome#11129): [`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/) no longer reports Vue bindings as unused when they are assigned through automatically unwrapped template refs.

- [#&#8203;11124](biomejs/biome#11124) [`d890b39`](biomejs/biome@d890b39) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatting of line comments between a declaration colon and value to preserve their source indentation.

  ```diff
   .test {
     background:
  -  /////// foo
  -  // bar
  +        /////// foo
  +        // bar
       radial-gradient(circle, #&#8203;000, transparent);
   }
  ```

- [#&#8203;11113](biomejs/biome#11113) [`3d8ab73`](biomejs/biome@3d8ab73) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatting of long block comments between comma-separated property values:

  ```diff
   .foo {
     box-shadow:
  -    1000px /* long long long long long long long long long long long long comment */ 1000px /* long long long long long long long long long comment */ 2px color(srgb 0.555555555 0.555555555 0.555555555),
  +    1000px
  +      /* long long long long long long long long long long long long comment */
  +      1000px /* long long long long long long long long long comment */ 2px
  +      color(srgb 0.555555555 0.555555555 0.555555555),
       1px 1px black;
   }
  ```

- [#&#8203;11127](biomejs/biome#11127) [`da5c1a5`](biomejs/biome@da5c1a5) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - The HTML formatter now picks the quote character for an attribute by counting the quotes in the value rather than looking only for a double quote. `&apos;` and `&quot;` count as the characters they stand for, and only the character that ends up as the delimiter stays escaped:

  ```diff
  - <div title='123 &apos;&quot; 456'></div>
  + <div title="123 '&quot; 456"></div>
  ```

  Entities that are not quotes, such as `&amp;` or `&[#&#8203;39](https://github.com/biomejs/biome/issues/39);`, are left exactly as written.

- [#&#8203;11193](biomejs/biome#11193) [`77035bb`](biomejs/biome@77035bb) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed the HTML formatter collapsing the blank line between an element and the text that follows it. A blank line before text is now kept, the way one before another element already was:

  ```diff
    <div>foo</div>
  -
    text
  ```

- [#&#8203;11106](biomejs/biome#11106) [`ad80f57`](biomejs/biome@ad80f57) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - The HTML formatter now writes the HTML5 doctype in lowercase, matching Prettier:

  ```diff
  - <!DOCTYPE html>
  + <!doctype html>
  ```

  This only applies to a plain `.html` file whose doctype stands alone. A doctype that names a DTD keeps the case it was written with, since the rest of the declaration is not lowercased either:

  ```html
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  ```

  A `.vue`, `.svelte`, or `.astro` file keeps whatever the author wrote.

- [#&#8203;11188](biomejs/biome#11188) [`60679db`](biomejs/biome@60679db) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed the HTML formatter printing a comment twice when it ended the line of the last element in a document:

  ```diff
  - text<!-- a --><!-- a -->
  + text<!-- a -->
  ```

- [#&#8203;11077](biomejs/biome#11077) [`4dcd0d9`](biomejs/biome@4dcd0d9) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed a bug where the HTML formatter collapsed the whitespace inside `<textarea>`, `<xmp>` and `<plaintext>`, changing what the page renders.

  ```diff
  - <textarea>
  -  line one
  - line two </textarea>
  + <textarea>line one line two</textarea>
  ```

  Biome now prints the content of these elements exactly as it appears in the source, matching the existing behavior for `<pre>`.

- [#&#8203;11194](biomejs/biome#11194) [`abfbb11`](biomejs/biome@abfbb11) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed the HTML formatter refusing to format a Svelte file containing an array pattern that skips a position:

  ```svelte
  {#each animals as [, value]}
  	<p>{value}</p>
  {/each}
  ```

- [#&#8203;10094](biomejs/biome#10094) [`e007143`](biomejs/biome@e007143) Thanks [@&#8203;THEjacob1000](https://github.com/THEjacob1000)! - Fixed [`useSortedClasses`](https://biomejs.dev/linter/rules/use-sorted-classes/) to correctly detect unsorted classes in static member expression tagged templates (e.g. `tw.div\`...\`\`). Previously, these were silently skipped due to surrounding whitespace trivia not being stripped from the tag name.

- [#&#8203;11078](biomejs/biome#11078) [`10da30e`](biomejs/biome@10da30e) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed Vue single-file components failing to parse when they contain a custom block such as `<i18n>` or `<docs>`, or a `<template>` written in another language. Their content is no longer read as HTML, so a block may hold whatever its own tooling expects:

  ```vue
  <docs>
  This block is prose, and it may mention a `<my-component>` without closing it.
  </docs>

  <template lang="pug">
    .test
      #foo
  </template>
  ```

  Previously both blocks produced a parse error and the whole file was left unformatted. Biome now prints their content unchanged while still formatting the opening tag.

- [#&#8203;11231](biomejs/biome#11231) [`4afd901`](biomejs/biome@4afd901) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Improved the performance of the following lint rules:

  - [`noArguments`](https://biomejs.dev/linter/rules/no-arguments/).
  - [`noGlobalAssign`](https://biomejs.dev/linter/rules/no-global-assign/).
  - [`noUndeclaredVariables`](https://biomejs.dev/linter/rules/no-undeclared-variables/).
  - [`noRestrictedGlobals`](https://biomejs.dev/linter/rules/no-restricted-globals/).
  - [`noInvalidUseBeforeDeclaration`](https://biomejs.dev/linter/rules/no-invalid-use-before-declaration/).
  - [`noShadow`](https://biomejs.dev/linter/rules/no-shadow/).
  - [`noRedeclare`](https://biomejs.dev/linter/rules/no-redeclare/).

- [#&#8203;11134](biomejs/biome#11134) [`2fa0a62`](biomejs/biome@2fa0a62) Thanks [@&#8203;yanthomasdev](https://github.com/yanthomasdev)! - Clarified the warning emitted when using the experimental `json` and `json-pretty` reporters.

- [#&#8203;11198](biomejs/biome#11198) [`ed88b13`](biomejs/biome@ed88b13) Thanks [@&#8203;saberoueslati](https://github.com/saberoueslati)! - Fixed [#&#8203;11171](biomejs/biome#11171): variables referenced only inside a Svelte attachment (`{@Attach ...}`) are no longer reported as unused by [`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/) and [`noUnusedImports`](https://biomejs.dev/linter/rules/no-unused-imports/).

- [#&#8203;11155](biomejs/biome#11155) [`6ee17ea`](biomejs/biome@6ee17ea) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved performance when printing diagnostics to the console.

- [#&#8203;11160](biomejs/biome#11160) [`217f8ad`](biomejs/biome@217f8ad) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved the performance of [`noFloatingPromises`](https://biomejs.dev/linter/rules/no-floating-promises/) by skipping type inference for assignment statements, which are always considered handled.

- [#&#8203;11159](biomejs/biome#11159) [`26c23d9`](biomejs/biome@26c23d9) Thanks [@&#8203;saberoueslati](https://github.com/saberoueslati)! - Fixed [#&#8203;11144](biomejs/biome#11144): [`noFloatingPromises`](https://biomejs.dev/linter/rules/no-floating-promises/) no longer reports already-awaited optional Promise values.

- [#&#8203;11138](biomejs/biome#11138) [`8c2c6bd`](biomejs/biome@8c2c6bd) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;11121](biomejs/biome#11121): [`noUnnecessaryConditions`](https://biomejs.dev/linter/rules/no-unnecessary-conditions/) no longer reports conditions based on an inapplicable function overload.

  For example, the condition in the following code is no longer reported because `query({})` selects the overload that returns `boolean`:

  ```ts
  declare function query(options: { initial: string }): { isPending: false };
  declare function query(options: { initial?: string }): { isPending: boolean };

  const { isPending } = query({});
  isPending || fallback;
  ```

- [#&#8203;11152](biomejs/biome#11152) [`c4fc6a9`](biomejs/biome@c4fc6a9) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved the performance of collecting rule timings with `--profile-rules` in heavily multithreaded environments.

- [#&#8203;11128](biomejs/biome#11128) [`4d3ff76`](biomejs/biome@4d3ff76) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;7635](biomejs/biome#7635): [`noDeprecatedImports`](https://biomejs.dev/linter/rules/no-deprecated-imports/) now detects deprecated ambient declarations that are exported separately.

- [#&#8203;11117](biomejs/biome#11117) [`01f7ef5`](biomejs/biome@01f7ef5) Thanks [@&#8203;subotac](https://github.com/subotac)! - Fixed [#&#8203;11014](biomejs/biome#11014): [`noDelete`](https://biomejs.dev/linter/rules/no-delete/) no longer reports `process.env["FOO"]` style property deletions.

- [#&#8203;11168](biomejs/biome#11168) [`9847e68`](biomejs/biome@9847e68) Thanks [@&#8203;saberoueslati](https://github.com/saberoueslati)! - Added the nursery rule [`noNonScalableViewport`](https://biomejs.dev/linter/rules/no-non-scalable-viewport), which reports viewport metadata that disables user scaling with `user-scalable=no`.

  For example:

  ```html
  <meta name="viewport" content="width=device-width, user-scalable=no" />
  ```

- [#&#8203;11154](biomejs/biome#11154) [`a1d6b1f`](biomejs/biome@a1d6b1f) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved the performance of [`noImportCycles`](https://biomejs.dev/linter/rules/no-import-cycles/) by skipping graph traversals for imports that cannot be part of a cycle.

- [#&#8203;11175](biomejs/biome#11175) [`d96d6dd`](biomejs/biome@d96d6dd) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed CSS parsing of registered custom properties: Biome now correctly validates the `syntax` descriptor of `@property` rules.

</details>

---

### Configuration

📅 **Schedule**: (UTC)

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

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

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

---

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

---

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

Reviewed-on: https://git.oirnoir.dev/OIRNOIR/YouTube-Helper-Server/pulls/34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-CLI Area: CLI A-Linter Area: linter agentscan:automated-account L-CSS Language: CSS and super languages L-HTML Language: HTML and super languages

Projects

None yet

Development

Successfully merging this pull request may close these issues.

💅 Vue's :deep considered as unknown

3 participants