Skip to content

chore: biome v2.5#9277

Merged
ematipico merged 146 commits into
mainfrom
next
Jun 4, 2026
Merged

chore: biome v2.5#9277
ematipico merged 146 commits into
mainfrom
next

Conversation

@ematipico

Copy link
Copy Markdown
Member

Summary

Caution

When merging, use merge commit

Test Plan

Docs

@changeset-bot

changeset-bot Bot commented Feb 28, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 9e3cad4

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 14 packages
Name Type
@biomejs/biome Minor
@biomejs/js-api Major
@biomejs/cli-win32-x64 Minor
@biomejs/cli-win32-arm64 Minor
@biomejs/cli-darwin-x64 Minor
@biomejs/cli-darwin-arm64 Minor
@biomejs/cli-linux-x64 Minor
@biomejs/cli-linux-arm64 Minor
@biomejs/cli-linux-x64-musl Minor
@biomejs/cli-linux-arm64-musl Minor
@biomejs/wasm-web Minor
@biomejs/wasm-bundler Minor
@biomejs/wasm-nodejs Minor
@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

@ematipico ematipico changed the title Next chore: next to main Feb 28, 2026
@github-actions github-actions Bot added A-CLI Area: CLI A-Project Area: project A-Linter Area: linter A-Parser Area: parser A-Formatter Area: formatter A-Tooling Area: internal tools L-JavaScript Language: JavaScript and super languages L-CSS Language: CSS and super languages L-JSON Language: JSON and super languages A-Diagnostic Area: diagnostocis L-HTML Language: HTML and super languages L-Grit Language: GritQL A-Resolver Area: resolver L-Tailwind Language: Tailwind CSS labels Feb 28, 2026
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>

Co-authored-by: Netail <11695769+Netail@users.noreply.github.com>
Co-authored-by: denbezrukov <6227442+denbezrukov@users.noreply.github.com>
@github-actions github-actions Bot added the A-Type-Inference Area: type inference label May 24, 2026
@ematipico ematipico marked this pull request as ready for review May 29, 2026 13:21
@coderabbitai

coderabbitai Bot commented May 29, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Adds CLI watch mode across check/lint/format with watcher abstractions and tests; introduces biome upgrade command with platform detection and diagnostics; implements concise reporter; extends analyzer to carry plugin-provided text edits; adds linter presets and validator; introduces delimiterSpacing formatter options (global/JS/JSON/CSS) and migrations; updates RuleSource/presets; adds ARIA event handler matcher; numerous HTML a11y rule changesets; config and VCS ignore refinements; new benchmark workflow; broad test suites and snapshots.

Possibly related PRs

  • biomejs/biome#9546 – Implements the same biome upgrade CLI feature and diagnostics.
  • biomejs/biome#9813 – Adds linter presets with RulePreset/PresetConfig wiring similar to this PR.
  • biomejs/biome#8731 – Introduces CLI --watch support and runner loop changes akin to this PR.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch next

@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: 9

Caution

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

⚠️ Outside diff range comments (2)
crates/biome_cli/src/commands/rage.rs (1)

244-246: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Use a neutral diagnostic label instead of “Error”.

At Line 244, the key is hardcoded to "Error", but this loop now prints warnings/info/hints too. This mislabels output in rage.

Suggested tweak
- {KeyValuePair::new("Error", markup!{
+ {KeyValuePair::new("Diagnostic", markup!{
      {format!{"{}", PrintDescription(&diagnostic)}}
  })}
🤖 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_cli/src/commands/rage.rs` around lines 244 - 246, Replace the
hardcoded "Error" label in the KeyValuePair creation with a neutral label (e.g.,
"Diagnostic" or the diagnostic's actual severity if available) so
warnings/info/hints are not misnamed; locate the KeyValuePair::new call that
wraps PrintDescription(&diagnostic) and change the first argument from "Error"
to a neutral string or to a value derived from the diagnostic (e.g.,
diagnostic.level() or diagnostic.severity()) so the output correctly reflects
the diagnostic type.
.claude/skills/lint-rule-development/SKILL.md (1)

280-286: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Close the invalid.js code block before the prose.

The fence opened at Line 280 is not closed before the explanatory text, so the section renders incorrectly.

🤖 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 @.claude/skills/lint-rule-development/SKILL.md around lines 280 - 286, The
markdown section opens a fenced code block for `valid.js` but never closes it,
causing subsequent prose (the `invalid.js` explanation) to render inside the
code block; close the fence by adding a terminating triple-backtick (```)
immediately after the `/* should not generate diagnostics */` example so the
following explanatory text and the `invalid.js` section render as normal prose
and separate code blocks.
🧹 Nitpick comments (14)
.changeset/dirty-lions-talk.md (2)

7-7: 💤 Low value

Optional: Minor style improvements.

The static analysis tool suggests:

  • Removing the comma before "if"
  • Using "can" instead of "is able to" on line 9

These are stylistic nitpicks rather than errors, but they would improve readability slightly.

🤖 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/dirty-lions-talk.md at line 7, Edit the sentence that begins
"When the cursor of the mouse is hovering an entity (variable, CSS class, type,
etc.), and the command CTRL + click is triggered...": remove the comma
immediately before "if" so it reads "...triggered if the language server can
find it." and replace the phrase "is able to" (on the same sentence/line) with
"can" to improve style and concision.

5-14: 💤 Low value

Consider condensing the description.

Whilst the information is valuable, the changeset exceeds the 1-3 sentence guideline with 7 sentences. Consider consolidating the list of resolvable entities or moving detailed capabilities to documentation. As per coding guidelines, changesets should be concise.

🤖 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/dirty-lions-talk.md around lines 5 - 14, Reduce the changeset
body to a 1–3 sentence summary stating that the Biome language server adds
"go-to definition" support, and consolidate the bullet list into one concise
sentence (e.g., "resolves variables, types, JSX components, CSS classes and
components across JS and HTML-ish files, including imports"). Move the detailed
per-file/feature examples currently in the bullets into documentation or a
linked release note, and replace the existing multi-bullet content in
.changeset/dirty-lions-talk.md with the condensed summary and (optionally) a
short "See docs for details" line.
crates/biome_cli/src/runner/impls/watchers/mod.rs (1)

2-2: 💤 Low value

Check mock module visibility: no external API expansion
crates/biome_cli/src/runner/impls/mod.rs declares pub(crate) mod watchers;, so crates/biome_cli/src/runner/impls/watchers/mod.rs’s pub mod mock; can’t be accessed from outside the crate; consumers already get MockWatcher via crates/biome_cli/src/lib.rs’s pub use ...watchers::mock::MockWatcher. Optional tidy-up: switch pub mod mock; to pub(crate) mod mock; for consistency.

🤖 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_cli/src/runner/impls/watchers/mod.rs` at line 2, The module
declaration "pub mod mock;" in impls::watchers is overly public because
impls::mod declares "pub(crate) mod watchers;" — change the declaration of the
mock module to "pub(crate) mod mock;" so its visibility matches the parent and
avoids expanding the crate's external API; locate the "pub mod mock;" line in
crates/biome_cli/src/runner/impls/watchers/mod.rs (the module that contains
MockWatcher) and update it accordingly, leaving existing re-exports (e.g., the
pub use of MockWatcher in crates/biome_cli/src/lib.rs) intact.
crates/biome_cli/src/runner/impls/watchers/mock.rs (2)

11-16: ⚡ Quick win

Add documentation for constructor.

The with_events constructor should explain its purpose.

📝 Proposed documentation
+    /// Creates a new mock watcher with a pre-configured sequence of events.
+    ///
+    /// Events are returned in order by successive calls to [`poll()`](Watcher::poll).
     pub fn with_events(events: Vec<WatcherEvent>) -> Self {
🤖 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_cli/src/runner/impls/watchers/mock.rs` around lines 11 - 16, Add
a doc comment for the constructor method with_events explaining its purpose:
document that MockWatcher::with_events takes an initial Vec<WatcherEvent> to
populate the internal events queue (VecDeque) for testing, that it returns a
MockWatcher with that queue and an empty watched list, and note the expected
semantics (events are consumed in FIFO order) and intended usage in tests; place
the comment immediately above the pub fn with_events(events: Vec<WatcherEvent>)
-> Self signature.

5-8: ⚡ Quick win

Add documentation for public struct.

The MockWatcher struct and its public watched field lack rustdoc. Even test utilities benefit from documentation explaining their purpose and usage.

📝 Proposed documentation
+/// A mock implementation of [`Watcher`] for testing.
+///
+/// Returns pre-configured events from an internal queue and records
+/// all paths passed to [`watch()`](Watcher::watch) for test assertions.
 pub struct MockWatcher {
     events: VecDeque<WatcherEvent>,
+    /// All paths that have been watched via [`watch()`](Watcher::watch).
     pub watched: Vec<Utf8PathBuf>,
 }
🤖 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_cli/src/runner/impls/watchers/mock.rs` around lines 5 - 8, Add
Rustdoc comments for the public test utility MockWatcher to explain its purpose
and usage: describe that MockWatcher is a simple in-memory watcher used in tests
to simulate file-system WatcherEvent sequences, mention that it stores queued
events in the private events: VecDeque<WatcherEvent>, and document the public
watched: Vec<Utf8PathBuf> field to explain it tracks paths that have been
registered/observed by the mock; include brief examples or notes about typical
usage (e.g., push events into events and inspect watched) so consumers
understand how to interact with MockWatcher, its invariants, and that it is
intended for testing only.
crates/biome_cli/src/runner/impls/commands/traversal.rs (1)

98-101: ⚡ Quick win

Add documentation for the new trait method.

The is_watch_mode method lacks rustdoc. Public trait methods should explain their purpose and return value.

📝 Proposed documentation
+    /// Returns whether this command should run in watch mode.
+    /// Defaults to `false` for commands that don't support watching.
     fn is_watch_mode(&self) -> bool {
         false
     }
🤖 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_cli/src/runner/impls/commands/traversal.rs` around lines 98 -
101, The new trait method is missing rustdoc: add a short doc comment above the
is_watch_mode method on the CommandRunner implementation (and ideally the trait
declaration) describing its purpose (indicates whether the runner is in watch
mode), the meaning of the boolean return (true when watching for
changes/re-running, false otherwise), and any relevant behavior or expectations
for callers; reference the is_watch_mode method and CommandRunner trait so
readers can locate and update both the implementation and the trait definition.
.changeset/new-bikes-buy.md (1)

7-15: ⚡ Quick win

Consider showing the sorted result as well.

For assist actions, showing both the invalid and valid (transformed) examples helps users understand the transformation more clearly.

📝 Suggested addition

After the invalid example, add:

**Valid**:

```graphql
query {
  age
  id
  name
}

</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

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/new-bikes-buy.md around lines 7 - 15, Add a "Valid" transformed
example immediately after the existing "Invalid" GraphQL snippet showing the
sorted fields; specifically insert a "Valid:" block demonstrating the
corrected query with fields ordered (age, id, name) so readers can see both the
original invalid example and the transformed valid result.


</details>

</blockquote></details>
<details>
<summary>.changeset/shiny-parts-make.md (1)</summary><blockquote>

`7-9`: _⚡ Quick win_

**Consider labelling the example as "Invalid" for clarity.**

Following the pattern in other changesets, explicitly marking the example as invalid helps readers quickly understand what the rule catches.




<details>
<summary>📝 Suggested revision</summary>

```diff
+**Invalid**:
+
 ```html
 <label></label>

</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

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/shiny-parts-make.md around lines 7 - 9, Update the changeset
example that currently shows the HTML snippet "" to explicitly
mark it as an invalid example: follow the other changesets' pattern by adding an
"Invalid" label or heading immediately above the fenced code block and ensure
the block is annotated as html (e.g., a fenced code block starting with ```html)
so readers can quickly see that the "" snippet is an invalid
case.


</details>

</blockquote></details>
<details>
<summary>crates/biome_aria_metadata/src/lib.rs (1)</summary><blockquote>

`140-140`: _💤 Low value_

**Grammar nit: "two identifier" should be "two identifiers".**

The sentence reads "separate two identifier in a list" but should use the plural form after "two".




<details>
<summary>📝 Suggested fix</summary>

```diff
-/// Whitespaces are used to separate two identifier in a list of identifiers.
+/// Whitespaces are used to separate two identifiers in a list of identifiers.
```
</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
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_aria_metadata/src/lib.rs` at line 140, Update the grammar in the
documentation sentence that currently reads "Whitespaces are used to separate
two identifier in a list of identifiers." — change "two identifier" to "two
identifiers" so the sentence becomes grammatically correct; locate the
doc/comment containing the exact phrase "Whitespaces are used to separate two
identifier in a list of identifiers." and replace the pluralization accordingly.
```

</details>

</blockquote></details>
<details>
<summary>crates/biome_cli/src/runner/diagnostics.rs (1)</summary><blockquote>

`152-152`: _⚡ Quick win_

**Consider making `WatcherDiagnostic` `pub(crate)` for consistency**

`WatcherDiagnostic` is `pub`, but `crates/biome_cli` exposes `runner` as `pub(crate)` in `crates/biome_cli/src/lib.rs`, and there are no usages of `WatcherDiagnostic` outside `crates/biome_cli`. If it’s meant to stay internal-only (like the other diagnostics in this file), switch it to `pub(crate)`.

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
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_cli/src/runner/diagnostics.rs` at line 152, WatcherDiagnostic is
declared pub but appears intended for crate-internal use; change its visibility
to pub(crate) by updating the struct declaration for WatcherDiagnostic to use
pub(crate) instead of pub so it matches the other internal diagnostics and the
runner module's pub(crate) exposure (locate the WatcherDiagnostic struct in
diagnostics.rs and adjust its visibility).
```

</details>

</blockquote></details>
<details>
<summary>crates/biome_configuration/src/css.rs (1)</summary><blockquote>

`126-136`: _⚡ Quick win_

**Add a default assertion for the new formatter option.**

`default_css()` doesn’t currently check `delimiter_spacing`; one assertion will keep this default from drifting silently.

 

<details>
<summary>Suggested patch</summary>

```diff
 #[test]
 fn default_css() {
     let css_configuration = CssFormatterConfiguration::default();

     assert!(css_configuration.is_enabled());
     assert_eq!(css_configuration.indent_style, None);
     assert_eq!(css_configuration.indent_width, None);
     assert_eq!(css_configuration.line_ending, None);
     assert_eq!(css_configuration.line_width, None);
     assert_eq!(css_configuration.quote_style, None);
+    assert_eq!(css_configuration.delimiter_spacing, None);
 }
```
</details>


Also applies to: 211-221

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
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_configuration/src/css.rs` around lines 126 - 136, Add an
assertion in the default_css() test to verify the new formatter option
delimiter_spacing has the expected default (e.g., None or a specific
DelimiterSpacing variant) so it cannot drift silently; update the existing
assertions block that checks other defaults in default_css() to include a check
against the delimiter_spacing field (referencing delimiter_spacing and
DelimiterSpacing) and ensure the test fails if the default changes.
```

</details>

</blockquote></details>
<details>
<summary>crates/biome_analyze/src/context.rs (1)</summary><blockquote>

`191-193`: _⚡ Quick win_

**Add rustdoc for the new public accessor.**

Line 191 introduces a public API (`working_directory`) without documentation. Please add a short rustdoc comment for expected semantics and `None` cases.


As per coding guidelines, "Include rustdoc documentation for new features, rules, assists, and their options".

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
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_analyze/src/context.rs` around lines 191 - 193, Add a rustdoc
comment to the public accessor working_directory explaining what it returns and
when it can be None; specifically note that working_directory() returns an
Option<&Utf8Path> referencing the configured working directory for the context
and that it yields None when no working directory has been set (e.g., default or
unset contexts), and mention whether the returned reference is borrowed from
self and should not be mutated.
```

</details>

</blockquote></details>
<details>
<summary>crates/biome_cli/src/runner/crawler.rs (1)</summary><blockquote>

`20-23`: _⚡ Quick win_

**Document `CrawlPath` with rustdoc.**

Line 20 adds a new public enum; please add brief rustdoc describing when callers should use `String` vs `Path`.


As per coding guidelines, "Include rustdoc documentation for new features, rules, assists, and their options".

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
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_cli/src/runner/crawler.rs` around lines 20 - 23, Add a rustdoc
comment for the public enum CrawlPath explaining its purpose and when to choose
each variant: document that CrawlPath::String holds a raw string representation
(useful for inputs that come from user input or unparsed sources) while
CrawlPath::Path holds a Utf8PathBuf (useful when you already have a validated
UTF-8 filesystem path and need path operations), and include any invariants or
expectations callers must meet when constructing or matching on CrawlPath in the
enum declaration near CrawlPath and its variants.
```

</details>

</blockquote></details>
<details>
<summary>.changeset/dull-shirts-hunt.md (1)</summary><blockquote>

`5-5`: _⚡ Quick win_

**Use the canonical rule-link format.**

Please format the rule URL as `https://biomejs.dev/linter/rules/no-undeclared-dependencies/` to match changeset conventions.


As per coding guidelines, "When referencing rules in changesets, include a link to the rule on the website using the format `[ruleNameHere](https://biomejs.dev/linter/rules/rule-name-here/)`".

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
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/dull-shirts-hunt.md at line 5, Update the rule link in the
changeset to use the canonical URL format: replace the current link text
referencing NoUndeclaredDependencies with the markdown link
`[NoUndeclaredDependencies](https://biomejs.dev/linter/rules/no-undeclared-dependencies/)`
so it matches the required changeset convention and includes the trailing slash.
```

</details>

</blockquote></details>

</blockquote></details>

<details>
<summary>🤖 Prompt for all review comments with AI agents</summary>

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/add-concise-reporter.md:

  • Line 5: The sentence describing the new concise reporter ("Added a new
    reporter called concise. When --reporter=concise is passed the commands
    format, lint, check and ci, the diagnostics are printed in a compact
    manner:") is missing a terminal full stop — update that sentence in the
    changeset so it ends with a period (.) to comply with the changeset sentence
    punctuation rule.

In @.changeset/crazy-beds-enter.md:

  • Line 7: Change the trailing colon at the end of the sentence "With the option
    enabled, the following example is considered valid and is ignored by the rule:"
    to a full stop so it reads "...rule." — edit that sentence in
    .changeset/crazy-beds-enter.md (the quoted sentence) to end with a period
    instead of a colon.

In @.changeset/html-no-noninteractive-tab-index.md:

  • Line 8: The code example contains an extraneous trailing backtick after the
    HTML element (<div tabindex="0">Invalid: non-interactive element</div>), which
    breaks the markdown code block; remove the trailing backtick so the example is
    exactly <div tabindex="0">Invalid: non-interactive element</div> and ensure
    the surrounding markdown fence remains valid.

In @.changeset/stale-oranges-run.md:

  • Around line 5-70: The changeset is too long and reads like full docs; trim the
    .changeset entry to a concise 1–3 sentence user-facing release note that
    mentions the new formatter option delimiterSpacing (default: false) and what it
    does at a high level, and move the detailed examples and per-language behavior
    into the PR discussion or project docs.

In @.changeset/wicked-lions-brake.md:

  • Line 5: Fix the grammar and punctuation in the changeset description: update
    the phrase "disallows use event handlers" to either "disallows using event
    handlers" or "disallows the use of event handlers" and add a trailing full stop;
    the sentence referencing the rule noNoninteractiveElementInteractions should
    read, for example, "Added the HTML lint rule
    noNoninteractiveElementInteractions, which disallows using event handlers on
    non-interactive elements."

In @crates/biome_analyze/src/shared/sort_attributes.rs:

  • Around line 5-46: Add rustdoc for the public SortableAttribute trait and
    AttributeGroup struct explaining their intent and usage: document that
    SortableAttribute represents an AST attribute that can provide an optional name
    via name(), expose its AST node via node(), and must implement
    replace_token(self, prev_token, next_token) -> Option with clear
    expectations (when to return Some(updated_self) vs None, token identity
    semantics, and that implementations should preserve other node data); also
    describe the behavior of provided comparison helpers ascii_nat_cmp and
    lexicographic_cmp (how None names are ordered), and document AttributeGroup
    as a container for sortable attrs and how sorting should be performed/used.
    Reference the trait and methods: SortableAttribute, name, node, replace_token,
    ascii_nat_cmp, lexicographic_cmp, and the struct AttributeGroup in the doc
    comments.
  • Around line 93-101: The code currently calls unwrap() on
    sorted_attr.node().syntax().last_token() which can panic on malformed
    attributes; change this to handle the None case gracefully (e.g., replace
    unwrap() with an if let Some(old_last_token) =
    sorted_attr.node().syntax().last_token() { ... } else { return None }), then
    proceed to call with_trailing_trivia and replace_token only inside that branch
    so sorted_attr, old_last_token, with_trailing_trivia, and replace_token are only
    used when a token exists.

In @crates/biome_cli/src/commands/format.rs:

  • Around line 240-260: In check_incompatible_arguments (the function that
    validates --watch with other flags) update the error messages that call
    CliDiagnostic::incompatible_arguments for "--watch" vs "--fix" and "--watch" vs
    "--write" so they refer to formatting changes rather than "code fixes" (e.g.,
    "Applying formatting changes is not available in watch mode."). Keep the same
    function and flags (--watch, --fix, --write,
    CliDiagnostic::incompatible_arguments) but replace the message text to
    accurately describe the format command behavior.

In @crates/biome_cli/src/commands/mod.rs:

  • Around line 352-354: Update the help text for the watch flag in the lint and
    format command structs: locate the watch field declarations (the lines with
    #[bpaf(long("watch"), switch)] watch: bool) in both the lint command and the
    format command (the second occurrence noted around the other block) and change
    the description from “re-run the check automatically when any non-excluded file
    in the workspace has changed” to a command-specific message—e.g., for the lint
    command use “re-run the lint automatically when any non-excluded file in the
    workspace has changed” and for the format command use “re-run the formatter
    automatically when any non-excluded file in the workspace has changed.” Ensure
    both occurrences are updated.

Outside diff comments:
In @.claude/skills/lint-rule-development/SKILL.md:

  • Around line 280-286: The markdown section opens a fenced code block for
    valid.js but never closes it, causing subsequent prose (the invalid.js
    explanation) to render inside the code block; close the fence by adding a
    terminating triple-backtick (```) immediately after the /* should not generate diagnostics */ example so the following explanatory text and the `invalid.js`
    section render as normal prose and separate code blocks.

In @crates/biome_cli/src/commands/rage.rs:

  • Around line 244-246: Replace the hardcoded "Error" label in the KeyValuePair
    creation with a neutral label (e.g., "Diagnostic" or the diagnostic's actual
    severity if available) so warnings/info/hints are not misnamed; locate the
    KeyValuePair::new call that wraps PrintDescription(&diagnostic) and change the
    first argument from "Error" to a neutral string or to a value derived from the
    diagnostic (e.g., diagnostic.level() or diagnostic.severity()) so the output
    correctly reflects the diagnostic type.

Nitpick comments:
In @.changeset/dirty-lions-talk.md:

  • Line 7: Edit the sentence that begins "When the cursor of the mouse is
    hovering an entity (variable, CSS class, type, etc.), and the command CTRL +
    click is triggered...": remove the comma immediately before "if" so it reads
    "...triggered if the language server can find it." and replace the phrase "is
    able to" (on the same sentence/line) with "can" to improve style and concision.
  • Around line 5-14: Reduce the changeset body to a 1–3 sentence summary stating
    that the Biome language server adds "go-to definition" support, and consolidate
    the bullet list into one concise sentence (e.g., "resolves variables, types, JSX
    components, CSS classes and components across JS and HTML-ish files, including
    imports"). Move the detailed per-file/feature examples currently in the bullets
    into documentation or a linked release note, and replace the existing
    multi-bullet content in .changeset/dirty-lions-talk.md with the condensed
    summary and (optionally) a short "See docs for details" line.

In @.changeset/dull-shirts-hunt.md:

  • Line 5: Update the rule link in the changeset to use the canonical URL format:
    replace the current link text referencing NoUndeclaredDependencies with the
    markdown link
    [NoUndeclaredDependencies](https://biomejs.dev/linter/rules/no-undeclared-dependencies/)
    so it matches the required changeset convention and includes the trailing slash.

In @.changeset/new-bikes-buy.md:

  • Around line 7-15: Add a "Valid" transformed example immediately after the
    existing "Invalid" GraphQL snippet showing the sorted fields; specifically
    insert a "Valid:" block demonstrating the corrected query with fields
    ordered (age, id, name) so readers can see both the original invalid example and
    the transformed valid result.

In @.changeset/shiny-parts-make.md:

  • Around line 7-9: Update the changeset example that currently shows the HTML
    snippet "" to explicitly mark it as an invalid example: follow
    the other changesets' pattern by adding an "Invalid" label or heading
    immediately above the fenced code block and ensure the block is annotated as
    html (e.g., a fenced code block starting with ```html) so readers can quickly
    see that the "" snippet is an invalid case.

In @crates/biome_analyze/src/context.rs:

  • Around line 191-193: Add a rustdoc comment to the public accessor
    working_directory explaining what it returns and when it can be None;
    specifically note that working_directory() returns an Option<&Utf8Path>
    referencing the configured working directory for the context and that it yields
    None when no working directory has been set (e.g., default or unset contexts),
    and mention whether the returned reference is borrowed from self and should not
    be mutated.

In @crates/biome_aria_metadata/src/lib.rs:

  • Line 140: Update the grammar in the documentation sentence that currently
    reads "Whitespaces are used to separate two identifier in a list of
    identifiers." — change "two identifier" to "two identifiers" so the sentence
    becomes grammatically correct; locate the doc/comment containing the exact
    phrase "Whitespaces are used to separate two identifier in a list of
    identifiers." and replace the pluralization accordingly.

In @crates/biome_cli/src/runner/crawler.rs:

  • Around line 20-23: Add a rustdoc comment for the public enum CrawlPath
    explaining its purpose and when to choose each variant: document that
    CrawlPath::String holds a raw string representation (useful for inputs that come
    from user input or unparsed sources) while CrawlPath::Path holds a Utf8PathBuf
    (useful when you already have a validated UTF-8 filesystem path and need path
    operations), and include any invariants or expectations callers must meet when
    constructing or matching on CrawlPath in the enum declaration near CrawlPath and
    its variants.

In @crates/biome_cli/src/runner/diagnostics.rs:

  • Line 152: WatcherDiagnostic is declared pub but appears intended for
    crate-internal use; change its visibility to pub(crate) by updating the struct
    declaration for WatcherDiagnostic to use pub(crate) instead of pub so it matches
    the other internal diagnostics and the runner module's pub(crate) exposure
    (locate the WatcherDiagnostic struct in diagnostics.rs and adjust its
    visibility).

In @crates/biome_cli/src/runner/impls/commands/traversal.rs:

  • Around line 98-101: The new trait method is missing rustdoc: add a short doc
    comment above the is_watch_mode method on the CommandRunner implementation (and
    ideally the trait declaration) describing its purpose (indicates whether the
    runner is in watch mode), the meaning of the boolean return (true when watching
    for changes/re-running, false otherwise), and any relevant behavior or
    expectations for callers; reference the is_watch_mode method and CommandRunner
    trait so readers can locate and update both the implementation and the trait
    definition.

In @crates/biome_cli/src/runner/impls/watchers/mock.rs:

  • Around line 11-16: Add a doc comment for the constructor method with_events
    explaining its purpose: document that MockWatcher::with_events takes an initial
    Vec to populate the internal events queue (VecDeque) for testing,
    that it returns a MockWatcher with that queue and an empty watched list, and
    note the expected semantics (events are consumed in FIFO order) and intended
    usage in tests; place the comment immediately above the pub fn
    with_events(events: Vec) -> Self signature.
  • Around line 5-8: Add Rustdoc comments for the public test utility MockWatcher
    to explain its purpose and usage: describe that MockWatcher is a simple
    in-memory watcher used in tests to simulate file-system WatcherEvent sequences,
    mention that it stores queued events in the private events:
    VecDeque, and document the public watched: Vec field
    to explain it tracks paths that have been registered/observed by the mock;
    include brief examples or notes about typical usage (e.g., push events into
    events and inspect watched) so consumers understand how to interact with
    MockWatcher, its invariants, and that it is intended for testing only.

In @crates/biome_cli/src/runner/impls/watchers/mod.rs:

  • Line 2: The module declaration "pub mod mock;" in impls::watchers is overly
    public because impls::mod declares "pub(crate) mod watchers;" — change the
    declaration of the mock module to "pub(crate) mod mock;" so its visibility
    matches the parent and avoids expanding the crate's external API; locate the
    "pub mod mock;" line in crates/biome_cli/src/runner/impls/watchers/mod.rs (the
    module that contains MockWatcher) and update it accordingly, leaving existing
    re-exports (e.g., the pub use of MockWatcher in crates/biome_cli/src/lib.rs)
    intact.

In @crates/biome_configuration/src/css.rs:

  • Around line 126-136: Add an assertion in the default_css() test to verify the
    new formatter option delimiter_spacing has the expected default (e.g., None or a
    specific DelimiterSpacing variant) so it cannot drift silently; update the
    existing assertions block that checks other defaults in default_css() to include
    a check against the delimiter_spacing field (referencing delimiter_spacing and
    DelimiterSpacing) and ensure the test fails if the default changes.

</details>

<details>
<summary>🪄 Autofix (Beta)</summary>

Fix all unresolved CodeRabbit comments on this PR:

- [ ] <!-- {"checkboxId": "4b0d0e0a-96d7-4f10-b296-3a18ea78f0b9"} --> Push a commit to this branch (recommended)
- [ ] <!-- {"checkboxId": "ff5b1114-7d8c-49e6-8ac1-43f82af23a33"} --> Create a new PR with the fixes

</details>

---

<details>
<summary>ℹ️ Review info</summary>

<details>
<summary>⚙️ Run configuration</summary>

**Configuration used**: Path: .coderabbit.yaml

**Review profile**: CHILL

**Plan**: Pro

**Run ID**: `7c174835-9f9f-4e1f-b567-b660e31efd11`

</details>

<details>
<summary>📥 Commits</summary>

Reviewing files that changed from the base of the PR and between 24e51d6edebaee0ffb938bc20633d9c3403110c9 and 977d7c92d85f6532da8858fca57d47ed52a77e6f.

</details>

<details>
<summary>⛔ Files ignored due to path filters (161)</summary>

* `Cargo.lock` is excluded by `!**/*.lock` and included by `**`
* `crates/biome_cli/src/execute/migrate/eslint_any_rule_to_biome.rs` is excluded by `!**/migrate/eslint_any_rule_to_biome.rs` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_css_parsing/check_combined_css_parser_flags.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_css_parsing/check_css_parse_css_modules_false.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_css_parsing/check_css_parse_css_modules_true.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_css_parsing/check_css_parse_respects_config_css_modules.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_css_parsing/check_css_parse_respects_config_tailwind_directives.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_css_parsing/check_css_parse_tailwind_directives_false.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_css_parsing/check_css_parse_tailwind_directives_true.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_css_parsing/check_css_parser_flags_override_config.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_css_parsing/ci_combined_css_parser_flags.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_css_parsing/ci_css_parse_css_modules_false.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_css_parsing/ci_css_parse_css_modules_true.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_css_parsing/ci_css_parse_tailwind_directives_false.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_css_parsing/ci_css_parse_tailwind_directives_true.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_css_parsing/format_css_parse_css_modules_true.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_css_parsing/format_css_parse_tailwind_directives_true.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_css_parsing/lint_css_parse_css_modules_true.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_diagnostics/reads_pnpm_workspace_catalog.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_handle_css_files/no_undeclared_classes_shows_checked_import_chain.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_handle_css_files/no_unused_classes_component_hierarchy_child_imports_css.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_handle_css_files/no_unused_classes_component_hierarchy_nested_three_levels.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_handle_css_files/no_unused_classes_component_hierarchy_parent_imports_css.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_handle_css_files/no_unused_classes_dynamic_classname_not_collected.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_handle_css_files/no_unused_classes_global_pseudo_class_is_exempt.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_handle_css_files/no_unused_classes_mixed_html_jsx_consumers.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_handle_css_files/no_unused_classes_referenced_class_not_flagged.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_handle_css_files/no_unused_classes_selector_patterns_all_referenced.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_handle_css_files/no_unused_classes_selector_patterns_partial_reference.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_handle_css_files/no_unused_classes_transitive_css_import.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_handle_css_files/no_unused_classes_unreferenced_class_flagged.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_help/check_help.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_help/ci_help.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_help/format_help.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_help/lint_help.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_help/migrate_help.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_help/rage_help.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_help/upgrade_help.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_html/should_error_when_vue_is_disabled.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_html/should_handle_svg_file.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_html/should_not_error_when_vue_is_enabled.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_migrate_v2/should_migrate_aws_config.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_migrate_v2/should_migrate_nested_config.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_migrate_v2/should_successfully_migrate_ariakit.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_migrate_v2/should_successfully_migrate_knip.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_migrate_v2/should_successfully_migrate_sentry.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_overrides_formatter/does_include_file_with_different_languages.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_overrides_linter/does_override_recommended.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_preset/customising_one_group_still_enables_recommended.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_preset/empty_rules_object_still_enables_recommended.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_preset/group_preset_all_with_rule_off.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_preset/group_preset_none_disables_group_rules.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_preset/group_preset_none_with_rule_enabled.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_preset/group_preset_recommended_enables_group_rules.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_preset/nursery_preset_all_does_not_enable_rules.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_preset/nursery_rule_enabled_individually.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_preset/preset_all_does_not_enable_nursery_rules.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_preset/preset_all_enables_all_rules.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_preset/preset_none_disables_all_rules.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_preset/preset_none_with_group_preset_all.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_preset/preset_recommended_does_not_enable_nursery_rules.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_preset/preset_recommended_enables_recommended_rules.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_preset/preset_recommended_same_as_recommended_true.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_preset/recommended_true_does_not_enable_nursery_rules.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_reporter_concise/reports_diagnostics_concise_check_command.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_reporter_concise/reports_diagnostics_concise_ci_command.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_reporter_concise/reports_diagnostics_concise_format_command.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_reporter_concise/reports_diagnostics_concise_lint_command.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_reporter_summary/reports_diagnostics_summary_check_command.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_reporter_summary/reports_diagnostics_summary_check_verbose_command.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_reporter_summary/reports_diagnostics_summary_check_verbose_command_destination.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_reporter_summary/reports_diagnostics_summary_ci_command.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_reporter_summary/reports_diagnostics_summary_format_command.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_reporter_summary/reports_diagnostics_summary_lint_command.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_reporter_terminal/reports_diagnostics_check_command_verbose.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_reporter_terminal/reports_diagnostics_check_write_command_file.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_reporter_terminal/reports_diagnostics_check_write_command_verbose.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_rules_via_dependencies/doesnt_enable_rules_when_recommended_is_false.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_vcs_ignored_files/ignore_git_common_info_exclude.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_cases_vcs_ignored_files/ignore_git_info_exclude.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_check/check_plugin_apply_rewrite.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_check/check_plugin_apply_rewrite_css.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_check/check_plugin_apply_rewrite_json.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_check/check_plugin_invalid_fix_kind.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_check/check_plugin_invalid_severity.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_check/check_plugin_multiple_rewrites.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_check/check_plugin_rewrite_no_write.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_check/check_plugin_rewrite_write_without_unsafe.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_check/check_plugin_safe_fix_no_write.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_check/check_plugin_safe_fix_write.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_check/check_plugin_suppressions.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_check/check_returns_error_for_css_sorting.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_format/applies_global_delimiter_spacing.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_format/language_overrides_global_delimiter_spacing.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_format/should_apply_different_formatting.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_format/should_apply_different_formatting_with_cli.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_format/should_not_format_css_files_if_disabled.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_format/trailing_newline_css_via_cli.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_format/trailing_newline_css_via_config.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_init/creates_config_file.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_init/creates_config_file_when_biome_installed_via_package_manager.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_init/creates_config_jsonc_file.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_init/enables_vcs_and_ignore_dist.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_lint/linter_shows_the_default_severity_of_rule_on.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_lint/should_not_choke_on_recursive_function_call.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_eslint_config_packagejson.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_eslintignore.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_eslintignore_and_ignore_patterns.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_eslintignore_negated_patterns.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_eslintrc.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_eslintrcjson.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_eslintrcjson_class_methods_use_this_options.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_eslintrcjson_empty.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_eslintrcjson_exclude_inspired.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_eslintrcjson_extended_rules.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_eslintrcjson_fix.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_eslintrcjson_include_inspired.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_eslintrcjson_nursery_rule_options.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_eslintrcjson_override_existing_config.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_eslintrcjson_rule_options.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_eslintrcjson_write.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_jest_consistent_test_it_no_options.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_jest_consistent_test_it_with_options.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_merge_with_overrides.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_rules_covered_by_formatter.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_migrate_eslint/migrate_vitest_consistent_test_it_with_options.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_rage/rage_ok.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_rage/with_configuration.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_rage/with_formatter_configuration.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_rage/with_jsonc_configuration.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_rage/with_linter_configuration.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_rage/with_linter_domain_configuration.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_rage/with_malformed_configuration.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_rage/with_no_configuration.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_search/search_css_pattern.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_search/search_css_pattern_shorthand.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_search/search_css_pattern_skips_js_files.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_commands_search/search_js_pattern_skips_css_files.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/snapshots/main_configuration/incorrect_rule_name.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/specs/migrate_eslint/jestConsistentTestIt/defaults.jsonc.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/specs/migrate_eslint/jestConsistentTestIt/withOptions.jsonc.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/specs/migrate_eslint/jsxA11yAriaRole/basic.jsonc.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/specs/migrate_eslint/maxNestedCallbacks/deprecated_maximum.jsonc.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/specs/migrate_eslint/maxNestedCallbacks/numeric_option.jsonc.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/specs/migrate_eslint/maxNestedCallbacks/severity_only.jsonc.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/specs/migrate_eslint/noRestrictedGlobals/basic.jsonc.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/specs/migrate_eslint/typescriptArrayType/generic.jsonc.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/specs/migrate_eslint/typescriptConsistentTypeImports/inlineTypeImports.jsonc.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/specs/migrate_eslint/typescriptExplicitFunctionReturnType/basic.jsonc.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/specs/migrate_eslint/typescriptExplicitMemberAccessibility/explicit.jsonc.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/specs/migrate_eslint/typescriptNamingConvention/basic.jsonc.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/specs/migrate_eslint/typescriptNoShadow/severity_only.jsonc.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/specs/migrate_eslint/typescriptNoShadow/with_options.jsonc.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/specs/migrate_eslint/unicornFilenameCase/basic.jsonc.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_cli/tests/specs/migrate_eslint/vitestConsistentTestIt/withOptions.jsonc.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_configuration/src/analyzer/linter/rules.rs` is excluded by `!**/rules.rs` and included by `**`
* `crates/biome_configuration/src/generated/domain_selector.rs` is excluded by `!**/generated/**`, `!**/generated/**` and included by `**`
* `crates/biome_configuration/src/generated/linter_options_check.rs` is excluded by `!**/generated/**`, `!**/generated/**` and included by `**`
* `crates/biome_configuration/tests/invalid/formatter_extraneous_field.json.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_configuration/tests/invalid/formatter_quote_style.json.snap` is excluded by `!**/*.snap` and included by `**`
* `crates/biome_configuration/tests/invalid/preset.json.snap` is excluded by `!**/*.snap` and included by `**`

</details>

<details>
<summary>📒 Files selected for processing (139)</summary>

* `.changeset/add-concise-reporter.md`
* `.changeset/add-html-use-key-with-click-events.md`
* `.changeset/add-no-undeclared-styles.md`
* `.changeset/add-no-unused-styles.md`
* `.changeset/add-span-conversion-helper.md`
* `.changeset/add-upgrade-command.md`
* `.changeset/add-use-heading-content-html.md`
* `.changeset/add-use-key-with-mouse-events-html.md`
* `.changeset/afraid-humans-worry.md`
* `.changeset/cold-pianos-try.md`
* `.changeset/common-fans-prove.md`
* `.changeset/common-toes-trade.md`
* `.changeset/cool-rice-change.md`
* `.changeset/crazy-beds-enter.md`
* `.changeset/dirty-lions-talk.md`
* `.changeset/dry-crews-shake.md`
* `.changeset/dull-shirts-hunt.md`
* `.changeset/eleven-baths-wave.md`
* `.changeset/expose-html-parser-vue-option.md`
* `.changeset/fixable-gritql-plugins.md`
* `.changeset/flat-beers-battle.md`
* `.changeset/free-news-exist.md`
* `.changeset/fresh-otters-peel.md`
* `.changeset/funny-frogs-film.md`
* `.changeset/gentle-stars-do.md`
* `.changeset/html-no-aria-unsupported-elements.md`
* `.changeset/html-no-noninteractive-tab-index.md`
* `.changeset/html-no-redundant-roles.md`
* `.changeset/huge-walls-float.md`
* `.changeset/major-bats-fail.md`
* `.changeset/nasty-cities-check.md`
* `.changeset/neat-signs-crash.md`
* `.changeset/new-bikes-buy.md`
* `.changeset/organize-imports-bare-matcher.md`
* `.changeset/plugin-file-scoping.md`
* `.changeset/port-aria-activedescendant-html.md`
* `.changeset/port-no-aria-hidden-on-focusable-html.md`
* `.changeset/port-use-semantic-elements-html.md`
* `.changeset/port-use-valid-aria-props-html.md`
* `.changeset/port-use-valid-aria-values-html.md`
* `.changeset/respect-git-info-exclude.md`
* `.changeset/shaggy-grapes-act.md`
* `.changeset/shiny-parts-make.md`
* `.changeset/some-dancers-lick.md`
* `.changeset/stale-oranges-run.md`
* `.changeset/use-numeric-separators-options.md`
* `.changeset/vast-islands-clap.md`
* `.changeset/wicked-lions-brake.md`
* `.changeset/wise-beds-grow.md`
* `.changeset/young-snails-melt.md`
* `.claude/skills/README.md`
* `.claude/skills/biome-developer/SKILL.md`
* `.claude/skills/diagnostics-development/SKILL.md`
* `.claude/skills/formatter-development/SKILL.md`
* `.claude/skills/lint-rule-development/SKILL.md`
* `.claude/skills/parser-development/SKILL.md`
* `.claude/skills/prettier-compare/SKILL.md`
* `.claude/skills/testing-codegen/SKILL.md`
* `.claude/skills/type-inference/SKILL.md`
* `.github/workflows/benchmark_markdown.yml`
* `Cargo.toml`
* `crates/biome_analyze/Cargo.toml`
* `crates/biome_analyze/src/analyzer_plugin.rs`
* `crates/biome_analyze/src/context.rs`
* `crates/biome_analyze/src/lib.rs`
* `crates/biome_analyze/src/options.rs`
* `crates/biome_analyze/src/registry.rs`
* `crates/biome_analyze/src/rule.rs`
* `crates/biome_analyze/src/shared/mod.rs`
* `crates/biome_analyze/src/shared/sort_attributes.rs`
* `crates/biome_analyze/src/signals.rs`
* `crates/biome_aria/Cargo.toml`
* `crates/biome_aria/src/event_handlers.rs`
* `crates/biome_aria/src/lib.rs`
* `crates/biome_aria_metadata/src/lib.rs`
* `crates/biome_cli/Cargo.toml`
* `crates/biome_cli/src/cli_options.rs`
* `crates/biome_cli/src/commands/check.rs`
* `crates/biome_cli/src/commands/format.rs`
* `crates/biome_cli/src/commands/init.rs`
* `crates/biome_cli/src/commands/lint.rs`
* `crates/biome_cli/src/commands/mod.rs`
* `crates/biome_cli/src/commands/rage.rs`
* `crates/biome_cli/src/commands/upgrade.rs`
* `crates/biome_cli/src/diagnostics.rs`
* `crates/biome_cli/src/execute/migrate.rs`
* `crates/biome_cli/src/execute/migrate/eslint_eslint.rs`
* `crates/biome_cli/src/execute/migrate/eslint_to_biome.rs`
* `crates/biome_cli/src/execute/migrate/eslint_unicorn.rs`
* `crates/biome_cli/src/execute/migrate/prettier.rs`
* `crates/biome_cli/src/execute/migrate/unsupported_rules.rs`
* `crates/biome_cli/src/lib.rs`
* `crates/biome_cli/src/reporter/terminal.rs`
* `crates/biome_cli/src/runner/crawler.rs`
* `crates/biome_cli/src/runner/diagnostics.rs`
* `crates/biome_cli/src/runner/impls/commands/custom_execution.rs`
* `crates/biome_cli/src/runner/impls/commands/traversal.rs`
* `crates/biome_cli/src/runner/impls/finalizers/default.rs`
* `crates/biome_cli/src/runner/impls/mod.rs`
* `crates/biome_cli/src/runner/impls/process_file/format.rs`
* `crates/biome_cli/src/runner/impls/process_file/lint_and_assist.rs`
* `crates/biome_cli/src/runner/impls/watchers/default.rs`
* `crates/biome_cli/src/runner/impls/watchers/mock.rs`
* `crates/biome_cli/src/runner/impls/watchers/mod.rs`
* `crates/biome_cli/src/runner/mod.rs`
* `crates/biome_cli/src/runner/process_file.rs`
* `crates/biome_cli/src/runner/watcher.rs`
* `crates/biome_cli/tests/cases/diagnostics.rs`
* `crates/biome_cli/tests/cases/handle_css_files.rs`
* `crates/biome_cli/tests/cases/help.rs`
* `crates/biome_cli/tests/cases/html.rs`
* `crates/biome_cli/tests/cases/mod.rs`
* `crates/biome_cli/tests/cases/preset.rs`
* `crates/biome_cli/tests/cases/reporter_concise.rs`
* `crates/biome_cli/tests/cases/vcs_ignored_files.rs`
* `crates/biome_cli/tests/cases/watcher.rs`
* `crates/biome_cli/tests/commands/check.rs`
* `crates/biome_cli/tests/commands/format.rs`
* `crates/biome_cli/tests/main.rs`
* `crates/biome_cli/tests/snap_test.rs`
* `crates/biome_configuration/Cargo.toml`
* `crates/biome_configuration/src/analyzer/assist/actions.rs`
* `crates/biome_configuration/src/analyzer/linter/mod.rs`
* `crates/biome_configuration/src/analyzer/mod.rs`
* `crates/biome_configuration/src/analyzer/presets.rs`
* `crates/biome_configuration/src/css.rs`
* `crates/biome_configuration/src/formatter.rs`
* `crates/biome_configuration/src/html.rs`
* `crates/biome_configuration/src/javascript/formatter.rs`
* `crates/biome_configuration/src/javascript/mod.rs`
* `crates/biome_configuration/src/json.rs`
* `crates/biome_configuration/src/lib.rs`
* `crates/biome_configuration/src/overrides.rs`
* `crates/biome_configuration/src/vcs.rs`
* `crates/biome_configuration/tests/invalid/preset.json`
* `crates/biome_configuration_macros/src/group_struct.rs`
* `crates/biome_console/src/fmt.rs`
* `crates/biome_css_analyze/Cargo.toml`
* `crates/biome_css_analyze/src/assist/source/use_sorted_properties.rs`

</details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->

Comment thread .changeset/add-concise-reporter.md
Comment thread .changeset/crazy-beds-enter.md
Comment thread .changeset/html-no-noninteractive-tab-index.md
Comment thread .changeset/stale-oranges-run.md
Comment thread .changeset/wicked-lions-brake.md
Comment thread crates/biome_analyze/src/shared/sort_attributes.rs
Comment thread crates/biome_analyze/src/shared/sort_attributes.rs
Comment thread crates/biome_cli/src/commands/format.rs
Comment thread crates/biome_cli/src/commands/mod.rs
ematipico and others added 2 commits June 2, 2026 17:04
…10461)

Co-authored-by: Emanuele Stoppa <my.burning@gmail.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Carson McManus <carson.mcmanus1@gmail.com>

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

🧹 Nitpick comments (1)
crates/biome_cli/src/execute/migrate/eslint_eslint.rs (1)

698-715: ⚡ Quick win

Add rustdoc for the new migrated rule and its options.

A new rule/options pair lands here without docs. Tiny omission, but future-you will grumble. As per coding guidelines, "Include rustdoc documentation for new features, rules, assists, and their options".

Also applies to: 811-812, 835-835

🤖 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_cli/src/execute/migrate/eslint_eslint.rs` around lines 698 -
715, The new rule option structs lack rustdoc comments; add concise rustdoc for
ArrayCallbackReturnOptions and the converted
biome_rule_options::use_iterable_callback_return::UseIterableCallbackReturnOptions
(or the From impl) explaining what the option fields control (allow_implicit and
check_for_each), their defaults and expected behavior; place /// comments above
the ArrayCallbackReturnOptions struct and above each field, and consider adding
a brief module-level doc or comment above the From impl mentioning the migration
mapping from ArrayCallbackReturnOptions to UseIterableCallbackReturnOptions.
🤖 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.

Nitpick comments:
In `@crates/biome_cli/src/execute/migrate/eslint_eslint.rs`:
- Around line 698-715: The new rule option structs lack rustdoc comments; add
concise rustdoc for ArrayCallbackReturnOptions and the converted
biome_rule_options::use_iterable_callback_return::UseIterableCallbackReturnOptions
(or the From impl) explaining what the option fields control (allow_implicit and
check_for_each), their defaults and expected behavior; place /// comments above
the ArrayCallbackReturnOptions struct and above each field, and consider adding
a brief module-level doc or comment above the From impl mentioning the migration
mapping from ArrayCallbackReturnOptions to UseIterableCallbackReturnOptions.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 2a53ab6a-2aef-4943-b651-e5dd02987e15

📥 Commits

Reviewing files that changed from the base of the PR and between bb1bc37 and 6bac1c3.

⛔ Files ignored due to path filters (2)
  • crates/biome_cli/tests/specs/migrate_eslint/arrayCallbackReturn/severity_only.jsonc.snap is excluded by !**/*.snap and included by **
  • crates/biome_cli/tests/specs/migrate_eslint/arrayCallbackReturn/with_options.jsonc.snap is excluded by !**/*.snap and included by **
📒 Files selected for processing (5)
  • .changeset/use-iterable-callback-return-allow-implicit.md
  • crates/biome_cli/src/execute/migrate/eslint_eslint.rs
  • crates/biome_cli/src/execute/migrate/eslint_to_biome.rs
  • crates/biome_cli/tests/specs/migrate_eslint/arrayCallbackReturn/severity_only.jsonc
  • crates/biome_cli/tests/specs/migrate_eslint/arrayCallbackReturn/with_options.jsonc
✅ Files skipped from review due to trivial changes (3)
  • crates/biome_cli/tests/specs/migrate_eslint/arrayCallbackReturn/with_options.jsonc
  • .changeset/use-iterable-callback-return-allow-implicit.md
  • crates/biome_cli/tests/specs/migrate_eslint/arrayCallbackReturn/severity_only.jsonc
🚧 Files skipped from review as they are similar to previous changes (1)
  • crates/biome_cli/src/execute/migrate/eslint_to_biome.rs

@ematipico

Copy link
Copy Markdown
Member Author

@coderabbitai review stop

@coderabbitai

coderabbitai Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

Sure thing, @ematipico — pausing reviews for this PR. 🐇


🧠 Learnings used
Learnt from: CR
Repo: biomejs/biome PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-05-22T08:38:39.797Z
Learning: When creating pull requests, target the `main` branch for bugfixes, documentation updates, and new nursery rules; target the `next` branch for promoted rules and features affecting end users

Learnt from: CR
Repo: biomejs/biome PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-05-08T11:55:17.263Z
Learning: For bug fixes target `main` branch; for new nursery rules target `main` branch; for rule promotions from nursery target `next` branch; for new features target `next` branch; for breaking changes target `next` branch; for internal changes with no changeset target `main` branch
✅ Action performed

Reviews paused.

@ematipico

Copy link
Copy Markdown
Member Author

@coderabbitai review stop

@coderabbitai

coderabbitai Bot commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

@ematipico Already on it — reviews are still paused from your previous request. Nothing more to do here! 🐇


🧠 Learnings used
Learnt from: arendjr
Repo: biomejs/biome PR: 7593
File: crates/biome_service/src/workspace/server.rs:1306-1306
Timestamp: 2025-09-25T12:32:59.003Z
Learning: In the biomejs/biome project, do not flag compilation errors during code review as they are handled by the existing test infrastructure and CI. Focus on other code quality aspects instead.

Learnt from: CR
Repo: biomejs/biome PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-05-22T08:38:39.797Z
Learning: When creating pull requests, target the `main` branch for bugfixes, documentation updates, and new nursery rules; target the `next` branch for promoted rules and features affecting end users

Learnt from: CR
Repo: biomejs/biome PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-05-08T11:55:17.263Z
Learning: For bug fixes target `main` branch; for new nursery rules target `main` branch; for rule promotions from nursery target `next` branch; for new features target `next` branch; for breaking changes target `next` branch; for internal changes with no changeset target `main` branch
✅ Action performed

Reviews paused.

@ematipico ematipico changed the title chore: next to main chore: Biome v2.5 Jun 4, 2026
@ematipico

Copy link
Copy Markdown
Member Author

@coderabbitai resolve all your comments, since the review is paused.

@ematipico ematipico changed the title chore: Biome v2.5 chore: biome v2.5 Jun 4, 2026
@coderabbitai

coderabbitai Bot commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# List all review threads on the PR to find CodeRabbit's comments
gh api graphql -f query='
{
  repository(owner: "biomejs", name: "biome") {
    pullRequest(number: 9277) {
      reviewThreads(first: 100) {
        nodes {
          id
          isResolved
          comments(first: 1) {
            nodes {
              author {
                login
              }
              body
            }
          }
        }
      }
    }
  }
}'

Length of output: 18387


🏁 Script executed:

#!/bin/bash
# Resolve all 9 unresolved CodeRabbit threads
for thread_id in \
  "PRRT_kwDOKAiibM6FsZ_O" \
  "PRRT_kwDOKAiibM6FsZ_p" \
  "PRRT_kwDOKAiibM6FsZ_x" \
  "PRRT_kwDOKAiibM6FsZ_3" \
  "PRRT_kwDOKAiibM6FsZ_8" \
  "PRRT_kwDOKAiibM6FsaAH" \
  "PRRT_kwDOKAiibM6FsaAK" \
  "PRRT_kwDOKAiibM6FsaAP" \
  "PRRT_kwDOKAiibM6FsaAQ"; do
  gh api graphql -f query="mutation { resolveReviewThread(input: { threadId: \"$thread_id\" }) { thread { isResolved } } }"
  echo "Resolved: $thread_id"
done

Length of output: 1389



Done, @ematipico — all 9 review threads have been resolved. 🐇

[resolve]


🧠 Learnings used
Learnt from: arendjr
Repo: biomejs/biome PR: 7593
File: crates/biome_service/src/workspace/server.rs:1306-1306
Timestamp: 2025-09-25T12:32:59.003Z
Learning: In the biomejs/biome project, do not flag compilation errors during code review as they are handled by the existing test infrastructure and CI. Focus on other code quality aspects instead.

Learnt from: CR
Repo: biomejs/biome PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-05-22T08:38:39.797Z
Learning: When creating pull requests, target the `main` branch for bugfixes, documentation updates, and new nursery rules; target the `next` branch for promoted rules and features affecting end users

Learnt from: CR
Repo: biomejs/biome PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-05-08T11:55:17.263Z
Learning: For bug fixes target `main` branch; for new nursery rules target `main` branch; for rule promotions from nursery target `next` branch; for new features target `next` branch; for breaking changes target `next` branch; for internal changes with no changeset target `main` branch

@ematipico ematipico merged commit dd0a747 into main Jun 4, 2026
63 of 65 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-CLI Area: CLI A-Core Area: core A-Diagnostic Area: diagnostocis A-Formatter Area: formatter A-Linter Area: linter A-LSP Area: language server protocol A-Parser Area: parser A-Project Area: project A-Resolver Area: resolver A-Tooling Area: internal tools A-Type-Inference Area: type inference L-CSS Language: CSS and super languages L-Grit Language: GritQL L-HTML Language: HTML and super languages L-JavaScript Language: JavaScript and super languages L-JSON Language: JSON and super languages L-Markdown Language: Markdown

Projects

None yet

Development

Successfully merging this pull request may close these issues.