Conversation
…n calls" This reverts commit c61ee3b.
…rror messages" This reverts commit 3bcae80.
Co-authored-by: Arthur Fiorette <me@arthur.place> 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: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
🦋 Changeset detectedLatest commit: 9e3cad4 The changes in this PR will be included in the next version bump. This PR includes changesets to release 14 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
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>
chore: merge main into next
chore: merge main into next
|
Note Reviews pausedUse the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughAdds 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
✨ Finishing Touches🧪 Generate unit tests (beta)
|
There was a problem hiding this comment.
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 winUse 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 inrage.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 winClose the
invalid.jscode 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 valueOptional: 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 valueConsider 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 valueCheck
mockmodule visibility: no external API expansion
crates/biome_cli/src/runner/impls/mod.rsdeclarespub(crate) mod watchers;, socrates/biome_cli/src/runner/impls/watchers/mod.rs’spub mod mock;can’t be accessed from outside the crate; consumers already getMockWatcherviacrates/biome_cli/src/lib.rs’spub use ...watchers::mock::MockWatcher. Optional tidy-up: switchpub mod mock;topub(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 winAdd documentation for constructor.
The
with_eventsconstructor 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 winAdd documentation for public struct.
The
MockWatcherstruct and its publicwatchedfield 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 winAdd documentation for the new trait method.
The
is_watch_modemethod 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 winConsider 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
concisereporter ("Added a new
reporter calledconcise. When--reporter=conciseis passed the commands
format,lint,checkandci, 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.jsbut never closes it, causing subsequent prose (theinvalid.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 -->
There was a problem hiding this comment.
🧹 Nitpick comments (1)
crates/biome_cli/src/execute/migrate/eslint_eslint.rs (1)
698-715: ⚡ Quick winAdd 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
⛔ Files ignored due to path filters (2)
crates/biome_cli/tests/specs/migrate_eslint/arrayCallbackReturn/severity_only.jsonc.snapis excluded by!**/*.snapand included by**crates/biome_cli/tests/specs/migrate_eslint/arrayCallbackReturn/with_options.jsonc.snapis excluded by!**/*.snapand included by**
📒 Files selected for processing (5)
.changeset/use-iterable-callback-return-allow-implicit.mdcrates/biome_cli/src/execute/migrate/eslint_eslint.rscrates/biome_cli/src/execute/migrate/eslint_to_biome.rscrates/biome_cli/tests/specs/migrate_eslint/arrayCallbackReturn/severity_only.jsonccrates/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
|
@coderabbitai review stop |
|
Sure thing, 🧠 Learnings used✅ Action performedReviews paused. |
|
@coderabbitai review stop |
|
🧠 Learnings used✅ Action performedReviews paused. |
|
@coderabbitai resolve all your comments, since the review is paused. |
|
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"
doneLength of output: 1389 Done, [resolve] 🧠 Learnings used |
Summary
Caution
When merging, use merge commit
Test Plan
Docs