-
-
Notifications
You must be signed in to change notification settings - Fork 839
fix(parser/css): :active-view-transition-type parameters should accept comma-separated custom identifiers
#8531
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…ustomIdentifierList
… separated list format
…mma separated format
…@font-feature-values
…or @font-feature-values
🦋 Changeset detectedLatest commit: 6c69c79 The changes in this PR will be included in the next version bump. This PR includes changesets to release 13 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
:active-view-transition-type parameters should accept comma-separated custom idents
CodSpeed Performance ReportMerging #8531 will not alter performanceComparing Summary
Footnotes
|
WalkthroughThis pull request fixes CSS parser support for the Possibly related PRs
Suggested reviewers
Pre-merge checks and finishing touches✅ Passed checks (4 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro ⛔ Files ignored due to path filters (9)
📒 Files selected for processing (8)
🚧 Files skipped from review as they are similar to previous changes (2)
🧰 Additional context used📓 Path-based instructions (1)**/*.rs📄 CodeRabbit inference engine (CONTRIBUTING.md)
Files:
🧠 Learnings (23)📚 Learning: 2025-12-04T13:29:49.287ZApplied to files:
📚 Learning: 2025-11-24T18:06:03.545ZApplied to files:
📚 Learning: 2025-11-24T18:06:03.545ZApplied to files:
📚 Learning: 2025-11-24T18:05:27.810ZApplied to files:
📚 Learning: 2025-11-24T18:06:03.545ZApplied to files:
📚 Learning: 2025-11-24T18:06:03.545ZApplied to files:
📚 Learning: 2025-11-24T18:06:03.545ZApplied to files:
📚 Learning: 2025-11-24T18:06:03.545ZApplied to files:
📚 Learning: 2025-11-24T18:06:03.545ZApplied to files:
📚 Learning: 2025-11-24T18:06:03.545ZApplied to files:
📚 Learning: 2025-11-24T18:06:03.545ZApplied to files:
📚 Learning: 2025-11-24T18:05:20.371ZApplied to files:
📚 Learning: 2025-11-24T18:05:27.810ZApplied to files:
📚 Learning: 2025-11-24T18:05:20.371ZApplied to files:
📚 Learning: 2025-11-24T18:05:20.371ZApplied to files:
📚 Learning: 2025-11-24T18:05:20.371ZApplied to files:
📚 Learning: 2025-12-19T12:53:30.399ZApplied to files:
📚 Learning: 2025-11-24T18:05:20.371ZApplied to files:
📚 Learning: 2025-11-24T18:05:20.371ZApplied to files:
📚 Learning: 2025-11-24T18:05:20.371ZApplied to files:
📚 Learning: 2025-11-24T18:05:20.371ZApplied to files:
📚 Learning: 2025-11-24T18:05:20.371ZApplied to files:
📚 Learning: 2025-11-24T18:05:20.371ZApplied to files:
🧬 Code graph analysis (1)crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs (1)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (13)
🔇 Additional comments (9)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
.changeset/strong-mails-raise.md (1)
5-5: Changeset looks good.The description clearly explains the fix. Optionally, you could make it slightly more concise by removing "so that it can": "Fixed
:active-view-transition-typeparameters to accept comma-separated custom identifiers."crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rs (1)
1-46: Consider consolidating withcustom_identifier_list.rsto reduce duplication.The structure is nearly identical to the comma-separated formatter—only the separator differs. You could parameterise the separator (comma vs. none) or extract shared logic to reduce maintenance burden.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (11)
crates/biome_css_factory/src/generated/node_factory.rsis excluded by!**/generated/**,!**/generated/**and included by**crates/biome_css_factory/src/generated/syntax_factory.rsis excluded by!**/generated/**,!**/generated/**and included by**crates/biome_css_formatter/tests/specs/css/pseudo/pseudo_class_function_custom_identifier_list.css.snapis excluded by!**/*.snapand included by**crates/biome_css_parser/tests/css_test_suite/error/at_rule/at_rule_font_feature_values_error.css.snapis excluded by!**/*.snapand included by**crates/biome_css_parser/tests/css_test_suite/error/selector/pseudo_class/pseudo_class_function_custom_identifier_list_error.css.snapis excluded by!**/*.snapand included by**crates/biome_css_parser/tests/css_test_suite/ok/at_rule/at_rule_font_feature_values.css.snapis excluded by!**/*.snapand included by**crates/biome_css_parser/tests/css_test_suite/ok/selector/pseudo_class/pseudo_class_function_custom_identifier_list.css.snapis excluded by!**/*.snapand included by**crates/biome_css_syntax/src/generated/kind.rsis excluded by!**/generated/**,!**/generated/**and included by**crates/biome_css_syntax/src/generated/macros.rsis excluded by!**/generated/**,!**/generated/**and included by**crates/biome_css_syntax/src/generated/nodes.rsis excluded by!**/generated/**,!**/generated/**and included by**crates/biome_css_syntax/src/generated/nodes_mut.rsis excluded by!**/generated/**,!**/generated/**and included by**
📒 Files selected for processing (12)
.changeset/strong-mails-raise.md(1 hunks)crates/biome_css_formatter/src/css/lists/custom_identifier_list.rs(2 hunks)crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rs(1 hunks)crates/biome_css_formatter/src/css/lists/mod.rs(1 hunks)crates/biome_css_formatter/src/generated.rs(1 hunks)crates/biome_css_formatter/tests/specs/css/pseudo/pseudo_class_function_custom_identifier_list.css(1 hunks)crates/biome_css_parser/src/syntax/at_rule/font_feature_values.rs(2 hunks)crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs(3 hunks)crates/biome_css_parser/tests/css_test_suite/error/selector/pseudo_class/pseudo_class_function_custom_identifier_list_error.css(1 hunks)crates/biome_css_parser/tests/css_test_suite/ok/selector/pseudo_class/pseudo_class_function_custom_identifier_list.css(1 hunks)xtask/codegen/css.ungram(1 hunks)xtask/codegen/src/css_kinds_src.rs(1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
.changeset/*.md
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Write changesets that are concise (1-3 sentences), user-focused, use past tense for actions taken and present tense for Biome behavior, include code examples for rules, and end sentences with periods
Files:
.changeset/strong-mails-raise.md
crates/**/*.rs
📄 CodeRabbit inference engine (CONTRIBUTING.md)
Update inline rustdoc documentation for rules, assists, and their options when adding new features or changing existing features in Rust crates
Files:
crates/biome_css_formatter/src/css/lists/mod.rscrates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_list.rscrates/biome_css_formatter/src/generated.rscrates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rscrates/biome_css_parser/src/syntax/at_rule/font_feature_values.rs
🧠 Learnings (36)
📚 Learning: 2025-12-12T10:11:05.564Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2025-12-12T10:11:05.564Z
Learning: Create a changeset for user-facing bug fixes and features using `just new-changeset`, selecting appropriate packages and change type (`major`, `minor`, or `patch`)
Applied to files:
.changeset/strong-mails-raise.md
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Use `ParseSeparatedList` and `ParseNodeList` for parsing lists with error recovery to avoid infinite loops
Applied to files:
crates/biome_css_formatter/src/css/lists/mod.rscrates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_list.rscrates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rscrates/biome_css_parser/src/syntax/at_rule/font_feature_values.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/language_kind.rs : Add a new language prefix to the `LANGUAGE_PREFIXES` constant in `language_kind.rs` file
Applied to files:
crates/biome_css_formatter/src/css/lists/mod.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/language_kind.rs : Add a new variant to `LanguageKind` enum in `language_kind.rs` file and implement all methods for the new language variant
Applied to files:
crates/biome_css_formatter/src/css/lists/mod.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Applies to crates/biome_formatter/**/biome_*_formatter/src/context.rs : Define `<Language>FormatContext` struct in a `context.rs` file containing `comments` and `source_map` fields, implementing `FormatContext` and `CstFormatContext` traits
Applied to files:
crates/biome_css_formatter/src/css/lists/mod.rscrates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_list.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/*analyze/src/lint/nursery/**/*.rs : Add `issue_number` field to `declare_lint_rule!` macro for work-in-progress rules
Applied to files:
crates/biome_css_formatter/src/css/lists/mod.rs
📚 Learning: 2025-12-12T10:11:05.564Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2025-12-12T10:11:05.564Z
Learning: Applies to crates/**/*.rs : Update inline rustdoc documentation for rules, assists, and their options when adding new features or changing existing features in Rust crates
Applied to files:
crates/biome_css_formatter/src/css/lists/mod.rscrates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_list.rscrates/biome_css_formatter/src/generated.rscrates/biome_css_parser/src/syntax/at_rule/font_feature_values.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/*analyze/src/**/*.rs : Add `sources` field with `RuleSource` to cite ESLint or other rules that inspired the implementation
Applied to files:
crates/biome_css_formatter/src/css/lists/mod.rscrates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Applies to crates/biome_formatter/**/biome_*_formatter/src/comments.rs : Define `<Language>CommentStyle` as a public type alias for `Comments<<Language>Language>` in a `comments.rs` file
Applied to files:
crates/biome_css_formatter/src/css/lists/mod.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/*.ungram : Nodes that represent a list must end with the postfix `List`, e.g., `HtmlAttributeList`, and lists are mandatory (not optional) but empty by default
Applied to files:
crates/biome_css_formatter/src/css/lists/mod.rscrates/biome_css_parser/src/syntax/at_rule/font_feature_values.rs
📚 Learning: 2025-11-24T18:05:27.810Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_js_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:27.810Z
Learning: Applies to crates/biome_js_formatter/**/*.rs : Import the `FormatNode` trait and implement it for your Node when creating formatters in biome_js_formatter
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_list.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Applies to crates/biome_formatter/**/biome_*_formatter/tests/language.rs : Implement `TestFormatLanguage` trait in `tests/language.rs` for the formatter's test language
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/biome_rule_options/lib/**/*.rs : Wrap rule options fields in `Option<>` to properly track set and unset options during merge
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Applies to crates/biome_formatter/**/biome_*_formatter/src/lib.rs : Define a type alias `<Language>Formatter<'buf>` as `Formatter<'buf, <Language>FormatContext>` in the main formatter crate
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_list.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/*analyze/src/**/*.rs : Rule documentation code blocks should be ordered as language, expect_diagnostic, options/full_options/use_options, ignore, file
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Create a new formatter crate using the command `just new-crate biome_<language>_formatter` where `<language>` is the target language (e.g., `biome_html_formatter` for HTML)
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Define `FormatHtmlSyntaxNode` struct in a `cst.rs` file implementing `FormatRule<HtmlSyntaxNode>`, `AsFormat<HtmlFormatContext>`, and `IntoFormat<HtmlFormatContext>` traits using the provided boilerplate code
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_list.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Applies to crates/biome_formatter/**/biome_*_formatter/src/lib.rs : Expose a public `format_node` function that accepts formatting options and a root syntax node, returning a `FormatResult<Formatted<Context>>` with appropriate documentation
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_list.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Implement the `FormatNodeRule<N>` trait with `fmt_fields` as the only required method; default implementations of `fmt`, `is_suppressed`, `fmt_leading_comments`, `fmt_dangling_comments`, and `fmt_trailing_comments` are provided
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_list.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/*analyze/src/**/*.rs : Prefix line with `#` in documentation code examples sparingly; prefer concise complete snippets
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_list.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Implement the `IntoFormat<Context>` trait in `lib.rs` with implementations for `SyntaxResult` and `Option` types as part of the formatter infrastructure
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_list.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Implement the `AsFormat<Context>` trait in `lib.rs` with generic implementations for references, `SyntaxResult`, and `Option` types as provided in the formatter boilerplate code
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_list.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:27.810Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_js_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:27.810Z
Learning: The formatter foundation relies on using the generic `Format` trait and `FormatNode` for nodes, with creation of an intermediate IR via a series of helpers
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_list.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Implement the `FormattedIterExt` trait and `FormattedIter` struct in `lib.rs` to provide iterator extensions for formatting
Applied to files:
crates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Implement the `FormatLanguage` trait with `SyntaxLanguage`, `Context`, and `FormatRule` associated types for the language's formatter
Applied to files:
crates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Parse rule functions must be prefixed with `parse_` and use the name defined in the grammar file, e.g., `parse_for_statement` or `parse_expression`
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rscrates/biome_css_parser/src/syntax/at_rule/font_feature_values.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Implement error recovery in list parsing using `or_recover()` to wrap unparseable tokens in a `BOGUS_*` node and consume tokens until a recovery token is found
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rscrates/biome_css_parser/src/syntax/at_rule/font_feature_values.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Use `ConditionalParsedSyntax` for syntax that is only valid in specific contexts (e.g., strict mode, file types, language versions) and call `or_invalid_to_bogus()` to convert to a bogus node if not supported
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs
📚 Learning: 2025-11-24T18:05:27.810Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_js_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:27.810Z
Learning: Applies to crates/biome_js_formatter/**/*.rs : When formatting AST nodes, use mandatory tokens from the AST instead of hardcoding token strings (e.g., use `node.l_paren_token().format()` instead of `token("(")`)
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rscrates/biome_css_parser/src/syntax/at_rule/font_feature_values.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Parse rules must take a mutable reference to the parser as their only parameter and return a `ParsedSyntax`
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Use `p.eat(token)` for optional tokens, `p.expect(token)` for required tokens, `parse_rule(p).ok(p)` for optional nodes, and `parse_rule(p).or_add_diagnostic(p, error)` for required nodes
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Parse rules must return `ParsedSyntax::Absent` if the rule can't predict by the next token(s) if they form the expected node, and must not progress the parser in this case
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/*.ungram : Nodes for enclosing syntax errors must have the `Bogus` word, e.g., `HtmlBogusAttribute`, and must be part of a variant
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : A parser struct must implement the `Parser` trait and save the token source, parser context, and optional parser options
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/biome_rule_options/lib/**/*.rs : Use `rename_all = "camelCase"` in serde derive macro for rule options
Applied to files:
crates/biome_css_parser/src/syntax/at_rule/font_feature_values.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/*analyze/src/**/*.rs : Assist rules should detect refactoring opportunities and emit code action signals
Applied to files:
crates/biome_css_parser/src/syntax/at_rule/font_feature_values.rs
🧬 Code graph analysis (3)
crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rs (2)
crates/biome_css_formatter/src/css/lists/custom_identifier_list.rs (2)
with_options(51-54)fmt(59-78)crates/biome_formatter/src/builders.rs (2)
space(606-608)soft_line_break_or_space(188-190)
crates/biome_css_formatter/src/css/lists/custom_identifier_list.rs (1)
crates/biome_formatter/src/builders.rs (2)
space(606-608)soft_line_break_or_space(188-190)
crates/biome_css_parser/src/syntax/at_rule/font_feature_values.rs (1)
crates/biome_css_parser/src/syntax/parse_error.rs (1)
expected_non_css_wide_keyword_identifier(20-44)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Lint project (depot-windows-2022)
🔇 Additional comments (14)
xtask/codegen/css.ungram (1)
798-807: LGTM! Clean separation of concerns.The grammar correctly distinguishes between space-separated custom identifiers (for font family names like "Times New Roman") and comma-separated identifiers (for
:active-view-transition-type). The grammar syntax follows the established patterns.crates/biome_css_parser/src/syntax/at_rule/font_feature_values.rs (1)
167-227: LGTM! Consistent rename and correct recovery logic.The rename from
CssCustomIdentifierListtoCssCustomIdentifierSpaceSeparatedListis applied consistently across the struct, implementation, and recovery types. Theis_at_list_endcorrectly checks for both'{'and','tokens, which makes sense for space-separated identifiers within a comma-separated list context.crates/biome_css_formatter/src/css/lists/custom_identifier_list.rs (1)
59-78: LGTM! Correct comma-separated formatting.The implementation now correctly formats comma-separated custom identifiers. The
format_separated(",")handles comma insertion, whilst the joiner separator controls whitespace/line breaks after commas. This produces proper CSS syntax like:active-view-transition-type(value1, value2).crates/biome_css_formatter/src/css/lists/mod.rs (1)
8-8: LGTM! Module correctly exposed.The new
custom_identifier_space_separated_listmodule is properly exposed as internal-only and maintains alphabetical ordering.crates/biome_css_parser/tests/css_test_suite/ok/selector/pseudo_class/pseudo_class_function_custom_identifier_list.css (1)
1-2: LGTM! Test correctly updated.The test now uses comma-separated custom identifiers, which matches the CSS spec and MDN examples for
:active-view-transition-type.xtask/codegen/src/css_kinds_src.rs (1)
444-444: LGTM! Node kind correctly added.The new
CSS_CUSTOM_IDENTIFIER_SPACE_SEPARATED_LISTnode kind is properly added to the code generation in alphabetical order.crates/biome_css_parser/tests/css_test_suite/error/selector/pseudo_class/pseudo_class_function_custom_identifier_list_error.css (1)
1-12: LGTM! Error tests correctly updated.The error test cases now use comma-separated format whilst maintaining the same error conditions (invalid identifiers like numbers and string literals).
crates/biome_css_formatter/tests/specs/css/pseudo/pseudo_class_function_custom_identifier_list.css (1)
1-41: LGTM! Formatter test correctly reflects comma-separated syntax.The trailing commas now properly format the comma-separated custom identifier lists for
:active-view-transition-type(), matching the spec.crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs (1)
8-8: Excellent! Correctly implements comma-separated parsing.The switch from
ParseNodeListtoParseSeparatedListwith the comma separator properly implements the spec-compliant syntax. The pattern matches the existing implementation infont_feature_values.rs.Based on learnings, using
ParseSeparatedListensures proper error recovery for list parsing.Also applies to: 59-59, 84-86
crates/biome_css_formatter/src/generated.rs (1)
6868-6879: New list formatter wiring looks correctThe
AsFormat/IntoFormatimpls forCssCustomIdentifierSpaceSeparatedListfollow the same pattern asCssCustomIdentifierListand point at the expectedcustom_identifier_space_separated_listrule. Assuming this was generated viacargo codegen formatter, this hook-up looks spot on.crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rs (4)
1-3: Imports look good.The reuse of
CssCustomIdentifierLayoutfrom the sibling module maintains consistency between the comma-separated and space-separated formatters.
5-13: Struct declarations follow the standard formatter pattern.The implementation correctly mirrors the structure of the comma-separated list formatter, using the same layout options for consistency.
15-24: Standard options wiring—correct.
26-46: Formatting logic is correct for space-separated identifiers.The use of
node.iter().formatted()(without comma separation) properly distinguishes this from the comma-separated list formatter. The OneLine and Fluid layouts behave as expected.
dyc3
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking good, just a couple notes.
…udoClassFunctionCustomIdentifierCommaSeparatedList
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (2)
crates/biome_css_formatter/src/css/lists/custom_identifier_comma_separated_list.rs (2)
41-46: Consider extracting shared layout enum.
CssCustomIdentifierLayoutis used by both comma-separated and space-separated list formatters, but it's currently defined in the comma-separated module, creating a cross-module dependency. Consider extracting it to a parent or shared module to avoid this coupling.
68-84: Consider using.entries()for consistency.The space-separated formatter uses the more concise
.entries(node.iter().formatted())pattern, whilst this manually loops with.entry(). Ifformat_separated()returns an iterator, you could use.entries(node.format_separated(","))for consistency.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (9)
crates/biome_css_factory/src/generated/node_factory.rsis excluded by!**/generated/**,!**/generated/**and included by**crates/biome_css_factory/src/generated/syntax_factory.rsis excluded by!**/generated/**,!**/generated/**and included by**crates/biome_css_formatter/tests/specs/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.css.snapis excluded by!**/*.snapand included by**crates/biome_css_parser/tests/css_test_suite/error/selector/pseudo_class/pseudo_class_function_custom_identifier_comma_separated_list_error.css.snapis excluded by!**/*.snapand included by**crates/biome_css_parser/tests/css_test_suite/ok/selector/pseudo_class/pseudo_class_function_custom_identifier_comma_separated_list.css.snapis excluded by!**/*.snapand included by**crates/biome_css_syntax/src/generated/kind.rsis excluded by!**/generated/**,!**/generated/**and included by**crates/biome_css_syntax/src/generated/macros.rsis excluded by!**/generated/**,!**/generated/**and included by**crates/biome_css_syntax/src/generated/nodes.rsis excluded by!**/generated/**,!**/generated/**and included by**crates/biome_css_syntax/src/generated/nodes_mut.rsis excluded by!**/generated/**,!**/generated/**and included by**
📒 Files selected for processing (17)
.changeset/strong-mails-raise.md(1 hunks)crates/biome_css_formatter/src/css/any/pseudo_class.rs(1 hunks)crates/biome_css_formatter/src/css/lists/custom_identifier_comma_separated_list.rs(1 hunks)crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rs(1 hunks)crates/biome_css_formatter/src/css/lists/mod.rs(1 hunks)crates/biome_css_formatter/src/css/pseudo/mod.rs(1 hunks)crates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.rs(1 hunks)crates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_list.rs(0 hunks)crates/biome_css_formatter/src/generated.rs(2 hunks)crates/biome_css_formatter/tests/specs/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.css(1 hunks)crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_comma_separated_list.rs(4 hunks)crates/biome_css_parser/src/syntax/selector/pseudo_class/mod.rs(3 hunks)crates/biome_css_parser/tests/css_test_suite/error/selector/pseudo_class/pseudo_class_function_custom_identifier_comma_separated_list_error.css(1 hunks)crates/biome_css_parser/tests/css_test_suite/ok/selector/pseudo_class/pseudo_class_function_custom_identifier_comma_separated_list.css(1 hunks)crates/biome_css_semantic/src/semantic_model/specificity.rs(1 hunks)xtask/codegen/css.ungram(3 hunks)xtask/codegen/src/css_kinds_src.rs(2 hunks)
💤 Files with no reviewable changes (1)
- crates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_list.rs
✅ Files skipped from review due to trivial changes (1)
- crates/biome_css_parser/tests/css_test_suite/error/selector/pseudo_class/pseudo_class_function_custom_identifier_comma_separated_list_error.css
🚧 Files skipped from review as they are similar to previous changes (2)
- xtask/codegen/src/css_kinds_src.rs
- .changeset/strong-mails-raise.md
🧰 Additional context used
📓 Path-based instructions (1)
**/*.rs
📄 CodeRabbit inference engine (CONTRIBUTING.md)
**/*.rs: Use inline rustdoc documentation for rules, assists, and their options
Use thedbg!()macro for debugging output in Rust tests and code
Use doc tests (doctest) format with code blocks in rustdoc comments; ensure assertions pass in tests
Files:
crates/biome_css_formatter/src/css/pseudo/mod.rscrates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/css/any/pseudo_class.rscrates/biome_css_formatter/src/css/lists/mod.rscrates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_comma_separated_list.rscrates/biome_css_semantic/src/semantic_model/specificity.rscrates/biome_css_parser/src/syntax/selector/pseudo_class/mod.rscrates/biome_css_formatter/src/generated.rs
🧠 Learnings (36)
📚 Learning: 2025-12-04T13:29:49.287Z
Learnt from: dyc3
Repo: biomejs/biome PR: 8291
File: crates/biome_html_formatter/tests/specs/prettier/vue/html-vue/elastic-header.html:10-10
Timestamp: 2025-12-04T13:29:49.287Z
Learning: Files under `crates/biome_html_formatter/tests/specs/prettier` are test fixtures synced from Prettier and should not receive detailed code quality reviews (e.g., HTTP vs HTTPS, formatting suggestions, etc.). These files are test data meant to validate formatter behavior and should be preserved as-is.
Applied to files:
crates/biome_css_formatter/tests/specs/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.csscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/biome_rule_options/lib/**/*.rs : Use `rename_all = "camelCase"` in serde derive macro for rule options
Applied to files:
crates/biome_css_formatter/src/css/pseudo/mod.rscrates/biome_css_formatter/src/css/any/pseudo_class.rscrates/biome_css_parser/src/syntax/selector/pseudo_class/mod.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Parse rule functions must be prefixed with `parse_` and use the name defined in the grammar file, e.g., `parse_for_statement` or `parse_expression`
Applied to files:
crates/biome_css_formatter/src/css/pseudo/mod.rscrates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/any/pseudo_class.rscrates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_comma_separated_list.rscrates/biome_css_parser/src/syntax/selector/pseudo_class/mod.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Use `ParseSeparatedList` and `ParseNodeList` for parsing lists with error recovery to avoid infinite loops
Applied to files:
crates/biome_css_formatter/src/css/pseudo/mod.rscrates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/css/any/pseudo_class.rscrates/biome_css_formatter/src/css/lists/mod.rscrates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_comma_separated_list.rscrates/biome_css_parser/src/syntax/selector/pseudo_class/mod.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:42.356Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_js_type_info/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:42.356Z
Learning: Applies to crates/biome_js_type_info/**/*.rs : Use `TypeReference` instead of `Arc` for types that reference other types to avoid stale cache issues when modules are replaced
Applied to files:
crates/biome_css_formatter/src/css/pseudo/mod.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/*analyze/src/**/*.rs : Assist rules should detect refactoring opportunities and emit code action signals
Applied to files:
crates/biome_css_formatter/src/css/pseudo/mod.rscrates/biome_css_semantic/src/semantic_model/specificity.rscrates/biome_css_parser/src/syntax/selector/pseudo_class/mod.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/language_kind.rs : Add a new language prefix to the `LANGUAGE_PREFIXES` constant in `language_kind.rs` file
Applied to files:
crates/biome_css_formatter/src/css/pseudo/mod.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Applies to crates/biome_formatter/**/biome_*_formatter/src/comments.rs : Define `<Language>CommentStyle` as a public type alias for `Comments<<Language>Language>` in a `comments.rs` file
Applied to files:
crates/biome_css_formatter/src/css/pseudo/mod.rs
📚 Learning: 2025-11-24T18:05:27.810Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_js_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:27.810Z
Learning: Applies to crates/biome_js_formatter/**/*.rs : Import the `FormatNode` trait and implement it for your Node when creating formatters in biome_js_formatter
Applied to files:
crates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:27.810Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_js_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:27.810Z
Learning: Applies to crates/biome_js_formatter/**/*.rs : When formatting AST nodes, use mandatory tokens from the AST instead of hardcoding token strings (e.g., use `node.l_paren_token().format()` instead of `token("(")`)
Applied to files:
crates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/any/pseudo_class.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Applies to crates/biome_formatter/**/biome_*_formatter/src/context.rs : Define `<Language>FormatContext` struct in a `context.rs` file containing `comments` and `source_map` fields, implementing `FormatContext` and `CstFormatContext` traits
Applied to files:
crates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/*analyze/src/**/*.rs : Add `sources` field with `RuleSource` to cite ESLint or other rules that inspired the implementation
Applied to files:
crates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/biome_rule_options/lib/**/*.rs : Wrap rule options fields in `Option<>` to properly track set and unset options during merge
Applied to files:
crates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Applies to crates/biome_formatter/**/biome_*_formatter/src/lib.rs : Expose a public `format_node` function that accepts formatting options and a root syntax node, returning a `FormatResult<Formatted<Context>>` with appropriate documentation
Applied to files:
crates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Applies to crates/biome_formatter/**/biome_*_formatter/tests/language.rs : Implement `TestFormatLanguage` trait in `tests/language.rs` for the formatter's test language
Applied to files:
crates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/*analyze/src/lint/nursery/**/*.rs : Add `issue_number` field to `declare_lint_rule!` macro for work-in-progress rules
Applied to files:
crates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Implement the `FormatNodeRule<N>` trait with `fmt_fields` as the only required method; default implementations of `fmt`, `is_suppressed`, `fmt_leading_comments`, `fmt_dangling_comments`, and `fmt_trailing_comments` are provided
Applied to files:
crates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Define `FormatHtmlSyntaxNode` struct in a `cst.rs` file implementing `FormatRule<HtmlSyntaxNode>`, `AsFormat<HtmlFormatContext>`, and `IntoFormat<HtmlFormatContext>` traits using the provided boilerplate code
Applied to files:
crates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Applies to crates/biome_formatter/**/biome_*_formatter/src/lib.rs : Define a type alias `<Language>Formatter<'buf>` as `Formatter<'buf, <Language>FormatContext>` in the main formatter crate
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Create a new formatter crate using the command `just new-crate biome_<language>_formatter` where `<language>` is the target language (e.g., `biome_html_formatter` for HTML)
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_comma_separated_list.rscrates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Implement the `FormattedIterExt` trait and `FormattedIter` struct in `lib.rs` to provide iterator extensions for formatting
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_comma_separated_list.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/*analyze/src/**/*.rs : Rule documentation code blocks should be ordered as language, expect_diagnostic, options/full_options/use_options, ignore, file
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/*analyze/src/**/*.rs : Use generic rule names if the rule could potentially be implemented for multiple languages
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/*analyze/src/**/*.rs : Rule documentation must include `## Options` section if the rule has options
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/*analyze/src/**/*.rs : Use `options` code block property for rule-specific configuration snippets in documentation
Applied to files:
crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/*.ungram : Nodes that represent a list must end with the postfix `List`, e.g., `HtmlAttributeList`, and lists are mandatory (not optional) but empty by default
Applied to files:
crates/biome_css_formatter/src/css/lists/mod.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Implement error recovery in list parsing using `or_recover()` to wrap unparseable tokens in a `BOGUS_*` node and consume tokens until a recovery token is found
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_comma_separated_list.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Use `p.eat(token)` for optional tokens, `p.expect(token)` for required tokens, `parse_rule(p).ok(p)` for optional nodes, and `parse_rule(p).or_add_diagnostic(p, error)` for required nodes
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_comma_separated_list.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Use `ConditionalParsedSyntax` for syntax that is only valid in specific contexts (e.g., strict mode, file types, language versions) and call `or_invalid_to_bogus()` to convert to a bogus node if not supported
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_comma_separated_list.rscrates/biome_css_parser/src/syntax/selector/pseudo_class/mod.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Parse rules must return `ParsedSyntax::Absent` if the rule can't predict by the next token(s) if they form the expected node, and must not progress the parser in this case
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_comma_separated_list.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/*analyze/src/**/*.rs : Use `Semantic<>` query type to access semantic model information like scopes and declarations
Applied to files:
crates/biome_css_semantic/src/semantic_model/specificity.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/*analyze/src/**/*.rs : Check if a variable is global using the semantic model to avoid false positives
Applied to files:
crates/biome_css_semantic/src/semantic_model/specificity.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/biome_rule_options/lib/**/*.rs : Implement `Merge` trait for rule options to support configuration inheritance
Applied to files:
crates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Implement the `IntoFormat<Context>` trait in `lib.rs` with implementations for `SyntaxResult` and `Option` types as part of the formatter infrastructure
Applied to files:
crates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Implement the `AsFormat<Context>` trait in `lib.rs` with generic implementations for references, `SyntaxResult`, and `Option` types as provided in the formatter boilerplate code
Applied to files:
crates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Implement the `FormatLanguage` trait with `SyntaxLanguage`, `Context`, and `FormatRule` associated types for the language's formatter
Applied to files:
crates/biome_css_formatter/src/generated.rs
🧬 Code graph analysis (5)
crates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.rs (3)
crates/biome_css_syntax/src/file_source.rs (1)
css(35-39)crates/biome_formatter/src/builders.rs (1)
soft_block_indent(1260-1265)crates/biome_css_formatter/src/css/lists/custom_identifier_comma_separated_list.rs (1)
with_fluid_layout(17-20)
crates/biome_css_formatter/src/css/lists/custom_identifier_comma_separated_list.rs (2)
crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rs (1)
with_options(22-25)crates/biome_formatter/src/builders.rs (2)
space(606-608)soft_line_break_or_space(188-190)
crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rs (2)
crates/biome_css_formatter/src/css/lists/custom_identifier_comma_separated_list.rs (1)
with_options(53-56)crates/biome_formatter/src/builders.rs (2)
space(606-608)soft_line_break_or_space(188-190)
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_comma_separated_list.rs (1)
crates/biome_css_parser/src/syntax/parse_error.rs (1)
expected_non_css_wide_keyword_identifier(20-44)
crates/biome_css_parser/src/syntax/selector/pseudo_class/mod.rs (1)
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_comma_separated_list.rs (2)
is_at_pseudo_class_function_custom_identifier_comma_separated_list(18-23)parse_pseudo_class_function_custom_identifier_comma_separated_list(26-58)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (12)
- GitHub Check: Test (depot-windows-2022-16)
- GitHub Check: Parser conformance
- GitHub Check: Lint project (depot-windows-2022)
- GitHub Check: Test Node.js API
- GitHub Check: Lint project (depot-ubuntu-24.04-arm-16)
- GitHub Check: Test (depot-ubuntu-24.04-arm-16)
- GitHub Check: Documentation
- GitHub Check: Check Dependencies
- GitHub Check: Bench (biome_css_analyze)
- GitHub Check: Bench (biome_css_parser)
- GitHub Check: Bench (biome_css_formatter)
- GitHub Check: autofix
🔇 Additional comments (18)
crates/biome_css_parser/tests/css_test_suite/ok/selector/pseudo_class/pseudo_class_function_custom_identifier_comma_separated_list.css (1)
1-2: Test correctly demonstrates comma-separated parsing.This test validates that
:active-view-transition-typenow accepts comma-separated custom identifiers per the spec. Nice work!Optional: The test includes duplicate values (
backwardsandforwardseach appear twice). If this is intentional to verify the parser handles repetition, brilliant. Otherwise, consider whether unique values might make the test clearer.xtask/codegen/css.ungram (3)
230-230: LGTM! Naming follows feedback.The variant name correctly indicates comma-separation, addressing the past review comment.
401-405: Correct structure for comma-separated lists.The definition properly uses
CssCustomIdentifierCommaSeparatedListfor the items field, matching the spec requirements.
799-807: Well-separated concerns.The grammar correctly distinguishes space-separated lists (for font family names) from comma-separated lists (for pseudo-class functions), each with appropriate syntax.
crates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.rs (1)
15-44: Clean implementation.The formatter correctly lowercases the pseudo-class name and uses fluid layout with soft indentation for the comma-separated identifiers. Well done.
crates/biome_css_formatter/src/css/pseudo/mod.rs (1)
6-6: Correct module rename.The module name now accurately reflects the comma-separated nature of the list.
crates/biome_css_formatter/src/css/lists/custom_identifier_space_separated_list.rs (1)
28-47: Clean formatter implementation.The logic correctly formats space-separated identifiers with the chosen layout. The use of
.entries()is more concise than a manual loop.crates/biome_css_formatter/src/css/lists/mod.rs (1)
7-8: Appropriate module split.Separating comma-separated and space-separated list formatters into distinct modules clarifies their different purposes.
crates/biome_css_formatter/src/css/any/pseudo_class.rs (1)
17-19: Correct variant handling.The match arm now correctly handles the comma-separated variant of the custom identifier list.
crates/biome_css_formatter/tests/specs/css/pseudo/pseudo_class_function_custom_identifier_comma_separated_list.css (1)
1-41: Good test coverage.The test cases exercise comma-separated identifiers with irregular spacing and indentation, validating the formatter's normalisation behaviour.
crates/biome_css_semantic/src/semantic_model/specificity.rs (1)
112-114: LGTM! Type rename correctly aligned with parser changes.The match arm update correctly tracks the parser layer's rename to
CssPseudoClassFunctionCustomIdentifierCommaSeparatedList. The specificity calculation remains correct per CSS spec — pseudo-class functions receiveCLASS_SPECIFICITYregardless of comma or space separation.crates/biome_css_parser/src/syntax/selector/pseudo_class/mod.rs (1)
4-4: LGTM! Module and function references correctly updated.The module path and function call updates are consistent throughout. The parsing order is preserved — checking for comma-separated lists before falling back to single custom identifiers ensures correct precedence.
Also applies to: 41-44, 100-101
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_comma_separated_list.rs (4)
8-8: LGTM! Import and predicate correctly updated for comma-separated parsing.The trait change from
ParseNodeListtoParseSeparatedListis correct — comma-separated lists require the separated variant. The token set correctly restricts this parser to:active-view-transition-typeper the CSS spec.Also applies to: 14-15, 18-23
26-58: LGTM! Parse function correctly implements comma-separated list handling.The function properly validates non-empty lists, applies error recovery with
eat_or_recover_selector_function_close_token, and falls back toCSS_BOGUS_PSEUDO_CLASSon failure. The use ofexpected_non_css_wide_keyword_identifiercorrectly prevents CSS-wide keywords in this context.
60-90: LGTM! List implementation correctly enables comma separation.The trait change to
ParseSeparatedListwith the newseparating_element_kindmethod returningT![,]is the key change that implements comma-separated parsing per the CSS spec. The error recovery viaor_recoverfollows the coding guidelines for avoiding infinite loops in list parsing.
92-102: LGTM! Recovery implementation correctly handles parse errors.The recovery struct appropriately wraps unparseable tokens in
CSS_BOGUS_CUSTOM_IDENTIFIERand recovers at closing parenthesis or the next identifier, providing good error resilience per the coding guidelines.crates/biome_css_formatter/src/generated.rs (2)
4038-4053: Comma‑separated pseudo‑class custom identifier list wiring looks correct
FormatRule,AsFormat, andIntoFormatall consistently targetCssPseudoClassFunctionCustomIdentifierCommaSeparatedListandFormatCssPseudoClassFunctionCustomIdentifierCommaSeparatedList, matching the surrounding patterns, so the new list node should format correctly alongside the parser changes.
6847-6869: Separate formatter bindings for comma‑ vs space‑separated custom identifier lists are spot onBoth
CssCustomIdentifierCommaSeparatedListandCssCustomIdentifierSpaceSeparatedListare hooked up to their respectiveFormatCssCustomIdentifier*Listimplementations viaAsFormat/IntoFormatin the same style as other list nodes, which cleanly reflects the grammar split without introducing any inconsistencies here.
…o CssPseudoClassFunctionCustomIdentifierCommaSeparatedList" This reverts commit 772951d.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
xtask/codegen/css.ungram (1)
399-405: Update the example comment to reflect comma-separated syntax.Line 399's comment still shows the old space-separated format (
backwards forwards), but the grammar now expects comma-separated. Update it to match the new behaviour.🔎 Proposed fix
-// :active-view-transition-type(backwards forwards) { } +// :active-view-transition-type(backwards, forwards) { } // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ CssPseudoClassFunctionCustomIdentifierList = name: CssIdentifier '(' items: CssCustomIdentifierCommaSeparatedList ')'
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (9)
crates/biome_css_factory/src/generated/node_factory.rsis excluded by!**/generated/**,!**/generated/**and included by**crates/biome_css_factory/src/generated/syntax_factory.rsis excluded by!**/generated/**,!**/generated/**and included by**crates/biome_css_formatter/tests/specs/css/pseudo/pseudo_class_function_custom_identifier_list.css.snapis excluded by!**/*.snapand included by**crates/biome_css_parser/tests/css_test_suite/error/selector/pseudo_class/pseudo_class_function_custom_identifier_list_error.css.snapis excluded by!**/*.snapand included by**crates/biome_css_parser/tests/css_test_suite/ok/selector/pseudo_class/pseudo_class_function_custom_identifier_list.css.snapis excluded by!**/*.snapand included by**crates/biome_css_syntax/src/generated/kind.rsis excluded by!**/generated/**,!**/generated/**and included by**crates/biome_css_syntax/src/generated/macros.rsis excluded by!**/generated/**,!**/generated/**and included by**crates/biome_css_syntax/src/generated/nodes.rsis excluded by!**/generated/**,!**/generated/**and included by**crates/biome_css_syntax/src/generated/nodes_mut.rsis excluded by!**/generated/**,!**/generated/**and included by**
📒 Files selected for processing (8)
crates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_list.rs(2 hunks)crates/biome_css_formatter/src/generated.rs(1 hunks)crates/biome_css_formatter/tests/specs/css/pseudo/pseudo_class_function_custom_identifier_list.css(1 hunks)crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs(3 hunks)crates/biome_css_parser/tests/css_test_suite/error/selector/pseudo_class/pseudo_class_function_custom_identifier_list_error.css(1 hunks)crates/biome_css_parser/tests/css_test_suite/ok/selector/pseudo_class/pseudo_class_function_custom_identifier_list.css(1 hunks)xtask/codegen/css.ungram(2 hunks)xtask/codegen/src/css_kinds_src.rs(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
- crates/biome_css_formatter/src/css/pseudo/pseudo_class_function_custom_identifier_list.rs
- xtask/codegen/src/css_kinds_src.rs
🧰 Additional context used
📓 Path-based instructions (1)
**/*.rs
📄 CodeRabbit inference engine (CONTRIBUTING.md)
**/*.rs: Use inline rustdoc documentation for rules, assists, and their options
Use thedbg!()macro for debugging output in Rust tests and code
Use doc tests (doctest) format with code blocks in rustdoc comments; ensure assertions pass in tests
Files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rscrates/biome_css_formatter/src/generated.rs
🧠 Learnings (23)
📚 Learning: 2025-12-04T13:29:49.287Z
Learnt from: dyc3
Repo: biomejs/biome PR: 8291
File: crates/biome_html_formatter/tests/specs/prettier/vue/html-vue/elastic-header.html:10-10
Timestamp: 2025-12-04T13:29:49.287Z
Learning: Files under `crates/biome_html_formatter/tests/specs/prettier` are test fixtures synced from Prettier and should not receive detailed code quality reviews (e.g., HTTP vs HTTPS, formatting suggestions, etc.). These files are test data meant to validate formatter behavior and should be preserved as-is.
Applied to files:
crates/biome_css_formatter/tests/specs/css/pseudo/pseudo_class_function_custom_identifier_list.csscrates/biome_css_parser/tests/css_test_suite/error/selector/pseudo_class/pseudo_class_function_custom_identifier_list_error.css
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Use `ParseSeparatedList` and `ParseNodeList` for parsing lists with error recovery to avoid infinite loops
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Implement error recovery in list parsing using `or_recover()` to wrap unparseable tokens in a `BOGUS_*` node and consume tokens until a recovery token is found
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs
📚 Learning: 2025-11-24T18:05:27.810Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_js_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:27.810Z
Learning: Applies to crates/biome_js_formatter/**/*.rs : When formatting AST nodes, use mandatory tokens from the AST instead of hardcoding token strings (e.g., use `node.l_paren_token().format()` instead of `token("(")`)
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rscrates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Parse rule functions must be prefixed with `parse_` and use the name defined in the grammar file, e.g., `parse_for_statement` or `parse_expression`
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Use `ConditionalParsedSyntax` for syntax that is only valid in specific contexts (e.g., strict mode, file types, language versions) and call `or_invalid_to_bogus()` to convert to a bogus node if not supported
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Use `p.eat(token)` for optional tokens, `p.expect(token)` for required tokens, `parse_rule(p).ok(p)` for optional nodes, and `parse_rule(p).or_add_diagnostic(p, error)` for required nodes
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Parse rules must return `ParsedSyntax::Absent` if the rule can't predict by the next token(s) if they form the expected node, and must not progress the parser in this case
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : Parse rules must take a mutable reference to the parser as their only parameter and return a `ParsedSyntax`
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/*.ungram : Nodes for enclosing syntax errors must have the `Bogus` word, e.g., `HtmlBogusAttribute`, and must be part of a variant
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs
📚 Learning: 2025-11-24T18:06:03.545Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_parser/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:06:03.545Z
Learning: Applies to crates/biome_parser/**/src/**/*.rs : A parser struct must implement the `Parser` trait and save the token source, parser context, and optional parser options
Applied to files:
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Applies to crates/biome_formatter/**/biome_*_formatter/src/context.rs : Define `<Language>FormatContext` struct in a `context.rs` file containing `comments` and `source_map` fields, implementing `FormatContext` and `CstFormatContext` traits
Applied to files:
crates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:27.810Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_js_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:27.810Z
Learning: Applies to crates/biome_js_formatter/**/*.rs : Import the `FormatNode` trait and implement it for your Node when creating formatters in biome_js_formatter
Applied to files:
crates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Applies to crates/biome_formatter/**/biome_*_formatter/src/lib.rs : Define a type alias `<Language>Formatter<'buf>` as `Formatter<'buf, <Language>FormatContext>` in the main formatter crate
Applied to files:
crates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Applies to crates/biome_formatter/**/biome_*_formatter/tests/language.rs : Implement `TestFormatLanguage` trait in `tests/language.rs` for the formatter's test language
Applied to files:
crates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Applies to crates/biome_formatter/**/biome_*_formatter/src/lib.rs : Expose a public `format_node` function that accepts formatting options and a root syntax node, returning a `FormatResult<Formatted<Context>>` with appropriate documentation
Applied to files:
crates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-12-19T12:53:30.399Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2025-12-19T12:53:30.399Z
Learning: Applies to crates/biome_analyze/**/biome_rule_options/lib/**/*.rs : Wrap rule options fields in `Option<>` to properly track set and unset options during merge
Applied to files:
crates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Applies to crates/biome_formatter/**/biome_*_formatter/Cargo.toml : Include development dependencies in `Cargo.toml` for formatter tests: `biome_formatter_test`, `biome_<language>_factory`, `biome_<language>_parser`, `biome_parser`, `biome_service`, `countme`, `iai`, `quickcheck`, `quickcheck_macros`, and `tests_macros`
Applied to files:
crates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Applies to crates/biome_formatter/**/biome_*_formatter/src/comments.rs : Define `<Language>CommentStyle` as a public type alias for `Comments<<Language>Language>` in a `comments.rs` file
Applied to files:
crates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Implement the `AsFormat<Context>` trait in `lib.rs` with generic implementations for references, `SyntaxResult`, and `Option` types as provided in the formatter boilerplate code
Applied to files:
crates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Implement the `IntoFormat<Context>` trait in `lib.rs` with implementations for `SyntaxResult` and `Option` types as part of the formatter infrastructure
Applied to files:
crates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Define `FormatHtmlSyntaxNode` struct in a `cst.rs` file implementing `FormatRule<HtmlSyntaxNode>`, `AsFormat<HtmlFormatContext>`, and `IntoFormat<HtmlFormatContext>` traits using the provided boilerplate code
Applied to files:
crates/biome_css_formatter/src/generated.rs
📚 Learning: 2025-11-24T18:05:20.371Z
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2025-11-24T18:05:20.371Z
Learning: Implement the `FormatLanguage` trait with `SyntaxLanguage`, `Context`, and `FormatRule` associated types for the language's formatter
Applied to files:
crates/biome_css_formatter/src/generated.rs
🧬 Code graph analysis (1)
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs (1)
crates/biome_css_parser/src/syntax/at_rule/font_feature_values.rs (1)
separating_element_kind(103-105)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (13)
- GitHub Check: autofix
- GitHub Check: Test Node.js API
- GitHub Check: Parser conformance
- GitHub Check: Lint project (depot-windows-2022)
- GitHub Check: Bench (biome_css_analyze)
- GitHub Check: Documentation
- GitHub Check: Test (depot-windows-2022-16)
- GitHub Check: Test (depot-ubuntu-24.04-arm-16)
- GitHub Check: Bench (biome_css_parser)
- GitHub Check: Lint project (depot-ubuntu-24.04-arm-16)
- GitHub Check: End-to-end tests
- GitHub Check: Bench (biome_css_formatter)
- GitHub Check: Check Dependencies
🔇 Additional comments (9)
crates/biome_css_parser/tests/css_test_suite/error/selector/pseudo_class/pseudo_class_function_custom_identifier_list_error.css (1)
5-11: LGTM!The error test cases have been correctly updated to use comma-separated format whilst maintaining the invalid identifiers (numbers and strings) that should trigger parser errors.
crates/biome_css_parser/tests/css_test_suite/ok/selector/pseudo_class/pseudo_class_function_custom_identifier_list.css (1)
1-2: LGTM!Valid test case correctly updated to comma-separated format.
crates/biome_css_formatter/tests/specs/css/pseudo/pseudo_class_function_custom_identifier_list.css (1)
1-41: LGTM!Formatter test cases correctly demonstrate comma-separated formatting with various whitespace and indentation patterns, including trailing commas.
xtask/codegen/css.ungram (2)
798-799: LGTM!Correctly uses space-separated variant for font family names per CSS spec.
803-807: LGTM!The list type definitions are correctly structured and follow the naming convention requested in previous review feedback to clearly indicate the separator type.
crates/biome_css_parser/src/syntax/selector/pseudo_class/function_custom_identifier_list.rs (3)
8-8: LGTM!Correctly switched from
ParseNodeListtoParseSeparatedListto handle comma-separated identifiers.Also applies to: 59-59
62-62: LGTM!Constant correctly updated to reference the new comma-separated list kind from the grammar.
84-86: LGTM!The
separating_element_kindmethod correctly specifies comma as the separator, matching the implementation pattern fromfont_feature_values.rs.crates/biome_css_formatter/src/generated.rs (1)
6843-6865: New custom-identifier list wiring looks soundThe
AsFormat/IntoFormatimpls forCssCustomIdentifierCommaSeparatedListandCssCustomIdentifierSpaceSeparatedListfollow the existing generated pattern (Ref/Owned with the matchingcustom_identifier_*_separated_listrules) and line up with the new list split described in the PR. Assuming this file is wholly code‑generated from the updated grammar/codegen, this looks ready to go.
dyc3
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good. Thank you!
Note
AI Assistance Disclosure: To understand the project structure and find problems, I used Claude Code.
Summary
This PR fixes the parameters of
:active-view-transiton-typeso that it can accept comma-separated custom identifiers. The current implementation of it accepts space-separated, which does not follow the spec (MDN)To fix the problem, I defined
CssCustomIdentifierSpaceSeparatedListto distinguish it fromCssCustomIdentifierList. The former is for space-separated custom idents (which is currently used for@font-feature-values), and the latter is for comma-separated custom idents.Test Plan
:active-view-transition-type@font-feature-values(formatted result of css.snap not changed)Docs