Skip to content

feat(css_formatter): align syntax-owned casing policy - #10889

Merged
denbezrukov merged 12 commits into
mainfrom
db/css-case-policy
Jul 15, 2026
Merged

denbezrukov merged 12 commits into
mainfrom
db/css-case-policy

Conversation

@denbezrukov

@denbezrukov denbezrukov commented Jul 9, 2026 •

Copy link
Copy Markdown
Contributor

This PR was implemented with AI assistance.

Summary

CSS formatter casing was previously too implicit: formatter code could call raw identifier.format() or token.format() without deciding whether the text was CSS-owned syntax that should be normalized or author/Sass/framework-owned text that should be preserved. That made new CSS, Tailwind, and SCSS formatter code easy to regress.

This PR adds an explicit casing policy for CSS syntax tokens and identifiers. CSS-owned names such as at-rules, pseudo selectors, query feature names, and CSS-wide keywords are lowercased, while author-defined names, Sass identifiers, Tailwind names, custom identifiers, and unknown/future syntax preserve source casing.

It also adds a debug-only formatter audit for unclassified case decisions. In tests, raw identifier.format() and unclassified contextual token.format() are reported as incomplete formatter decisions; in production, Auto preserves source casing so users do not get unsafe output changes.

Test Plan

  • Added focused CSS casing fixtures for syntax-owned vs author-owned names.
  • cargo test -p biome_css_formatter

@changeset-bot

changeset-bot Bot commented Jul 9, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 6542229

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 Jul 9, 2026

Copy link
Copy Markdown
Contributor

✅ Organic activity

No automation signals detected in the analyzed events.

View full analysis →

This is an automated analysis by AgentScan

@github-actions github-actions Bot added A-Formatter Area: formatter L-CSS Language: CSS and super languages labels Jul 9, 2026
@codspeed

codspeed Bot commented Jul 9, 2026 •

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 178 untouched benchmarks
⏩ 85 skipped benchmarks1


Comparing db/css-case-policy (ab3ab63) with main (2bb8293)

Open in CodSpeed

Footnotes

  1. 85 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. ↩

@denbezrukov
denbezrukov force-pushed the db/css-case-policy branch 2 times, most recently from a2d5479 to ccfb2bb Compare July 9, 2026 20:49
@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Caution

Review failed

An error occurred during the review process. Please try again later.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch db/css-case-policy

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.

@github-actions github-actions Bot added the A-Tooling Area: internal tools label Jul 10, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Parser conformance results on

js/262

Test result main count This PR count Difference
Total 53422 53422 0
Passed 52141 52141 0
Failed 1239 1239 0
Panics 42 42 0
Coverage 97.60% 97.60% 0.00%

jsx/babel

Test result main count This PR count Difference
Total 38 38 0
Passed 37 37 0
Failed 1 1 0
Panics 0 0 0
Coverage 97.37% 97.37% 0.00%

markdown/commonmark

Test result main count This PR count Difference
Total 652 652 0
Passed 652 652 0
Failed 0 0 0
Panics 0 0 0
Coverage 100.00% 100.00% 0.00%

symbols/microsoft

Test result main count This PR count Difference
Total 5467 5467 0
Passed 1915 1915 0
Failed 3552 3552 0
Panics 0 0 0
Coverage 35.03% 35.03% 0.00%

ts/babel

Test result main count This PR count Difference
Total 677 677 0
Passed 593 593 0
Failed 84 84 0
Panics 0 0 0
Coverage 87.59% 87.59% 0.00%

ts/microsoft

Test result main count This PR count Difference
Total 18876 18876 0
Passed 13010 13010 0
Failed 5865 5865 0
Panics 1 1 0
Coverage 68.92% 68.92% 0.00%

@ematipico ematipico left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I left a comment for now, a proposal. Let me know what you think

Comment on lines +7 to +16
pub(crate) struct FormatAnyCssFunctionName {
case: CssCase,
}
impl FormatRuleWithOptions<AnyCssFunctionName> for FormatAnyCssFunctionName {
type Options = CssCase;
fn with_options(mut self, options: Self::Options) -> Self {
self.case = options;
self
}
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I do wonder if we can generalise this into a biome_formatter trait, and then the nodes that need it, can implement it. The reason for this proposal is that because it feels generic enough that other languages e.g. HTML could take advantage of it.

This would also reduce the code of this PR because:

  • we don't need to change the code gen
  • we import the trait in the nodes that need it

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I agree with this. I’ve tried to implement the idea by moving some logic to biome_formatter, and now we have .with_text_case(...).

We’ve had problems with casing in the past because the logic was implicit, which often made the behavior either too narrow or too broad. I think explicitly choosing the casing policy at each call site is a good trade-off here.

The CSS crate also catches new nodes that don’t have an explicit casing policy.

@github-actions github-actions Bot removed the A-Tooling Area: internal tools label Jul 10, 2026

@ematipico ematipico left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I love it! Great fix

@denbezrukov
denbezrukov merged commit 89526e3 into main Jul 15, 2026
35 of 38 checks passed
@denbezrukov
denbezrukov deleted the db/css-case-policy branch July 15, 2026 13:34
@github-actions github-actions Bot mentioned this pull request Jul 15, 2026
OIRNOIR pushed a commit to OIRNOIR/YouTube-Helper-Client that referenced this pull request Jul 28, 2026
This PR contains the following updates:

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

---

### Release Notes

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

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

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

##### Patch Changes

- [#&#8203;10972](biomejs/biome#10972) [`ab8c21b`](biomejs/biome@ab8c21b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [`useExhaustiveSwitchCases`](https://biomejs.dev/linter/rules/use-exhaustive-switch-cases/) for unions of bigint literals. The rule now reports missing bigint cases and compares bigint literals by value, including binary, octal, hexadecimal, and separator-containing spellings. For example, this switch now reports the missing `2n` case:

  ```ts
  declare const value: 1n | 2n;
  switch (value) {
    case 1n:
      break;
  }
  ```

- [#&#8203;10972](biomejs/biome#10972) [`ab8c21b`](biomejs/biome@ab8c21b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed false positives in [`noBaseToString`](https://biomejs.dev/linter/rules/no-base-to-string/) and [`useNullishCoalescing`](https://biomejs.dev/linter/rules/use-nullish-coalescing/) when member, stringification, or nullish inference cannot complete. These rules now suppress diagnostics instead of reporting from partial type information. For example, neither expression is reported when a recursive type cannot be fully resolved:

  ```ts
  type Recursive = Recursive;
  declare const value: Recursive;

  String(value);
  value || "fallback";
  ```

- [#&#8203;10977](biomejs/biome#10977) [`0bf7486`](biomejs/biome@0bf7486) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10922](biomejs/biome#10922): the action [`useSortedAttributes`](https://biomejs.dev/assist/actions/use-sorted-attributes/) no longer triggers for HTML instructions.

- [#&#8203;10957](biomejs/biome#10957) [`cf263c4`](biomejs/biome@cf263c4) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [`noThenProperty`](https://biomejs.dev/linter/rules/no-then-property/) failing to detect `Object.fromEntries`, `Object.defineProperty`, and `Reflect.defineProperty` calls with comments between their tokens.

- [#&#8203;10983](biomejs/biome#10983) [`edc0ed7`](biomejs/biome@edc0ed7) Thanks [@&#8203;ayaangazali](https://github.com/ayaangazali)! - Fixed [#&#8203;10980](biomejs/biome#10980): [`useAriaPropsSupportedByRole`](https://biomejs.dev/linter/rules/use-aria-props-supported-by-role/) no longer reports false positives when the attribute that determines an element's implicit ARIA role is written as a shorthand attribute, such as `<a {href} aria-label="...">` in Astro and Svelte files.

  Shorthand attributes are now taken into account when computing the implicit role, so the anchor above correctly resolves to the `link` role instead of `generic`.

- [#&#8203;10889](biomejs/biome#10889) [`89526e3`](biomejs/biome@89526e3) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatter casing for syntax-owned names while preserving author-defined names, including scoped keyframes and container scroll-state queries.

  ```diff
  - A:HOVER { COLOR: INITIAL; }
  + A:hover { color: initial; }
  - @&#8203;KEYFRAMES :GLOBAL KeepFrames { FROM { COLOR: RED; } }
  + @&#8203;keyframes :GLOBAL KeepFrames { from { color: RED; } }
  - @&#8203;CONTAINER scroll-state((SCROLLED: TOP) AND (STUCK)) { A:HOVER { COLOR: RED; } }
  + @&#8203;container scroll-state((SCROLLED: TOP) AND (STUCK)) { A:hover { color: RED; } }
  ```

- [#&#8203;10964](biomejs/biome#10964) [`794ccd0`](biomejs/biome@794ccd0) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatting for comments between declaration values and `!important`.

  ```diff
  -a { color: /* before */ /* after */ red !important; }
  +a { color: /* before */ red /* after */ !important; }
  ```

- [#&#8203;10993](biomejs/biome#10993) [`b7a9694`](biomejs/biome@b7a9694) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed the CSS formatter to preserve comments on the correct side of selector combinators and before declaration blocks.

  ```diff
  -.before > /* comment */ .after {}
  +.before /* comment */ > .after {}
  ```

  It now also keeps selectors with escaped newlines in attribute values inline when they fit.

  ```diff
  -div
  -  span[foo="bar\
  +div span[foo="bar\
   value"] {}
  ```

- [#&#8203;10978](biomejs/biome#10978) [`8ebafe1`](biomejs/biome@8ebafe1) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10870](biomejs/biome#10870): [`noUnresolvedImports`](https://biomejs.dev/linter/rules/no-unresolved-imports/) no longer reports false positives such as `import type { NextRequest } from "next/server"`.

- [#&#8203;10901](biomejs/biome#10901) [`68c10e6`](biomejs/biome@68c10e6) Thanks [@&#8203;Socialpranker](https://github.com/Socialpranker)! - Fixed [#&#8203;10622](biomejs/biome#10622): the HTML/Vue parser no longer panics on the argument-less `v-bind` shorthand (`:="props"`).

  This syntax is valid Vue and equivalent to `v-bind="props"`, so the parser now accepts it (along with the longhand `v-bind:="props"`) instead of crashing while building a diagnostic for a missing argument.

- [#&#8203;10936](biomejs/biome#10936) [`7df46f5`](biomejs/biome@7df46f5) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Improved generic tuple inference for [`useIncludes`](https://biomejs.dev/linter/rules/use-includes/). The rule now recognizes specialised tuple element types returned through generic aliases.

- [#&#8203;10941](biomejs/biome#10941) [`f787725`](biomejs/biome@f787725) Thanks [@&#8203;siketyan](https://github.com/siketyan)! - Fixed [`#10855`](biomejs/biome#10855): Biome now supports parsing and formatting CSS custom media queries declared with [`@custom-media`](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@&#8203;custom-media).

- [#&#8203;10969](biomejs/biome#10969) [`72d309b`](biomejs/biome@72d309b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed an issue where Biome logs became too verbose, dumping information not relevant to user's operations.

- [`e62f6b6`](biomejs/biome@e62f6b6) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10963](biomejs/biome#10963): Biome no longer panics when a type-aware rule such as [`noFloatingPromises`](https://biomejs.dev/linter/rules/no-floating-promises/) checks a call to a function with multiple call signatures imported from another module.

- [#&#8203;10931](biomejs/biome#10931) [`899c60d`](biomejs/biome@899c60d) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed `check --write` command. Now the command reports code frame of the formatted code, if the formatter is enabled.

- [#&#8203;10904](biomejs/biome#10904) [`ceee4f4`](biomejs/biome@ceee4f4) Thanks [@&#8203;qzwxsaedc](https://github.com/qzwxsaedc)! - Fixed [#&#8203;10892](biomejs/biome#10892): [`noUnnecessaryConditions`](https://biomejs.dev/linter/rules/no-unnecessary-conditions/) no longer reports a false positive when checking a member of a discriminated union that is accessed through a default type-only namespace import. The following code is no longer flagged:

  ```ts
  import type Types from "./types";

  declare function parse(): Types.Result<string>;
  const result = parse();
  if (!result.success) {
  }
  ```

- [#&#8203;10962](biomejs/biome#10962) [`f0a67f2`](biomejs/biome@f0a67f2) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Biome no longer removes embedded styles and scripts in HTML files.

- [#&#8203;11000](biomejs/biome#11000) [`5039a1e`](biomejs/biome@5039a1e) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed a bug where closing one editor stopped a shared Biome daemon used by other editors. LSP proxy processes now exit when either the editor or daemon disconnects.

- [#&#8203;10957](biomejs/biome#10957) [`cf263c4`](biomejs/biome@cf263c4) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved the performance of the [`noThenProperty`](https://biomejs.dev/linter/rules/no-then-property/) lint rule by about 50%.

- [#&#8203;10992](biomejs/biome#10992) [`4bf9b21`](biomejs/biome@4bf9b21) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/): The rule now reports Promise-returning callbacks where a synchronous callback is expected when calls use tuple spreads or tuple rest parameters, including generic and deeply nested tuples, and when constructor signatures come from interface or object types. Recursive or excessively nested tuple spreads use a conservative fallback so analysis terminates.

  For example, the following callback is now reported.

  ```ts
  declare function consume(...args: [number, () => void]): void;
  const prefix: [number] = [1];

  consume(...prefix, async () => {});
  ```

- [#&#8203;10915](biomejs/biome#10915) [`b3b12b3`](biomejs/biome@b3b12b3) Thanks [@&#8203;Functionhx](https://github.com/Functionhx)! - Added the rule [`noNegationInEqualityCheck`](https://biomejs.dev/linter/rules/no-negation-in-equality-check/). The rule flags negated expressions on the left side of strict equality checks like `!foo === bar` — due to operator precedence this evaluates as `(!foo) === bar` which is almost always a mistake for `foo !== bar`.

  The rule provides an unsafe fix that flips the operator.

  ```js
  // Invalid
  !foo === bar;
  !foo !== bar;

  // Valid
  foo !== bar;
  foo === bar;
  ```

- [#&#8203;10970](biomejs/biome#10970) [`bd1038b`](biomejs/biome@bd1038b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Improved overload selection for [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/). Biome now handles overloaded calls, overloaded constructors, rest parameters, union arguments, and generic constraints without selecting an incompatible signature. For example, `noMisusedPromises` now reports the async callback passed to the synchronous overload:

  ```ts
  declare function consume(kind: "async", callback: () => Promise<void>): void;
  declare function consume(kind: "sync", callback: () => void): void;
  consume("sync", async () => {});
  ```

- [#&#8203;10933](biomejs/biome#10933) [`48a4abb`](biomejs/biome@48a4abb) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [`useArrayFind`](https://biomejs.dev/linter/rules/use-array-find/) to recognize bigint zero indexes.

- [#&#8203;10931](biomejs/biome#10931) [`899c60d`](biomejs/biome@899c60d) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed an orchestration issue that could lead to deadlocks when type-aware rules are enabled.

- [#&#8203;10969](biomejs/biome#10969) [`72d309b`](biomejs/biome@72d309b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Hardened the Biome Language Server by improving its synchronisation logic.

- [#&#8203;10972](biomejs/biome#10972) [`ab8c21b`](biomejs/biome@ab8c21b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed false positives in [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/) and [`useAwaitThenable`](https://biomejs.dev/linter/rules/use-await-thenable/) when Promise or thenable inference cannot complete. These rules now suppress diagnostics instead of treating incomplete type information as a definite result. For example, `useAwaitThenable` no longer reports `await value` when the value's thenability is unknown:

  ```ts
  declare const value: unknown;

  async function consume() {
    await value;
  }
  ```

</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](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNzIuNCIsInVwZGF0ZWRJblZlciI6IjQzLjI3Mi40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Reviewed-on: https://git.oirnoir.dev/OIRNOIR/YouTube-Helper-Client/pulls/14
OIRNOIR pushed a commit to OIRNOIR/YouTube-Helper-Server that referenced this pull request Jul 28, 2026
This PR contains the following updates:

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

---

### Release Notes

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

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

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

##### Patch Changes

- [#&#8203;10972](biomejs/biome#10972) [`ab8c21b`](biomejs/biome@ab8c21b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [`useExhaustiveSwitchCases`](https://biomejs.dev/linter/rules/use-exhaustive-switch-cases/) for unions of bigint literals. The rule now reports missing bigint cases and compares bigint literals by value, including binary, octal, hexadecimal, and separator-containing spellings. For example, this switch now reports the missing `2n` case:

  ```ts
  declare const value: 1n | 2n;
  switch (value) {
    case 1n:
      break;
  }
  ```

- [#&#8203;10972](biomejs/biome#10972) [`ab8c21b`](biomejs/biome@ab8c21b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed false positives in [`noBaseToString`](https://biomejs.dev/linter/rules/no-base-to-string/) and [`useNullishCoalescing`](https://biomejs.dev/linter/rules/use-nullish-coalescing/) when member, stringification, or nullish inference cannot complete. These rules now suppress diagnostics instead of reporting from partial type information. For example, neither expression is reported when a recursive type cannot be fully resolved:

  ```ts
  type Recursive = Recursive;
  declare const value: Recursive;

  String(value);
  value || "fallback";
  ```

- [#&#8203;10977](biomejs/biome#10977) [`0bf7486`](biomejs/biome@0bf7486) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10922](biomejs/biome#10922): the action [`useSortedAttributes`](https://biomejs.dev/assist/actions/use-sorted-attributes/) no longer triggers for HTML instructions.

- [#&#8203;10957](biomejs/biome#10957) [`cf263c4`](biomejs/biome@cf263c4) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [`noThenProperty`](https://biomejs.dev/linter/rules/no-then-property/) failing to detect `Object.fromEntries`, `Object.defineProperty`, and `Reflect.defineProperty` calls with comments between their tokens.

- [#&#8203;10983](biomejs/biome#10983) [`edc0ed7`](biomejs/biome@edc0ed7) Thanks [@&#8203;ayaangazali](https://github.com/ayaangazali)! - Fixed [#&#8203;10980](biomejs/biome#10980): [`useAriaPropsSupportedByRole`](https://biomejs.dev/linter/rules/use-aria-props-supported-by-role/) no longer reports false positives when the attribute that determines an element's implicit ARIA role is written as a shorthand attribute, such as `<a {href} aria-label="...">` in Astro and Svelte files.

  Shorthand attributes are now taken into account when computing the implicit role, so the anchor above correctly resolves to the `link` role instead of `generic`.

- [#&#8203;10889](biomejs/biome#10889) [`89526e3`](biomejs/biome@89526e3) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatter casing for syntax-owned names while preserving author-defined names, including scoped keyframes and container scroll-state queries.

  ```diff
  - A:HOVER { COLOR: INITIAL; }
  + A:hover { color: initial; }
  - @&#8203;KEYFRAMES :GLOBAL KeepFrames { FROM { COLOR: RED; } }
  + @&#8203;keyframes :GLOBAL KeepFrames { from { color: RED; } }
  - @&#8203;CONTAINER scroll-state((SCROLLED: TOP) AND (STUCK)) { A:HOVER { COLOR: RED; } }
  + @&#8203;container scroll-state((SCROLLED: TOP) AND (STUCK)) { A:hover { color: RED; } }
  ```

- [#&#8203;10964](biomejs/biome#10964) [`794ccd0`](biomejs/biome@794ccd0) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed CSS formatting for comments between declaration values and `!important`.

  ```diff
  -a { color: /* before */ /* after */ red !important; }
  +a { color: /* before */ red /* after */ !important; }
  ```

- [#&#8203;10993](biomejs/biome#10993) [`b7a9694`](biomejs/biome@b7a9694) Thanks [@&#8203;denbezrukov](https://github.com/denbezrukov)! - Fixed the CSS formatter to preserve comments on the correct side of selector combinators and before declaration blocks.

  ```diff
  -.before > /* comment */ .after {}
  +.before /* comment */ > .after {}
  ```

  It now also keeps selectors with escaped newlines in attribute values inline when they fit.

  ```diff
  -div
  -  span[foo="bar\
  +div span[foo="bar\
   value"] {}
  ```

- [#&#8203;10978](biomejs/biome#10978) [`8ebafe1`](biomejs/biome@8ebafe1) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10870](biomejs/biome#10870): [`noUnresolvedImports`](https://biomejs.dev/linter/rules/no-unresolved-imports/) no longer reports false positives such as `import type { NextRequest } from "next/server"`.

- [#&#8203;10901](biomejs/biome#10901) [`68c10e6`](biomejs/biome@68c10e6) Thanks [@&#8203;Socialpranker](https://github.com/Socialpranker)! - Fixed [#&#8203;10622](biomejs/biome#10622): the HTML/Vue parser no longer panics on the argument-less `v-bind` shorthand (`:="props"`).

  This syntax is valid Vue and equivalent to `v-bind="props"`, so the parser now accepts it (along with the longhand `v-bind:="props"`) instead of crashing while building a diagnostic for a missing argument.

- [#&#8203;10936](biomejs/biome#10936) [`7df46f5`](biomejs/biome@7df46f5) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Improved generic tuple inference for [`useIncludes`](https://biomejs.dev/linter/rules/use-includes/). The rule now recognizes specialised tuple element types returned through generic aliases.

- [#&#8203;10941](biomejs/biome#10941) [`f787725`](biomejs/biome@f787725) Thanks [@&#8203;siketyan](https://github.com/siketyan)! - Fixed [`#10855`](biomejs/biome#10855): Biome now supports parsing and formatting CSS custom media queries declared with [`@custom-media`](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@&#8203;custom-media).

- [#&#8203;10969](biomejs/biome#10969) [`72d309b`](biomejs/biome@72d309b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed an issue where Biome logs became too verbose, dumping information not relevant to user's operations.

- [`e62f6b6`](biomejs/biome@e62f6b6) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10963](biomejs/biome#10963): Biome no longer panics when a type-aware rule such as [`noFloatingPromises`](https://biomejs.dev/linter/rules/no-floating-promises/) checks a call to a function with multiple call signatures imported from another module.

- [#&#8203;10931](biomejs/biome#10931) [`899c60d`](biomejs/biome@899c60d) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed `check --write` command. Now the command reports code frame of the formatted code, if the formatter is enabled.

- [#&#8203;10904](biomejs/biome#10904) [`ceee4f4`](biomejs/biome@ceee4f4) Thanks [@&#8203;qzwxsaedc](https://github.com/qzwxsaedc)! - Fixed [#&#8203;10892](biomejs/biome#10892): [`noUnnecessaryConditions`](https://biomejs.dev/linter/rules/no-unnecessary-conditions/) no longer reports a false positive when checking a member of a discriminated union that is accessed through a default type-only namespace import. The following code is no longer flagged:

  ```ts
  import type Types from "./types";

  declare function parse(): Types.Result<string>;
  const result = parse();
  if (!result.success) {
  }
  ```

- [#&#8203;10962](biomejs/biome#10962) [`f0a67f2`](biomejs/biome@f0a67f2) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Biome no longer removes embedded styles and scripts in HTML files.

- [#&#8203;11000](biomejs/biome#11000) [`5039a1e`](biomejs/biome@5039a1e) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed a bug where closing one editor stopped a shared Biome daemon used by other editors. LSP proxy processes now exit when either the editor or daemon disconnects.

- [#&#8203;10957](biomejs/biome#10957) [`cf263c4`](biomejs/biome@cf263c4) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Improved the performance of the [`noThenProperty`](https://biomejs.dev/linter/rules/no-then-property/) lint rule by about 50%.

- [#&#8203;10992](biomejs/biome#10992) [`4bf9b21`](biomejs/biome@4bf9b21) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/): The rule now reports Promise-returning callbacks where a synchronous callback is expected when calls use tuple spreads or tuple rest parameters, including generic and deeply nested tuples, and when constructor signatures come from interface or object types. Recursive or excessively nested tuple spreads use a conservative fallback so analysis terminates.

  For example, the following callback is now reported.

  ```ts
  declare function consume(...args: [number, () => void]): void;
  const prefix: [number] = [1];

  consume(...prefix, async () => {});
  ```

- [#&#8203;10915](biomejs/biome#10915) [`b3b12b3`](biomejs/biome@b3b12b3) Thanks [@&#8203;Functionhx](https://github.com/Functionhx)! - Added the rule [`noNegationInEqualityCheck`](https://biomejs.dev/linter/rules/no-negation-in-equality-check/). The rule flags negated expressions on the left side of strict equality checks like `!foo === bar` — due to operator precedence this evaluates as `(!foo) === bar` which is almost always a mistake for `foo !== bar`.

  The rule provides an unsafe fix that flips the operator.

  ```js
  // Invalid
  !foo === bar;
  !foo !== bar;

  // Valid
  foo !== bar;
  foo === bar;
  ```

- [#&#8203;10970](biomejs/biome#10970) [`bd1038b`](biomejs/biome@bd1038b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Improved overload selection for [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/). Biome now handles overloaded calls, overloaded constructors, rest parameters, union arguments, and generic constraints without selecting an incompatible signature. For example, `noMisusedPromises` now reports the async callback passed to the synchronous overload:

  ```ts
  declare function consume(kind: "async", callback: () => Promise<void>): void;
  declare function consume(kind: "sync", callback: () => void): void;
  consume("sync", async () => {});
  ```

- [#&#8203;10933](biomejs/biome#10933) [`48a4abb`](biomejs/biome@48a4abb) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [`useArrayFind`](https://biomejs.dev/linter/rules/use-array-find/) to recognize bigint zero indexes.

- [#&#8203;10931](biomejs/biome#10931) [`899c60d`](biomejs/biome@899c60d) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed an orchestration issue that could lead to deadlocks when type-aware rules are enabled.

- [#&#8203;10969](biomejs/biome#10969) [`72d309b`](biomejs/biome@72d309b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Hardened the Biome Language Server by improving its synchronisation logic.

- [#&#8203;10972](biomejs/biome#10972) [`ab8c21b`](biomejs/biome@ab8c21b) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed false positives in [`noMisusedPromises`](https://biomejs.dev/linter/rules/no-misused-promises/) and [`useAwaitThenable`](https://biomejs.dev/linter/rules/use-await-thenable/) when Promise or thenable inference cannot complete. These rules now suppress diagnostics instead of treating incomplete type information as a definite result. For example, `useAwaitThenable` no longer reports `await value` when the value's thenability is unknown:

  ```ts
  declare const value: unknown;

  async function consume() {
    await value;
  }
  ```

</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](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNzIuNCIsInVwZGF0ZWRJblZlciI6IjQzLjI3Mi40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

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

Labels

A-Formatter Area: formatter L-CSS Language: CSS and super languages

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants