fix(parse/html): treat of as text in text contexts#10273
Conversation
🦋 Changeset detectedLatest commit: 6c436fa The changes in this PR will be included in the next version bump. This PR includes changesets to release 13 packages
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 |
WalkthroughUnifies keyword detection in the HTML parser by introducing ALL_POSSIBLE_KEYWORDS (union of HTML_KEYWORDS, SVELTE_KEYWORDS and VUE_KEYWORDS) and switching keyword checks to use it. Makes SVELTE_KEYWORDS public and adds a new public VUE_KEYWORDS constant (containing Possibly related PRs
🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Warning Review ran into problems🔥 ProblemsTimed out fetching pipeline failures after 30000ms Comment |
There was a problem hiding this comment.
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/thick-poems-deny.md:
- Line 5: The changeset description uses a plain body line for the entry ("Fixed
`#10271`: The HTML parser now correctly parses `of` as text content when in text
contexts"); replace that line with a valid changeset header using either "####"
or "#####", e.g. prefix the sentence with "#### " (or "##### ") so the
description uses an allowed header level in .changeset/thick-poems-deny.md and
won't break the changelog tooling.
In `@crates/biome_html_parser/src/syntax/mod.rs`:
- Around line 16-24: Remove the now-unused/nonexistent helper imports from the
top-level mod import lists: delete is_at_vue_keyword from the crate::syntax::vue
import group and delete is_at_svelte_keyword from the crate::syntax::svelte
import group (and drop any other imports in those lists that are unused/warned
about); update call sites to rely on the new is_at_keyword /
p.at_ts(ALL_POSSIBLE_KEYWORDS) approach where appropriate and ensure only actual
exported symbols like VUE_KEYWORDS, parse_vue_directive, parse_svelte_directive,
etc., remain in the use lists.
🪄 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: 391694e5-53ad-4a48-9690-cf0dbec26849
⛔ Files ignored due to path filters (31)
crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/as.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/attach.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/await.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/bind.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/catch.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/class.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/client.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/const.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/debug.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/define.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/doctype.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/each.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/else.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/false.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/html.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/if.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/in.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/is.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/key.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/null.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/of.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/out.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/render.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/server.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/set.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/snippet.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/style.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/then.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/transition.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/true.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/use.html.snapis excluded by!**/*.snapand included by**
📒 Files selected for processing (35)
.changeset/thick-poems-deny.mdcrates/biome_html_parser/src/syntax/mod.rscrates/biome_html_parser/src/syntax/svelte.rscrates/biome_html_parser/src/syntax/vue.rscrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/as.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/attach.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/await.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/bind.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/catch.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/class.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/client.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/const.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/debug.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/define.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/doctype.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/each.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/else.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/false.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/html.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/if.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/in.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/is.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/key.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/null.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/of.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/out.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/render.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/server.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/set.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/snippet.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/style.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/then.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/transition.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/true.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/use.html
| "@biomejs/biome": patch | ||
| --- | ||
|
|
||
| Fixed [#10271](https://github.com/biomejs/biome/issues/10271): The HTML parser now correctly parses `of` as text content when in text contexts. |
There was a problem hiding this comment.
Use a valid changeset header level for the description.
Line 5 should be a #### or ##### header; plain body text here risks breaking changelog tooling per repo rules.
Suggested fix
-Fixed [`#10271`](https://github.com/biomejs/biome/issues/10271): The HTML parser now correctly parses `of` as text content when in text contexts.
+#### Fixed [`#10271`](https://github.com/biomejs/biome/issues/10271): The HTML parser now correctly parses `of` as text content when in text contexts.As per coding guidelines, "Use only #### or ##### headers in changeset descriptions; other header levels will break the final CHANGELOG and break upstream tools".
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| Fixed [#10271](https://github.com/biomejs/biome/issues/10271): The HTML parser now correctly parses `of` as text content when in text contexts. | |
| #### Fixed [`#10271`](https://github.com/biomejs/biome/issues/10271): The HTML parser now correctly parses `of` as text content when in text contexts. |
🤖 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/thick-poems-deny.md at line 5, The changeset description uses a
plain body line for the entry ("Fixed `#10271`: The HTML parser now correctly
parses `of` as text content when in text contexts"); replace that line with a
valid changeset header using either "####" or "#####", e.g. prefix the sentence
with "#### " (or "##### ") so the description uses an allowed header level in
.changeset/thick-poems-deny.md and won't break the changelog tooling.
086cf5e to
6c436fa
Compare
There was a problem hiding this comment.
♻️ Duplicate comments (1)
.changeset/thick-poems-deny.md (1)
5-5:⚠️ Potential issue | 🟠 Major | ⚡ Quick winUse a valid changeset header level on Line 5.
The bugfix sentence should be a
####/#####header, not plain body text, otherwise changelog tooling may choke.Suggested fix
-Fixed [`#10271`](https://github.com/biomejs/biome/issues/10271): The HTML parser now correctly parses `of` as text content when in text contexts. +#### Fixed [`#10271`](https://github.com/biomejs/biome/issues/10271): The HTML parser now correctly parses `of` as text content when in text contexts.As per coding guidelines, "Use only #### or ##### headers in changeset descriptions; other header levels will break the final CHANGELOG and break upstream tools".
🤖 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/thick-poems-deny.md at line 5, Change the plain text bugfix sentence on line 5 of the changeset to a valid header (use either "####" or "#####") so the line becomes a proper changeset header like "#### Fixed `#10271`: The HTML parser now correctly parses `of` as text content when in text contexts."; update the header marker only (keep the existing text and issue link intact) to satisfy the required changeset header level.
🤖 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.
Duplicate comments:
In @.changeset/thick-poems-deny.md:
- Line 5: Change the plain text bugfix sentence on line 5 of the changeset to a
valid header (use either "####" or "#####") so the line becomes a proper
changeset header like "#### Fixed `#10271`: The HTML parser now correctly parses
`of` as text content when in text contexts."; update the header marker only
(keep the existing text and issue link intact) to satisfy the required changeset
header level.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 85ccfdf0-7be1-466e-8598-ec1b52c56af5
⛔ Files ignored due to path filters (31)
crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/as.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/attach.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/await.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/bind.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/catch.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/class.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/client.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/const.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/debug.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/define.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/doctype.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/each.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/else.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/false.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/html.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/if.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/in.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/is.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/key.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/null.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/of.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/out.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/render.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/server.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/set.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/snippet.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/style.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/then.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/transition.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/true.html.snapis excluded by!**/*.snapand included by**crates/biome_html_parser/tests/html_specs/ok/keywords-as-text/use.html.snapis excluded by!**/*.snapand included by**
📒 Files selected for processing (35)
.changeset/thick-poems-deny.mdcrates/biome_html_parser/src/syntax/mod.rscrates/biome_html_parser/src/syntax/svelte.rscrates/biome_html_parser/src/syntax/vue.rscrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/as.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/attach.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/await.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/bind.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/catch.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/class.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/client.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/const.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/debug.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/define.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/doctype.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/each.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/else.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/false.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/html.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/if.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/in.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/is.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/key.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/null.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/of.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/out.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/render.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/server.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/set.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/snippet.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/style.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/then.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/transition.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/true.htmlcrates/biome_html_parser/tests/html_specs/ok/keywords-as-text/use.html
Merging this PR will not alter performance
Comparing Footnotes
|
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.4.14` -> `2.4.15`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.4.14/2.4.15) | --- ### Release Notes <details> <summary>biomejs/biome (@​biomejs/biome)</summary> ### [`v2.4.15`](https://github.com/biomejs/biome/blob/HEAD/packages/@​biomejs/biome/CHANGELOG.md#2415) [Compare Source](https://github.com/biomejs/biome/compare/@biomejs/biome@2.4.14...@biomejs/biome@2.4.15) ##### Patch Changes - [#​9394](biomejs/biome#9394) [`ba3480e`](biomejs/biome@ba3480e) Thanks [@​dyc3](https://github.com/dyc3)! - Added the nursery rule [`useTestHooksInOrder`](https://biomejs.dev/linter/rules/use-test-hooks-in-order) in the `test` domain. The rule enforces that Jest/Vitest lifecycle hooks (`beforeAll`, `beforeEach`, `afterEach`, `afterAll`) are declared in the order they execute, making test setup and teardown easier to reason about. - [#​10254](biomejs/biome#10254) [`e0a54cc`](biomejs/biome@e0a54cc) Thanks [@​dyc3](https://github.com/dyc3)! - Added a new nursery rule [`useVueNextTickPromise`](https://biomejs.dev/linter/rules/use-vue-next-tick-promise/), which enforces Promise syntax when using Vue `nextTick`. For example, the following snippet triggers the rule: ```js import { nextTick } from "vue"; nextTick(() => { updateDom(); }); ``` - [#​10219](biomejs/biome#10219) [`64aee45`](biomejs/biome@64aee45) Thanks [@​dyc3](https://github.com/dyc3)! - Added a new nursery rule [`noVueVOnNumberValues`](https://biomejs.dev/linter/rules/no-vue-v-on-number-values/), that disallows deprecated number modifiers on Vue `v-on` directives. For example, the following snippet triggers the rule: ```vue <input @​keyup.13="submit" /> ``` - [#​10195](biomejs/biome#10195) [`7b8d4e1`](biomejs/biome@7b8d4e1) Thanks [@​dyc3](https://github.com/dyc3)! - Added the new nursery rule [`useVueValidVFor`](https://biomejs.dev/linter/rules/use-vue-valid-v-for/), which validates Vue `v-for` directives and reports invalid aliases, missing component keys, and keys that do not use iteration variables. - [#​10238](biomejs/biome#10238) [`1110256`](biomejs/biome@1110256) Thanks [@​dyc3](https://github.com/dyc3)! - Added the recommended nursery rule [`noVueImportCompilerMacros`](https://biomejs.dev/linter/rules/no-vue-import-compiler-macros/), which disallows importing Vue compiler macros such as `defineProps` from `vue` because they are automatically available. - [#​10201](biomejs/biome#10201) [`1a08f89`](biomejs/biome@1a08f89) Thanks [@​realknove](https://github.com/realknove)! - Fixed [#​10193](biomejs/biome#10193): `style/useReadonlyClassProperties` no longer reports class properties as readonly-able when they are assigned inside arrow callbacks nested in class property initializers. - [#​9574](biomejs/biome#9574) [`3bd2b6a`](biomejs/biome@3bd2b6a) Thanks [@​Conaclos](https://github.com/Conaclos)! - Fixed [#​9530](biomejs/biome#9530). The diagnostics of [`organizeImports`](https://biomejs.dev/assist/actions/organize-imports/) are now more detailed and more precise. They are also better at localizing where the issue is. - [#​10205](biomejs/biome#10205) [`a704a6c`](biomejs/biome@a704a6c) Thanks [@​Conaclos](https://github.com/Conaclos)! - Fixed [#​10185](biomejs/biome#10185). [\`organizeImports](https://biomejs.dev/assist/actions/organize-imports/) now errors when it encounters an unknown predefined group. The following configuration is now reported as invalid because `:INEXISTENT:` is an unknown predefined group. ```json { "assist": { "actions": { "source": { "organizeImports": { "options": { "groups": [":INEXISTENT:"] } } } } } } ``` - [#​10052](biomejs/biome#10052) [`b565bed`](biomejs/biome@b565bed) Thanks [@​minseong0324](https://github.com/minseong0324)! - Improved [`noMisleadingReturnType`](https://biomejs.dev/linter/rules/no-misleading-return-type/): it now flags union annotations whose extra variants are never returned, and suggests the narrower type (e.g. `string | null` → `string`). These functions are now reported because `null` and `number` are included in the return annotations but never returned: ```ts function getUser(): string | null { return "hello"; } // null is never returned function getCode(): string | number { return "hello"; } // number is never returned ``` - [#​10213](biomejs/biome#10213) [`ac30057`](biomejs/biome@ac30057) Thanks [@​dyc3](https://github.com/dyc3)! - Fixed [#​9450](biomejs/biome#9450): HTML and Vue element formatting now preserves child line breaks when an element contains another element child on its own line, instead of collapsing the child element onto the same line. - [#​10275](biomejs/biome#10275) [`9ee6c03`](biomejs/biome@9ee6c03) Thanks [@​solithcy](https://github.com/solithcy)! - Fixed [#​10274](biomejs/biome#10274): Svelte templates with missing expressions no longer parsed as `HtmlBogusElement` - [#​10143](biomejs/biome#10143) [`56798a7`](biomejs/biome@56798a7) Thanks [@​minseong0324](https://github.com/minseong0324)! - [`noMisleadingReturnType`](https://biomejs.dev/linter/rules/no-misleading-return-type/) now detects misleading return type annotations when object literal properties are initialized with `as const`. This function is now reported because the return annotation widens a property initialized with `as const`: ```ts function f(): { value: string } { return { value: "text" as const }; } ``` - [#​10143](biomejs/biome#10143) [`56798a7`](biomejs/biome@56798a7) Thanks [@​minseong0324](https://github.com/minseong0324)! - [`noUselessTypeConversion`](https://biomejs.dev/linter/rules/no-useless-type-conversion/) now detects redundant conversions on object literal properties initialized with `as const`. This conversion is now reported because `message.value` is inferred as a string literal: ```ts const message = { value: "text" as const }; String(message.value); ``` - [#​9807](biomejs/biome#9807) [`0ae5840`](biomejs/biome@0ae5840) Thanks [@​dyc3](https://github.com/dyc3)! - Added the new nursery rule [`useThisInClassMethods`](https://biomejs.dev/linter/rules/use-this-in-class-methods/), based on ESLint's `class-methods-use-this`. The rule now reports instance methods, getters, setters, and function-valued instance fields that do not use `this`, and `biome migrate eslint` preserves the supported `ignoreMethods`, `ignoreOverrideMethods`, and `ignoreClassesWithImplements` options. **Invalid**: ```js class Foo { bar() { // does not use `this`, invalid console.log("Hello Biome"); } } ``` - [#​10258](biomejs/biome#10258) [`e7b18f7`](biomejs/biome@e7b18f7) Thanks [@​ematipico](https://github.com/ematipico)! - Improved linter performance by narrowing the query nodes for several lint rules, reducing how often they are evaluated. - [#​10273](biomejs/biome#10273) [`04e22a1`](biomejs/biome@04e22a1) Thanks [@​dyc3](https://github.com/dyc3)! - Fixed [#​10271](biomejs/biome#10271): The HTML parser now correctly parses `of` as text content when in text contexts. - [#​9838](biomejs/biome#9838) [`83f7385`](biomejs/biome@83f7385) Thanks [@​dyc3](https://github.com/dyc3)! - Added the nursery rule [`noBaseToString`](https://biomejs.dev/linter/rules/no-base-to-string/), which reports stringification sites that fall back to Object's default `"[object Object]"` formatting. The rule also supports the `ignoredTypeNames` option. - [#​10143](biomejs/biome#10143) [`56798a7`](biomejs/biome@56798a7) Thanks [@​minseong0324](https://github.com/minseong0324)! - [`useExhaustiveSwitchCases`](https://biomejs.dev/linter/rules/use-exhaustive-switch-cases/) now checks switch statements over object literal properties initialized with `as const`. This switch is now reported because `status.kind` is inferred as the string literal `"ready"` but no case handles it: ```ts const status = { kind: "ready" as const }; switch (status.kind) { } ``` - [#​10143](biomejs/biome#10143) [`56798a7`](biomejs/biome@56798a7) Thanks [@​minseong0324](https://github.com/minseong0324)! - [`useStringStartsEndsWith`](https://biomejs.dev/linter/rules/use-string-starts-ends-with/) now detects string index comparisons on object literal properties initialized with `as const`. This comparison is now reported because `message.value` is inferred as a string literal: ```ts const message = { value: "hello" as const }; message.value[0] === "h"; ``` </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:eyJjcmVhdGVkSW5WZXIiOiI0My4xNzMuMyIsInVwZGF0ZWRJblZlciI6IjQzLjE3My4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Reviewed-on: https://git.oirnoir.dev/OIRNOIR/YouTube-Helper-Server/pulls/12
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.4.14` -> `2.4.15`](https://renovatebot.com/diffs/npm/@biomejs%2fbiome/2.4.14/2.4.15) | --- ### Release Notes <details> <summary>biomejs/biome (@​biomejs/biome)</summary> ### [`v2.4.15`](https://github.com/biomejs/biome/blob/HEAD/packages/@​biomejs/biome/CHANGELOG.md#2415) [Compare Source](https://github.com/biomejs/biome/compare/@biomejs/biome@2.4.14...@biomejs/biome@2.4.15) ##### Patch Changes - [#​9394](biomejs/biome#9394) [`ba3480e`](biomejs/biome@ba3480e) Thanks [@​dyc3](https://github.com/dyc3)! - Added the nursery rule [`useTestHooksInOrder`](https://biomejs.dev/linter/rules/use-test-hooks-in-order) in the `test` domain. The rule enforces that Jest/Vitest lifecycle hooks (`beforeAll`, `beforeEach`, `afterEach`, `afterAll`) are declared in the order they execute, making test setup and teardown easier to reason about. - [#​10254](biomejs/biome#10254) [`e0a54cc`](biomejs/biome@e0a54cc) Thanks [@​dyc3](https://github.com/dyc3)! - Added a new nursery rule [`useVueNextTickPromise`](https://biomejs.dev/linter/rules/use-vue-next-tick-promise/), which enforces Promise syntax when using Vue `nextTick`. For example, the following snippet triggers the rule: ```js import { nextTick } from "vue"; nextTick(() => { updateDom(); }); ``` - [#​10219](biomejs/biome#10219) [`64aee45`](biomejs/biome@64aee45) Thanks [@​dyc3](https://github.com/dyc3)! - Added a new nursery rule [`noVueVOnNumberValues`](https://biomejs.dev/linter/rules/no-vue-v-on-number-values/), that disallows deprecated number modifiers on Vue `v-on` directives. For example, the following snippet triggers the rule: ```vue <input @​keyup.13="submit" /> ``` - [#​10195](biomejs/biome#10195) [`7b8d4e1`](biomejs/biome@7b8d4e1) Thanks [@​dyc3](https://github.com/dyc3)! - Added the new nursery rule [`useVueValidVFor`](https://biomejs.dev/linter/rules/use-vue-valid-v-for/), which validates Vue `v-for` directives and reports invalid aliases, missing component keys, and keys that do not use iteration variables. - [#​10238](biomejs/biome#10238) [`1110256`](biomejs/biome@1110256) Thanks [@​dyc3](https://github.com/dyc3)! - Added the recommended nursery rule [`noVueImportCompilerMacros`](https://biomejs.dev/linter/rules/no-vue-import-compiler-macros/), which disallows importing Vue compiler macros such as `defineProps` from `vue` because they are automatically available. - [#​10201](biomejs/biome#10201) [`1a08f89`](biomejs/biome@1a08f89) Thanks [@​realknove](https://github.com/realknove)! - Fixed [#​10193](biomejs/biome#10193): `style/useReadonlyClassProperties` no longer reports class properties as readonly-able when they are assigned inside arrow callbacks nested in class property initializers. - [#​9574](biomejs/biome#9574) [`3bd2b6a`](biomejs/biome@3bd2b6a) Thanks [@​Conaclos](https://github.com/Conaclos)! - Fixed [#​9530](biomejs/biome#9530). The diagnostics of [`organizeImports`](https://biomejs.dev/assist/actions/organize-imports/) are now more detailed and more precise. They are also better at localizing where the issue is. - [#​10205](biomejs/biome#10205) [`a704a6c`](biomejs/biome@a704a6c) Thanks [@​Conaclos](https://github.com/Conaclos)! - Fixed [#​10185](biomejs/biome#10185). [\`organizeImports](https://biomejs.dev/assist/actions/organize-imports/) now errors when it encounters an unknown predefined group. The following configuration is now reported as invalid because `:INEXISTENT:` is an unknown predefined group. ```json { "assist": { "actions": { "source": { "organizeImports": { "options": { "groups": [":INEXISTENT:"] } } } } } } ``` - [#​10052](biomejs/biome#10052) [`b565bed`](biomejs/biome@b565bed) Thanks [@​minseong0324](https://github.com/minseong0324)! - Improved [`noMisleadingReturnType`](https://biomejs.dev/linter/rules/no-misleading-return-type/): it now flags union annotations whose extra variants are never returned, and suggests the narrower type (e.g. `string | null` → `string`). These functions are now reported because `null` and `number` are included in the return annotations but never returned: ```ts function getUser(): string | null { return "hello"; } // null is never returned function getCode(): string | number { return "hello"; } // number is never returned ``` - [#​10213](biomejs/biome#10213) [`ac30057`](biomejs/biome@ac30057) Thanks [@​dyc3](https://github.com/dyc3)! - Fixed [#​9450](biomejs/biome#9450): HTML and Vue element formatting now preserves child line breaks when an element contains another element child on its own line, instead of collapsing the child element onto the same line. - [#​10275](biomejs/biome#10275) [`9ee6c03`](biomejs/biome@9ee6c03) Thanks [@​solithcy](https://github.com/solithcy)! - Fixed [#​10274](biomejs/biome#10274): Svelte templates with missing expressions no longer parsed as `HtmlBogusElement` - [#​10143](biomejs/biome#10143) [`56798a7`](biomejs/biome@56798a7) Thanks [@​minseong0324](https://github.com/minseong0324)! - [`noMisleadingReturnType`](https://biomejs.dev/linter/rules/no-misleading-return-type/) now detects misleading return type annotations when object literal properties are initialized with `as const`. This function is now reported because the return annotation widens a property initialized with `as const`: ```ts function f(): { value: string } { return { value: "text" as const }; } ``` - [#​10143](biomejs/biome#10143) [`56798a7`](biomejs/biome@56798a7) Thanks [@​minseong0324](https://github.com/minseong0324)! - [`noUselessTypeConversion`](https://biomejs.dev/linter/rules/no-useless-type-conversion/) now detects redundant conversions on object literal properties initialized with `as const`. This conversion is now reported because `message.value` is inferred as a string literal: ```ts const message = { value: "text" as const }; String(message.value); ``` - [#​9807](biomejs/biome#9807) [`0ae5840`](biomejs/biome@0ae5840) Thanks [@​dyc3](https://github.com/dyc3)! - Added the new nursery rule [`useThisInClassMethods`](https://biomejs.dev/linter/rules/use-this-in-class-methods/), based on ESLint's `class-methods-use-this`. The rule now reports instance methods, getters, setters, and function-valued instance fields that do not use `this`, and `biome migrate eslint` preserves the supported `ignoreMethods`, `ignoreOverrideMethods`, and `ignoreClassesWithImplements` options. **Invalid**: ```js class Foo { bar() { // does not use `this`, invalid console.log("Hello Biome"); } } ``` - [#​10258](biomejs/biome#10258) [`e7b18f7`](biomejs/biome@e7b18f7) Thanks [@​ematipico](https://github.com/ematipico)! - Improved linter performance by narrowing the query nodes for several lint rules, reducing how often they are evaluated. - [#​10273](biomejs/biome#10273) [`04e22a1`](biomejs/biome@04e22a1) Thanks [@​dyc3](https://github.com/dyc3)! - Fixed [#​10271](biomejs/biome#10271): The HTML parser now correctly parses `of` as text content when in text contexts. - [#​9838](biomejs/biome#9838) [`83f7385`](biomejs/biome@83f7385) Thanks [@​dyc3](https://github.com/dyc3)! - Added the nursery rule [`noBaseToString`](https://biomejs.dev/linter/rules/no-base-to-string/), which reports stringification sites that fall back to Object's default `"[object Object]"` formatting. The rule also supports the `ignoredTypeNames` option. - [#​10143](biomejs/biome#10143) [`56798a7`](biomejs/biome@56798a7) Thanks [@​minseong0324](https://github.com/minseong0324)! - [`useExhaustiveSwitchCases`](https://biomejs.dev/linter/rules/use-exhaustive-switch-cases/) now checks switch statements over object literal properties initialized with `as const`. This switch is now reported because `status.kind` is inferred as the string literal `"ready"` but no case handles it: ```ts const status = { kind: "ready" as const }; switch (status.kind) { } ``` - [#​10143](biomejs/biome#10143) [`56798a7`](biomejs/biome@56798a7) Thanks [@​minseong0324](https://github.com/minseong0324)! - [`useStringStartsEndsWith`](https://biomejs.dev/linter/rules/use-string-starts-ends-with/) now detects string index comparisons on object literal properties initialized with `as const`. This comparison is now reported because `message.value` is inferred as a string literal: ```ts const message = { value: "hello" as const }; message.value[0] === "h"; ``` </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:eyJjcmVhdGVkSW5WZXIiOiI0My4xNzMuMyIsInVwZGF0ZWRJblZlciI6IjQzLjE3My4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Reviewed-on: https://git.oirnoir.dev/OIRNOIR/YouTube-Helper-Client/pulls/3
Summary
I had gpt 5.5 add the tests, but i did the fix myself.
fixes #10271
Test Plan
snapshots
Docs