Skip to content

fix(html_analyze): account for shorthand attributes when computing implicit ARIA roles - #10983

Merged
Netail merged 2 commits into
biomejs:mainfrom
ayaangazali:fix/use-aria-props-supported-by-role-shorthand
Jul 20, 2026
Merged

fix(html_analyze): account for shorthand attributes when computing implicit ARIA roles#10983
Netail merged 2 commits into
biomejs:mainfrom
ayaangazali:fix/use-aria-props-supported-by-role-shorthand

Conversation

@ayaangazali

Copy link
Copy Markdown
Contributor

Summary

Fixes #10980. useAriaPropsSupportedByRole flagged aria-label on <a {href} ...> in Astro files, and the same thing happens in Svelte. The ARIA helpers never saw shorthand attributes: the biome_aria::Element impl for AnyHtmlTagElement filters the attribute list down to plain attributes and Vue bindings, so get_implicit_role thought the anchor had no href, resolved it to generic, and generic prohibits aria-label.

Shorthand attributes now pass through that filter and expose their expression text as the attribute name (with no static value, since the value is dynamic at runtime), so <a {href}> correctly resolves to the link role.

Test Plan

Added <a {href} aria-label="label"></a> to the astro and svelte valid fixtures for the rule. Both produced the false positive before the change and are clean after. Full cargo test --workspace --features=js_plugin and cargo lint pass locally, and no other snapshots changed, so the wider ARIA consumers (implicit roles are also used by noRedundantRoles, interactivity checks, etc.) keep their current behavior except now seeing shorthand attributes as present.

Docs

N/A


Honesty note: I used Claude Code to help trace where the attribute filtering happens and to double check the blast radius of the change. The final diff is small but I read through element_ext.rs and the aria trait impls myself to make sure I actually understood it. I'm a college freshman still getting comfortable with Rust, so if widening that filter has side effects I missed, I'd genuinely love to learn about them :)

Copilot AI review requested due to automatic review settings July 18, 2026 10:50

This comment was marked as spam.

@changeset-bot

changeset-bot Bot commented Jul 18, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: b08e2a7

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

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-Linter Area: linter A-Parser Area: parser L-HTML Language: HTML and super languages labels Jul 18, 2026
@coderabbitai

coderabbitai Bot commented Jul 18, 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

Run ID: e7f381e9-bd38-4324-bae3-a009bc526a7d

📥 Commits

Reviewing files that changed from the base of the PR and between edf4766 and b08e2a7.

⛔ Files ignored due to path filters (5)
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsForRole/astro/valid.astro.snap is excluded by !**/*.snap and included by **
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsForRole/svelte/valid.svelte.snap is excluded by !**/*.snap and included by **
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsForRole/vue/valid.vue.snap is excluded by !**/*.snap and included by **
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsSupportedByRole/astro/valid.astro.snap is excluded by !**/*.snap and included by **
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsSupportedByRole/svelte/valid.svelte.snap is excluded by !**/*.snap and included by **
📒 Files selected for processing (8)
  • .changeset/fix-aria-role-shorthand-attributes.md
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsForRole/astro/valid.astro
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsForRole/svelte/valid.svelte
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsForRole/vue/valid.vue
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsSupportedByRole/astro/valid.astro
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsSupportedByRole/svelte/valid.svelte
  • crates/biome_html_syntax/src/attribute_ext.rs
  • crates/biome_html_syntax/src/element_ext.rs
🚧 Files skipped from review as they are similar to previous changes (6)
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsForRole/astro/valid.astro
  • crates/biome_html_syntax/src/attribute_ext.rs
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsSupportedByRole/svelte/valid.svelte
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsForRole/vue/valid.vue
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsForRole/svelte/valid.svelte
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsSupportedByRole/astro/valid.astro

Walkthrough

The HTML ARIA attribute stream now includes shorthand attributes and extracts their names from HTML literal tokens, allowing shorthand href attributes to participate in implicit role resolution. Astro, Svelte, and Vue fixtures cover dynamic role bindings, while Astro and Svelte fixtures cover valid shorthand anchors. A patch changeset documents the correction.

Possibly related PRs

Suggested reviewers: ematipico

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarises the shorthand-attribute fix for implicit ARIA role computation.
Description check ✅ Passed The description matches the change and explains the Astro/Svelte false-positive fix.
Linked Issues check ✅ Passed The code and tests address the Astro dynamic-href false positive and the shorthand-attribute role handling it depends on.
Out of Scope Changes check ✅ Passed The extra test coverage stays on the same shorthand-attribute ARIA path and does not introduce unrelated behaviour.
✨ 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.

@ayaangazali
ayaangazali force-pushed the fix/use-aria-props-supported-by-role-shorthand branch from 9c1df90 to 006e176 Compare July 18, 2026 11:30

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

Actionable comments posted: 1

🤖 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.

Inline comments:
In @.changeset/fix-aria-role-shorthand-attributes.md:
- Around line 5-7: Add the appropriate assist link to the changeset description
alongside the existing issue and rule links, using the standard assist-link
format and keeping the description otherwise unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: fe02af6a-5ea8-4aaa-a993-79e2a04e17bb

📥 Commits

Reviewing files that changed from the base of the PR and between 9c1df90 and 006e176.

⛔ Files ignored due to path filters (2)
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsSupportedByRole/astro/valid.astro.snap is excluded by !**/*.snap and included by **
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsSupportedByRole/svelte/valid.svelte.snap is excluded by !**/*.snap and included by **
📒 Files selected for processing (5)
  • .changeset/fix-aria-role-shorthand-attributes.md
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsSupportedByRole/astro/valid.astro
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsSupportedByRole/svelte/valid.svelte
  • crates/biome_html_syntax/src/attribute_ext.rs
  • crates/biome_html_syntax/src/element_ext.rs
🚧 Files skipped from review as they are similar to previous changes (3)
  • crates/biome_html_analyze/tests/specs/a11y/useAriaPropsSupportedByRole/astro/valid.astro
  • crates/biome_html_syntax/src/element_ext.rs
  • crates/biome_html_syntax/src/attribute_ext.rs

Comment on lines +5 to +7
Fixed [#10980](https://github.com/biomejs/biome/issues/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`.

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.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add the required assist link.

This description includes the issue and rule links, but not an assist link. Please add the relevant assist link, or confirm that this change is exempt.

As per coding guidelines, changeset descriptions must include issue links, rule links, and assist links.

🧰 Tools
🪛 LanguageTool

[style] ~7-~7: ‘taken into account’ might be wordy. Consider a shorter alternative.
Context: ...te files. Shorthand attributes are now taken into account when computing the implicit role, so th...

(EN_WORDINESS_PREMIUM_TAKEN_INTO_ACCOUNT)

🤖 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 @.changeset/fix-aria-role-shorthand-attributes.md around lines 5 - 7, Add the
appropriate assist link to the changeset description alongside the existing
issue and rule links, using the standard assist-link format and keeping the
description otherwise unchanged.

Source: Coding guidelines

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.

This one doesn't touch an assist, only the useAriaPropsSupportedByRole lint rule, so I believe the assist link requirement doesn't apply here. The changeset already has the issue link and the rule link.

@codspeed-hq

codspeed-hq Bot commented Jul 18, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 67 untouched benchmarks
⏩ 206 skipped benchmarks1


Comparing ayaangazali:fix/use-aria-props-supported-by-role-shorthand (b08e2a7) with main (aabafd9)2

Open in CodSpeed

Footnotes

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

  2. No successful run was found on main (546e5ba) during the generation of this report, so aabafd9 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

@ayaangazali
ayaangazali force-pushed the fix/use-aria-props-supported-by-role-shorthand branch from edf4766 to 1ef9fe2 Compare July 20, 2026 15:21
ayaangazali and others added 2 commits July 20, 2026 08:22
…plicit ARIA roles

Shorthand attributes like `{href}` in Astro and Svelte files were
filtered out of the attribute iterator used by the ARIA helpers, so
`<a {href}>` resolved to the generic role instead of link, and
useAriaPropsSupportedByRole flagged global-ish attributes like
aria-label that generic prohibits.

Fixes biomejs#10980
@ayaangazali
ayaangazali force-pushed the fix/use-aria-props-supported-by-role-shorthand branch from 1ef9fe2 to b08e2a7 Compare July 20, 2026 15:22
@ayaangazali

Copy link
Copy Markdown
Contributor Author

Rebased onto current main to clear the autofix job failure. It wasn't related to this diff: the bot's cherry-pick of its .cargo/audit.toml tweak conflicted with that file being added/removed on main over the last couple days.

Also owning a mistake: my first rebase push briefly dropped @Netail's "fix: correct placement" commit because my local branch was stale. Noticed right away and restored it, the branch now has both commits on top of latest main and the rule tests pass locally. Sorry for the noise, and thanks for the fixture additions.

@Netail
Netail merged commit edc0ed7 into biomejs:main Jul 20, 2026
30 checks passed
@github-actions github-actions Bot mentioned this pull request Jul 20, 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-Linter Area: linter A-Parser Area: parser agentscan:automated-account L-HTML Language: HTML and super languages

Projects

None yet

Development

Successfully merging this pull request may close these issues.

💅 Astro: useAriaPropsSupportedByRole false positive

4 participants