Skip to content

fix(useVueValidVOn): allow verb-modifier-only handlers and object syntax#10773

Merged
dyc3 merged 6 commits into
biomejs:mainfrom
otkrickey:fix/use-vue-valid-v-on-allow-verb-modifier-only
Jul 1, 2026
Merged

fix(useVueValidVOn): allow verb-modifier-only handlers and object syntax#10773
dyc3 merged 6 commits into
biomejs:mainfrom
otkrickey:fix/use-vue-valid-v-on-allow-verb-modifier-only

Conversation

@otkrickey

Copy link
Copy Markdown
Contributor

Summary

useVueValidVOn was reporting a missing handler for v-on directives that
use one of the verb modifiers (.stop / .prevent) without an
expression. Forms like <div @click.stop></div> and
<form @submit.prevent></form> are valid Vue syntax — the modifier
carries an intrinsic side effect (event.stopPropagation() /
event.preventDefault()) and the directive needs no handler. The fix
mirrors eslint-plugin-vue's VERB_MODIFIERS set used by the upstream
valid-v-on rule.

A second commit fixes a related false positive where
<div v-on="$listeners"></div> and other arg-less v-on with an object
value were reported as missing an event name. An arg-less v-on with a
value is the Vue object syntax (parallel to <div v-bind="object"></div>,
fixed for v-bind in #9643).

While here, find_invalid_modifiers was switched to text_trimmed() so
the modifier-name lookup keeps working when the modifier is followed by
whitespace (<Foo @click.stop />). Same shape as the latent bug fixed
on the v-bind side in #10767. no_vue_v_on_number_values already uses
text_trimmed().

Vue docs for the relevant syntax:

fixes #10772

AI assistance disclosure

Implemented with Claude Code under my direction and review.

Test Plan

snapshots — invalid.vue drops the obsolete arg-less-with-value case;
valid.vue gains verb-modifier-only handlers (tag-closing and
self-closing components, longform/shorthand, verb+non-verb combos), the
arg-less v-on="..." object syntax, and a verb-modifier inside a
v-for.

`useVueValidVOn` was reporting a missing handler for v-on directives
that use a verb modifier (`.stop` or `.prevent`) without an expression.
Forms like `<div @click.stop></div>` and `<form @submit.prevent></form>`
are valid Vue syntax — the modifier carries an intrinsic side effect
(`event.stopPropagation()` / `event.preventDefault()`), and the
directive needs no handler.

Mirror `eslint-plugin-vue`'s `valid-v-on`, which exempts the same
`VERB_MODIFIERS` set (`stop`, `prevent`) from the missing-handler check
while continuing to require a handler for every other modifier
(`.capture`, `.once`, `.passive`, key aliases, etc.).

While here, switch `find_invalid_modifiers` to `text_trimmed()` so the
modifier-name lookup keeps working when the modifier is followed by
whitespace (e.g. `<Foo @click.stop />`). Matches
`no_vue_v_on_number_values`, which already uses `text_trimmed()`.
`useVueValidVOn` was reporting `<div v-on="$listeners"></div>` and
`<div v-on="{ click: onClick }"></div>` as having a missing event name.
An arg-less `v-on` with a value is the Vue object syntax: the value is
spread as event listeners onto the element, mirroring `v-bind="object"`.
`eslint-plugin-vue`'s `valid-v-on` accepts the same forms.

Only flag `MissingEventName` when both the argument and the value are
absent (`<div v-on></div>`). Move the `<div v-on="foo"></div>` case from
`invalid.vue` to `valid.vue` to lock the new behavior in.

The shape of this fix matches dyc3's prior fix for the v-bind variant
(biomejs#9643).
…arser limitation

The literal object form (`v-on="{ click: onClick }"`) is a Vue object
syntax case that hits a biome parser limitation where the inline object
literal is mis-parsed as a statement. Replace with a plain identifier
(`v-on="listeners"`) so the rule check is exercised without tripping
the parser. The semantically interesting cases (`$listeners` and a
plain identifier) are both covered.
Mirror the link convention dyc3 suggested on PR biomejs#10767: point the
docstring at the official Vue docs for event modifiers (the section
that documents the verb-modifier-only form) and v-on (the section that
documents the arg-less object syntax). Add the same event-modifiers
link as a doc comment on `has_verb_modifier`.
@changeset-bot

changeset-bot Bot commented Jun 27, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 023abe4

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

✅ 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-Linter Area: linter L-HTML Language: HTML and super languages labels Jun 27, 2026
@coderabbitai

coderabbitai Bot commented Jun 27, 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: 07fa1a2b-2d00-4fd2-85bd-585c273e18a7

📥 Commits

Reviewing files that changed from the base of the PR and between c034ac5 and 023abe4.

📒 Files selected for processing (1)
  • .changeset/fix-use-vue-valid-v-on-verb-modifier-only.md
✅ Files skipped from review due to trivial changes (1)
  • .changeset/fix-use-vue-valid-v-on-verb-modifier-only.md

Walkthrough

useVueValidVOn now treats v-on object syntax with a value as valid, and it no longer reports missing handlers when a verb modifier such as .stop or .prevent is present without an expression. The rule also trims modifier text before invalid-modifier checks. The Vue fixture tests were expanded for object syntax, verb-modifier-only cases, self-closing components, and one invalid long-form v-on case. The changeset note was updated to describe the same behaviour.

Possibly related PRs

  • biomejs/biome#10736: Also touches use_vue_valid_v_on.rs, with overlapping changes in the same rule’s v-on detection and validation logic.

Suggested labels

A-Diagnostic, D-Vue

Suggested reviewers

  • ematipico
🚥 Pre-merge checks | ✅ 3 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning It also includes object-syntax and whitespace-trim fixes, which go beyond the single linked verb-modifier issue. If those extras are intentional, link their issues; otherwise split them into a separate PR to keep scope tight.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarises the main fix for useVueValidVOn and mentions both verb modifiers and object syntax.
Description check ✅ Passed The description is directly about the same useVueValidVOn fixes and test updates.
Linked Issues check ✅ Passed The changes stop false positives for verb-modifier-only v-on handlers, matching 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.

Actionable comments posted: 2

🤖 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-use-vue-valid-v-on-verb-modifier-only.md:
- Around line 5-7: Shorten the changeset entry to 1–3 sentences by removing
extra detail and keeping only the core fix summary. In the changeset content,
keep the main `useVueValidVOn` behavior change and the related
`v-on="$listeners"` false positive in a compact form, without examples or
explanatory asides. Make sure the final text remains concise and reads like a
standard Biome changeset entry.

In `@crates/biome_html_analyze/src/lint/correctness/use_vue_valid_v_on.rs`:
- Around line 78-95: The arg-less `v-on` object-syntax path in
`use_vue_valid_v_on` is incorrectly allowing modifiers like `stop` and `prevent`
to pass when a handler/value is present, so `v-on.stop="listeners"` is not being
reported. Update the directive validation logic to reject modifiers whenever
`vue_directive.arg()` is missing and the syntax is being treated as object
syntax, making sure this case is handled before or within the
`find_invalid_modifiers`/missing-handler flow. Add an invalid test fixture
covering an arg-less object-syntax example with a disallowed modifier such as
`stop` or `prevent`.
🪄 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: d67301ca-4a8c-40fb-9c49-5c9450d4a8fc

📥 Commits

Reviewing files that changed from the base of the PR and between 36d5aa7 and c034ac5.

⛔ Files ignored due to path filters (2)
  • crates/biome_html_analyze/tests/specs/correctness/useVueValidVOn/invalid.vue.snap is excluded by !**/*.snap and included by **
  • crates/biome_html_analyze/tests/specs/correctness/useVueValidVOn/valid.vue.snap is excluded by !**/*.snap and included by **
📒 Files selected for processing (4)
  • .changeset/fix-use-vue-valid-v-on-verb-modifier-only.md
  • crates/biome_html_analyze/src/lint/correctness/use_vue_valid_v_on.rs
  • crates/biome_html_analyze/tests/specs/correctness/useVueValidVOn/invalid.vue
  • crates/biome_html_analyze/tests/specs/correctness/useVueValidVOn/valid.vue

Comment thread .changeset/fix-use-vue-valid-v-on-verb-modifier-only.md Outdated
Comment on lines +78 to +95
// Check for missing event name. An arg-less `v-on` is the
// object syntax (`v-on="$listeners"`); only flag when there
// is also no value to spread.
if vue_directive.arg().is_none() && vue_directive.initializer().is_none() {
return Some(ViolationKind::MissingEventName);
}

let modifiers = vue_directive.modifiers();

// Check for invalid modifiers
if let Some(invalid_range) =
find_invalid_modifiers(&vue_directive.modifiers(), options.modifiers.as_ref())
find_invalid_modifiers(&modifiers, options.modifiers.as_ref())
{
return Some(ViolationKind::InvalidModifier(invalid_range));
}

// Check for missing handler
if vue_directive.initializer().is_none() {
if vue_directive.initializer().is_none() && !has_verb_modifier(&modifiers) {

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.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Inspect the rule implementation and nearby tests
ast-grep outline crates/biome_html_analyze/src/lint/correctness/use_vue_valid_v_on.rs --view expanded

printf '\n--- relevant matches ---\n'
rg -n "MissingEventName|InvalidModifier|has_verb_modifier|stop|prevent|v-on" crates/biome_html_analyze/src/lint/correctness/use_vue_valid_v_on.rs crates/biome_html_analyze/src -g '*.rs'

printf '\n--- test fixtures mentioning v-on ---\n'
rg -n "v-on|vue_valid_v_on|use_vue_valid_v_on" crates/biome_html_analyze -g '*.*'

Repository: biomejs/biome

Length of output: 50369


🌐 Web query:

Vue v-on object syntax modifiers supported arg-less directive docs

💡 Result:

The Vue v-on directive, when used with the object syntax (e.g., v-on="{ click: handler }"), does not support event modifiers [1]. In Vue, modifiers (such as.stop,.prevent, or.capture) are directive postfixes meant for use with standard event binding syntax (e.g., @click.stop="handler") [1][2]. Because the object syntax expects an object of event names as keys and handler functions as values, modifiers cannot be applied to these keys [1][3]. Attempting to use a key like "keyup.enter" within the object will merely register a listener for an event literally named "keyup.enter" rather than applying the "enter" key modifier to the "keyup" event [3]. If you require modifiers while using dynamic or object-based event binding, common workarounds include: 1. Manual Handling: Register the base event and manually perform checks (e.g., checking event.key for "Enter") within your handler function [3]. 2. Using withModifiers: For more advanced scenarios, Vue exposes a helper function called withModifiers (found in @vue/runtime-dom) which can be used to manually wrap handlers with specific modifiers [4]. 3. Structural Alternatives: If possible, refactor your template to use individual v-on bindings, which fully support modifiers, instead of relying on the object syntax [1][2]. The object syntax for v-on was originally introduced specifically to support event proxying and programmatic binding, and its exclusion of modifier support is a documented limitation [1][5].

Citations:


Reject modifiers on arg-less object syntax. v-on.stop="listeners" should still be reported; the object-syntax path now skips it because the missing-handler check is bypassed and find_invalid_modifiers still accepts stop/prevent. Add an invalid fixture for one of these cases.

🤖 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_html_analyze/src/lint/correctness/use_vue_valid_v_on.rs` around
lines 78 - 95, The arg-less `v-on` object-syntax path in `use_vue_valid_v_on` is
incorrectly allowing modifiers like `stop` and `prevent` to pass when a
handler/value is present, so `v-on.stop="listeners"` is not being reported.
Update the directive validation logic to reject modifiers whenever
`vue_directive.arg()` is missing and the syntax is being treated as object
syntax, making sure this case is handled before or within the
`find_invalid_modifiers`/missing-handler flow. Add an invalid test fixture
covering an arg-less object-syntax example with a disallowed modifier such as
`stop` or `prevent`.

@codspeed-hq

codspeed-hq Bot commented Jun 27, 2026

Copy link
Copy Markdown

Merging this PR will degrade performance by 7.5%

❌ 1 regressed benchmark
✅ 66 untouched benchmarks
⏩ 189 skipped benchmarks1

Warning

Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Benchmark BASE HEAD Efficiency
synthetic/long-attribute-values.html[cached] 301.7 µs 326.1 µs -7.5%

Tip

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


Comparing otkrickey:fix/use-vue-valid-v-on-allow-verb-modifier-only (023abe4) with main (36d5aa7)

Open in CodSpeed

Footnotes

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

Per CodeRabbit review on PR biomejs#10773 and the CONTRIBUTING guidance that
changesets be "concise" and "usually between 1 and 3 sentences long",
collapse the entry to a single paragraph: the verb-modifier-only fix
with a single example, and the arg-less object-syntax fix.
@dyc3
dyc3 merged commit 3c6513d into biomejs:main Jul 1, 2026
31 of 32 checks passed
@github-actions github-actions Bot mentioned this pull request Jul 1, 2026
OIRNOIR pushed a commit to OIRNOIR/YouTube-Helper-Client that referenced this pull request Jul 15, 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.2` -> `2.5.3`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.5.2/2.5.3) | `2.5.4` |

---

### Release Notes

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

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

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

##### Patch Changes

- [#&#8203;10815](biomejs/biome#10815) [`86613d5`](biomejs/biome@86613d5) Thanks [@&#8203;WaterWhisperer](https://github.com/WaterWhisperer)! - Fixed a parser panic reported in [#&#8203;10708](biomejs/biome#10708): Biome now recovers when unsupported CSS Modules `@value` rules or scoped `@keyframes` names end at EOF.

- [#&#8203;10534](biomejs/biome#10534) [`da9b403`](biomejs/biome@da9b403) Thanks [@&#8203;Mokto](https://github.com/Mokto)! - Fixed [`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/) false positives in Svelte files: Svelte store subscriptions (`$store` references in templates now keep the underlying `store` binding from being flagged), and `$bindable()` props that are only written to in the script block (write-only is intentional for bindable props) are no longer reported as unused.

- [#&#8203;10827](biomejs/biome#10827) [`098ba41`](biomejs/biome@098ba41) Thanks [@&#8203;Aqu1bp](https://github.com/Aqu1bp)! - Fixed [#&#8203;10698](biomejs/biome#10698): The [`noUnsafeOptionalChaining`](https://biomejs.dev/linter/rules/no-unsafe-optional-chaining/) rule now reports unsafe optional chains wrapped in TypeScript `as`, `satisfies`, type assertion, and instantiation expressions, such as `new (value?.constructor as Constructor)()`.

- [#&#8203;10773](biomejs/biome#10773) [`3c6513d`](biomejs/biome@3c6513d) Thanks [@&#8203;otkrickey](https://github.com/otkrickey)! - Fixed [#&#8203;10772](biomejs/biome#10772): [`useVueValidVOn`](https://biomejs.dev/linter/rules/use-vue-valid-v-on/) no longer reports a missing handler for v-on directives using a verb modifier (`.stop` / `.prevent`) without an expression, e.g. `<div @&#8203;click.stop></div>`. The rule also accepts the arg-less object syntax `<div v-on="$listeners"></div>` instead of reporting a missing event name.

- [#&#8203;10721](biomejs/biome#10721) [`d83c66b`](biomejs/biome@d83c66b) Thanks [@&#8203;minseong0324](https://github.com/minseong0324)! - Improved type-aware lint rule inference for built-in globals and indexed function calls. Biome now resolves `Error(...)`, `new Error(...)`, optional `Error#stack`, and calls through indexed function values such as `handlers[0]()` more accurately.

- [#&#8203;10865](biomejs/biome#10865) [`6450276`](biomejs/biome@6450276) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10845](biomejs/biome#10845). Biome Language Server no longer goes in deadlock when the scanner is enabled.

- [#&#8203;10853](biomejs/biome#10853) [`93d8e53`](biomejs/biome@93d8e53) Thanks [@&#8203;Netail](https://github.com/Netail)! - Fixed [#&#8203;10840](biomejs/biome#10840): Astro shorthand attribute syntax is now correctly being parsed from embedded nodes.

- [#&#8203;10820](biomejs/biome#10820) [`bba3092`](biomejs/biome@bba3092) Thanks [@&#8203;JamBalaya56562](https://github.com/JamBalaya56562)! - Fixed [#&#8203;10619](biomejs/biome#10619): [`noProcessEnv`](https://biomejs.dev/linter/rules/no-process-env/) now also reports computed (bracket) member access. Previously only dot access was checked, so `process["env"]` and `env["NODE_ENV"]` (where `env` is imported from `node:process`) were missed. Both static and computed accesses are now reported.

- [#&#8203;10835](biomejs/biome#10835) [`3447b2f`](biomejs/biome@3447b2f) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;10824](biomejs/biome#10824): [`useDomQuerySelector`](https://biomejs.dev/linter/rules/use-dom-query-selector/) now supports an `ignore` option for receiver identifiers that should not be reported.

- [#&#8203;10875](biomejs/biome#10875) [`b12e486`](biomejs/biome@b12e486) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;10795](biomejs/biome#10795): `--profile-rules` now reports timings for each plugin separately as `plugin/<pluginName>`, matching the naming used by plugin suppressions, instead of aggregating all plugins under a single `plugin/plugin` entry.

- [#&#8203;10877](biomejs/biome#10877) [`d6bc447`](biomejs/biome@d6bc447) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [biome-zed#164](biomejs/biome-zed#164): Biome no longer inserts stray whitespace when format-on-type runs after closing delimiters such as `)`, `]`, and `}`.

- [#&#8203;10867](biomejs/biome#10867) [`a21463e`](biomejs/biome@a21463e) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;10864](biomejs/biome#10864): Biome no longer crashes when checking or linting HTML files with unquoted attribute values such as `<textarea rows=4></textarea>`.

</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:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTIuMyIsInVwZGF0ZWRJblZlciI6IjQzLjI1Mi4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Reviewed-on: https://git.oirnoir.dev/OIRNOIR/YouTube-Helper-Client/pulls/12
OIRNOIR pushed a commit to OIRNOIR/YouTube-Helper-Server that referenced this pull request Jul 15, 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.2` -> `2.5.3`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.5.2/2.5.3) | `2.5.4` |

---

### Release Notes

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

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

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

##### Patch Changes

- [#&#8203;10815](biomejs/biome#10815) [`86613d5`](biomejs/biome@86613d5) Thanks [@&#8203;WaterWhisperer](https://github.com/WaterWhisperer)! - Fixed a parser panic reported in [#&#8203;10708](biomejs/biome#10708): Biome now recovers when unsupported CSS Modules `@value` rules or scoped `@keyframes` names end at EOF.

- [#&#8203;10534](biomejs/biome#10534) [`da9b403`](biomejs/biome@da9b403) Thanks [@&#8203;Mokto](https://github.com/Mokto)! - Fixed [`noUnusedVariables`](https://biomejs.dev/linter/rules/no-unused-variables/) false positives in Svelte files: Svelte store subscriptions (`$store` references in templates now keep the underlying `store` binding from being flagged), and `$bindable()` props that are only written to in the script block (write-only is intentional for bindable props) are no longer reported as unused.

- [#&#8203;10827](biomejs/biome#10827) [`098ba41`](biomejs/biome@098ba41) Thanks [@&#8203;Aqu1bp](https://github.com/Aqu1bp)! - Fixed [#&#8203;10698](biomejs/biome#10698): The [`noUnsafeOptionalChaining`](https://biomejs.dev/linter/rules/no-unsafe-optional-chaining/) rule now reports unsafe optional chains wrapped in TypeScript `as`, `satisfies`, type assertion, and instantiation expressions, such as `new (value?.constructor as Constructor)()`.

- [#&#8203;10773](biomejs/biome#10773) [`3c6513d`](biomejs/biome@3c6513d) Thanks [@&#8203;otkrickey](https://github.com/otkrickey)! - Fixed [#&#8203;10772](biomejs/biome#10772): [`useVueValidVOn`](https://biomejs.dev/linter/rules/use-vue-valid-v-on/) no longer reports a missing handler for v-on directives using a verb modifier (`.stop` / `.prevent`) without an expression, e.g. `<div @&#8203;click.stop></div>`. The rule also accepts the arg-less object syntax `<div v-on="$listeners"></div>` instead of reporting a missing event name.

- [#&#8203;10721](biomejs/biome#10721) [`d83c66b`](biomejs/biome@d83c66b) Thanks [@&#8203;minseong0324](https://github.com/minseong0324)! - Improved type-aware lint rule inference for built-in globals and indexed function calls. Biome now resolves `Error(...)`, `new Error(...)`, optional `Error#stack`, and calls through indexed function values such as `handlers[0]()` more accurately.

- [#&#8203;10865](biomejs/biome#10865) [`6450276`](biomejs/biome@6450276) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [#&#8203;10845](biomejs/biome#10845). Biome Language Server no longer goes in deadlock when the scanner is enabled.

- [#&#8203;10853](biomejs/biome#10853) [`93d8e53`](biomejs/biome@93d8e53) Thanks [@&#8203;Netail](https://github.com/Netail)! - Fixed [#&#8203;10840](biomejs/biome#10840): Astro shorthand attribute syntax is now correctly being parsed from embedded nodes.

- [#&#8203;10820](biomejs/biome#10820) [`bba3092`](biomejs/biome@bba3092) Thanks [@&#8203;JamBalaya56562](https://github.com/JamBalaya56562)! - Fixed [#&#8203;10619](biomejs/biome#10619): [`noProcessEnv`](https://biomejs.dev/linter/rules/no-process-env/) now also reports computed (bracket) member access. Previously only dot access was checked, so `process["env"]` and `env["NODE_ENV"]` (where `env` is imported from `node:process`) were missed. Both static and computed accesses are now reported.

- [#&#8203;10835](biomejs/biome#10835) [`3447b2f`](biomejs/biome@3447b2f) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;10824](biomejs/biome#10824): [`useDomQuerySelector`](https://biomejs.dev/linter/rules/use-dom-query-selector/) now supports an `ignore` option for receiver identifiers that should not be reported.

- [#&#8203;10875](biomejs/biome#10875) [`b12e486`](biomejs/biome@b12e486) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;10795](biomejs/biome#10795): `--profile-rules` now reports timings for each plugin separately as `plugin/<pluginName>`, matching the naming used by plugin suppressions, instead of aggregating all plugins under a single `plugin/plugin` entry.

- [#&#8203;10877](biomejs/biome#10877) [`d6bc447`](biomejs/biome@d6bc447) Thanks [@&#8203;ematipico](https://github.com/ematipico)! - Fixed [biome-zed#164](biomejs/biome-zed#164): Biome no longer inserts stray whitespace when format-on-type runs after closing delimiters such as `)`, `]`, and `}`.

- [#&#8203;10867](biomejs/biome#10867) [`a21463e`](biomejs/biome@a21463e) Thanks [@&#8203;dyc3](https://github.com/dyc3)! - Fixed [#&#8203;10864](biomejs/biome#10864): Biome no longer crashes when checking or linting HTML files with unquoted attribute values such as `<textarea rows=4></textarea>`.

</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:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTIuMyIsInVwZGF0ZWRJblZlciI6IjQzLjI1Mi4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

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

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

💅 useVueValidVOn false positive for v-on with only verb modifiers (e.g. @click.stop, @submit.prevent)

2 participants