Skip to content

feat: biome v2.4#3943

Merged
ematipico merged 5 commits intonextfrom
chore/biome-v2-4
Feb 15, 2026
Merged

feat: biome v2.4#3943
ematipico merged 5 commits intonextfrom
chore/biome-v2-4

Conversation

@ematipico
Copy link
Member

@ematipico ematipico commented Feb 13, 2026

Summary

I shamefully used AI to write the blog post. I used it to collect all the minor enhancements we are about to this. Then I rewrote some paragraphs, mostly the highlights.

I am aware that the blog post is lengthy because it lists ALL new minors, happy to reduce it and remove unnecessary chapters.

@netlify
Copy link

netlify bot commented Feb 13, 2026

Deploy Preview for biomejs ready!

Name Link
🔨 Latest commit 75dc02a
🔍 Latest deploy log https://app.netlify.com/projects/biomejs/deploys/6990b57e93791b0008a883a4
😎 Deploy Preview https://deploy-preview-3943--biomejs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@ematipico ematipico requested review from a team February 13, 2026 13:38
@dyc3 dyc3 self-requested a review February 13, 2026 13:42
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 13, 2026

Walkthrough

Adds a new Astro component at src/components/Contributor.astro that accepts a handle prop and renders a linked, styled contributor handle. Broadens the zed.value prop type in src/components/EditorSettings.astro from string to string | object and applies minor formatting tweaks. Adds a new MDX blog post at src/content/docs/blog/biome-v2-4.mdx documenting Biome v2.4 features. Updates src/content/docs/internals/language-support.mdx to mark JSONC as supported and revise guidance for linting HTML-ish languages.

Suggested reviewers

  • torielstrom
  • dyc3
  • arendjr
🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Merge Conflict Detection ⚠️ Warning ❌ Merge conflicts detected (57 files):

⚔️ Cargo.lock (content)
⚔️ Cargo.toml (content)
⚔️ package.json (content)
⚔️ pnpm-lock.yaml (content)
⚔️ redirects.js (content)
⚔️ src/components/EditorSettings.astro (content)
⚔️ src/components/generated/linter/NumberOfRules.astro (content)
⚔️ src/content/docs/internals/language-support.mdx (content)
⚔️ src/content/docs/linter/css/rules.mdx (content)
⚔️ src/content/docs/linter/css/sources.mdx (content)
⚔️ src/content/docs/linter/domains.mdx (content)
⚔️ src/content/docs/linter/graphql/rules.mdx (content)
⚔️ src/content/docs/linter/graphql/sources.mdx (content)
⚔️ src/content/docs/linter/javascript/rules.mdx (content)
⚔️ src/content/docs/linter/javascript/sources.mdx (content)
⚔️ src/content/docs/linter/json/rules.mdx (content)
⚔️ src/content/docs/linter/rules/no-assign-in-expressions.mdx (content)
⚔️ src/content/docs/linter/rules/no-common-js.mdx (content)
⚔️ src/content/docs/linter/rules/no-deprecated-imports.mdx (content)
⚔️ src/content/docs/linter/rules/no-deprecated-media-type.mdx (content)
⚔️ src/content/docs/linter/rules/no-duplicate-dependencies.mdx (content)
⚔️ src/content/docs/linter/rules/no-empty-source.mdx (content)
⚔️ src/content/docs/linter/rules/no-hex-colors.mdx (content)
⚔️ src/content/docs/linter/rules/no-import-cycles.mdx (content)
⚔️ src/content/docs/linter/rules/no-jsx-literals.mdx (content)
⚔️ src/content/docs/linter/rules/no-next-async-client-component.mdx (content)
⚔️ src/content/docs/linter/rules/no-positive-tabindex.mdx (content)
⚔️ src/content/docs/linter/rules/no-react-forward-ref.mdx (content)
⚔️ src/content/docs/linter/rules/no-redundant-alt.mdx (content)
⚔️ src/content/docs/linter/rules/no-shadow.mdx (content)
⚔️ src/content/docs/linter/rules/no-svg-without-title.mdx (content)
⚔️ src/content/docs/linter/rules/no-unresolved-imports.mdx (content)
⚔️ src/content/docs/linter/rules/no-unused-expressions.mdx (content)
⚔️ src/content/docs/linter/rules/no-unused-imports.mdx (content)
⚔️ src/content/docs/linter/rules/no-useless-catch-binding.mdx (content)
⚔️ src/content/docs/linter/rules/no-useless-undefined.mdx (content)
⚔️ src/content/docs/linter/rules/no-vue-arrow-func-in-watch.mdx (content)
⚔️ src/content/docs/linter/rules/no-vue-data-object-declaration.mdx (content)
⚔️ src/content/docs/linter/rules/no-vue-duplicate-keys.mdx (content)
⚔️ src/content/docs/linter/rules/no-vue-reserved-keys.mdx (content)
⚔️ src/content/docs/linter/rules/no-vue-reserved-props.mdx (content)
⚔️ src/content/docs/linter/rules/no-vue-setup-props-reactivity-loss.mdx (content)
⚔️ src/content/docs/linter/rules/use-arrow-function.mdx (content)
⚔️ src/content/docs/linter/rules/use-await.mdx (content)
⚔️ src/content/docs/linter/rules/use-consistent-arrow-return.mdx (content)
⚔️ src/content/docs/linter/rules/use-consistent-type-definitions.mdx (content)
⚔️ src/content/docs/linter/rules/use-deprecated-date.mdx (content)
⚔️ src/content/docs/linter/rules/use-exhaustive-dependencies.mdx (content)
⚔️ src/content/docs/linter/rules/use-explicit-type.mdx (content)
⚔️ src/content/docs/linter/rules/use-input-name.mdx (content)
⚔️ src/content/docs/linter/rules/use-max-params.mdx (content)
⚔️ src/content/docs/linter/rules/use-naming-convention.mdx (content)
⚔️ src/content/docs/linter/rules/use-qwik-method-usage.mdx (content)
⚔️ src/content/docs/linter/rules/use-qwik-valid-lexical-scope.mdx (content)
⚔️ src/pages/metadata/rules.json.js (content)
⚔️ src/pages/metadata/schema.json.js (content)
⚔️ src/playground/generated/lintRules.ts (content)

These conflicts must be resolved before merging into next.
Resolve conflicts locally and push changes to this branch.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat: biome v2.4' clearly and concisely describes the main change—adding Biome v2.4 documentation and blog post content.
Description check ✅ Passed The description is directly related to the changeset, explaining the blog post was drafted with AI assistance and manually revised, which aligns with the new blog article file added.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/biome-v2-4
⚔️ Resolve merge conflicts (beta)
  • Auto-commit resolved conflicts to branch chore/biome-v2-4
  • Create stacked PR with resolved conflicts
  • Post resolved changes as copyable diffs in a comment

No actionable comments were generated in the recent review. 🎉


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

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/components/EditorSettings.astro (1)

4-22: ⚠️ Potential issue | 🟠 Major

Handle non-string zed.value when interpolating into JSON.

The type declares zed.value as string | object, but line 21 uses direct interpolation which would yield [object Object] for objects. Current usage only passes strings, but the code should guard against the declared type. Serialise objects before interpolation to be defensive.

🔧 Suggested fix
-const zedCode = `
+const zedValue =
+  typeof zed.value === "string" ? zed.value : JSON.stringify(zed.value, null, 2);
+const zedCode = `
 {
   "lsp": {
     "biome": {
       "settings": {
-         "${zed.name}": ${zed.value}
+         "${zed.name}": ${zedValue}
       }
     }
   }
 }
 `;
🤖 Fix all issues with AI agents
In `@src/content/docs/blog/biome-v2-4.mdx`:
- Around line 28-31: Update the Highlights intro sentence under the "##
Highlights" heading: replace the phrase "here's the ones we think you're going
to like most!" with correct grammar, e.g., "here are the ones we think you're
going to like most!" so the subject-verb agreement is fixed in that line.
- Around line 513-516: The sentence "The `--reporter` and `--reporter-file`
flags must appear next to each other, otherwise an error is thrown." has
punctuation issues around "otherwise" — either insert a comma before "otherwise"
(as shown) or, preferably, split into two sentences like "The `--reporter` and
`--reporter-file` flags must appear next to each other. Otherwise, an error is
thrown." Update that sentence in the MDX content to apply one of these fixes so
the phrasing reads cleanly.
- Around line 149-152: The sentence "The commands `lint` and `check` has now a
`--profile-rules` flag." uses incorrect verb agreement; change "has" to "have"
so it reads: "The commands `lint` and `check` have now a `--profile-rules`
flag." Keep the rest of the paragraph (mentions of the `--profile-rules` flag
and what it enables) unchanged; update only the verb to correct agreement around
the `lint` and `check` commands.
- Around line 617-620: The sentence under the "Translations" section uses "up to
date"; change it to the hyphenated form "up‑to‑date" (use the non-breaking
hyphen as suggested) so the line reads "...check the supported languages and if
they are up‑to‑date." Update the string in the
src/content/docs/blog/biome-v2-4.mdx file within the "Translations" paragraph.
- Around line 172-173: Replace the grammatical error "interpreter" with
"interpret" and make the tone more professional by replacing the informal phrase
"way too high" with a clearer alternative (e.g., "significantly higher than
expected") in the sentence starting "A way to interpreter the data..." and
adjust the trailing clause to use proper tense (e.g., "we've fixed since then");
update the sentence so it reads smoothly: check rules/actions with low counts
and their execution times, and investigate those whose execution times are
significantly higher than expected for possible optimizations.
🧹 Nitpick comments (1)
src/components/Contributor.astro (1)

6-12: Rename alt to title for clarity.

It’s used as a title attribute, so the current name reads like image alt text.

✏️ Suggested tweak
-const alt = `Contributor @${handle}`;
+const title = `Contributor @${handle}`;
 ...
-<a class="handle" href={url} title={alt}>
+<a class="handle" href={url} title={title}>


Biome 2.4 brings significantly improved parsing for Vue and Svelte, resulting in better formatting across the board. Additionally, the rules `noUnusedVariables`, `useConst`, `useImportType` and `noUnusedImports` have been substantially improved, so you will see fewer false positives.

All these improvements are visible only when the flag `html.experimentalFullSupportEnabled` is set to `true`. If you previously used [the `overrides` configuration workaround](/internals/language-support/#linting-html-ish-languages) to disable certain rules, you can now remove it. If you encounter false positives, please report them in this [issue](https://github.com/biomejs/biome/issues/8590). We now have the infrastructure to address these problems.
Copy link
Contributor

Choose a reason for hiding this comment

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

We should add a note the the language support page saying that the overrides shouldn't be necessary anymore if html.experimentalFullSupportEnabled is enabled.


The CSS parser can now parse Vue SFC syntax such as `:slotted`, `:deep`, and `v-bind()`, as well as `:global` and `:local` inside `.astro`, `.svelte` and `.vue` files.

### HTML accessibility rules
Copy link
Contributor

Choose a reason for hiding this comment

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

We should link to the umbrella issue and encourage contributions.


## Additional Features

### GritQL JSON Support
Copy link
Contributor

Choose a reason for hiding this comment

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

The language support page for this needs to be updated if it hasn't already

ematipico and others added 2 commits February 14, 2026 16:48
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Carson McManus <dyc3@users.noreply.github.com>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🤖 Fix all issues with AI agents
In `@src/content/docs/blog/biome-v2-4.mdx`:
- Line 639: The sentence "Additionally, the project provides an [enterprise
support program ](/enterprise) where a company you can employ one of the core
contributors to work a specific aspect of the Biome toolchain." is grammatically
incorrect; update it to a clear phrasing such as "Additionally, the project
provides an enterprise support program where a company can employ (or hire) one
of the core contributors to work on a specific aspect of the Biome toolchain."
Replace the existing sentence in src/content/docs/blog/biome-v2-4.mdx with this
corrected version and ensure the link and spacing remain intact.
- Around line 619-620: Add a blank line between the paragraph that ends with
"you can check the supported languages and if they are up-to-date." and the
heading "### Chat with us" so the heading renders correctly as a markdown
header; locate the paragraph text and the "### Chat with us" heading in
src/content/docs/blog/biome-v2-4.mdx and insert an empty line separating them.
- Line 626: The sentence "Biome is the project that does for you!" is missing a
word; update the sentence in src/content/docs/blog/biome-v2-4.mdx (the line
containing that exact sentence) to a correct phrasing such as "Biome is the
project that does it for you!" or "Biome is the project for you!" so the
sentence reads grammatically correct.
- Line 467: Replace the incorrect configuration option name
experimentalFullHtmlSupportedEnabled with the correct option
experimentalFullSupportEnabled where it's referenced in the text (e.g., the
sentence added at the <style> parsing note and the other occurrence around line
603), so the documentation matches the actual codebase option name
experimentalFullSupportEnabled; ensure both occurrences are updated and run a
quick search to catch any other misnamed references.
🧹 Nitpick comments (1)
src/content/docs/blog/biome-v2-4.mdx (1)

172-172: Consider more formal phrasing.

The phrase "way too high" is flagged as informal. The previous review suggested "far too high" — worth applying for a more polished tone.

✏️ Suggested fix
-One way to interpret the data is to check the rules/actions that have low counts, and check their execution time. For example, if the execution time feels way too high compared to what it should be, maybe it's a good place to look for possible optimizations. Since we landed this feature, we found some bottlenecks that we fixed since then.
+One way to interpret the data is to check the rules/actions that have low counts and their execution time. If the execution time feels far too high compared to what it should be, it may be a good place to look for possible optimisations. Since we landed this feature, we found some bottlenecks that we've fixed since then.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@src/content/docs/internals/language-support.mdx`:
- Line 86: Replace the misspelled config flag name
"html.expererimentalFullSupportEnabled" with the correct
"html.experimentalFullSupportEnabled" in the documentation line so it matches
the canonical schema and code references; update the occurrence in the text that
mentions linting `.svelte`, `.astro` and `.vue` files to use the corrected
symbol html.experimentalFullSupportEnabled.

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@ematipico ematipico merged commit 263c49e into next Feb 15, 2026
8 checks passed
@ematipico ematipico deleted the chore/biome-v2-4 branch February 15, 2026 15:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants