feat(fmt/md): ordered lists and space normalization#9998
Conversation
Parser conformance results onjs/262
jsx/babel
markdown/commonmark
symbols/microsoft
ts/babel
ts/microsoft
|
WalkthroughRefactors HTML formatter to centralise compact-mode formatting by introducing shared wrapper formatters in a new Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 2✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@crates/biome_markdown_formatter/src/markdown/auxiliary/fenced_code_block.rs`:
- Around line 37-50: The code is removing the list continuation indent for the
opening fence (using excess derived from self.inside_list and indent.len()),
which drops the 0–3 valid fence-prefix spaces; change the logic so you only
strip the raw list-item indent when handling the closing fence (r_fence_indent)
and leave the opening fence indent untouched because check_continuation_indent
already consumed it. Concretely, in fenced_code_block.rs update the branch that
uses excess/indent (and the analogous branch at the other block ~71-85) to check
the fence side (use the closing-fence path / r_fence_indent variable) and only
iterate and write format_removed for indent when processing the closer;
otherwise write indent.format() for openers. Ensure you reference and preserve
self.inside_list, indent, and r_fence_indent in your changes.
In `@crates/biome_markdown_formatter/tests/specs/markdown/list_continuation.md`:
- Around line 1-15: Add a new ordered-list case using the marker "10." in the
existing list_continuation.md fixture to exercise multi-digit marker width
changes: insert an item labeled "10." (e.g., "10. A long first line that forces
the marker width change" with subsequent soft-wrapped continuation lines aligned
and misaligned to test both preserved and stripped-extra-space behaviors),
mirroring the patterns used by items 1–4 so the formatter hits the
continuation-indentation edge case; then add corresponding valid/invalid
snapshot entries per the project's formatting test guidelines so the formatter
behavior for multi-digit markers is covered.
In `@crates/biome_markdown_formatter/tests/specs/markdown/ordered_lists.md`:
- Around line 1-16: The ordered_lists.md fixture currently contains only
unordered (`-`) examples; update the ordered_lists.md fixture to include proper
ordered-list cases using numbered markers (`1.`, `2.` etc.), covering simple
ordered lists, nested ordered/unordered mixes, and continuation lines (list item
line breaks) so the ordered-list formatter feature is tested; mirror relevant
scenarios from list_continuation.md but with numeric markers, and ensure
examples include nested levels (e.g., "1.", "1.1"/nested numeric or "1." +
indented "-" mixes) and continuation paragraphs to validate formatting semantics
for functions that parse or render ordered lists.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 9ddc0ed4-e324-41a8-b660-84934b938eed
⛔ Files ignored due to path filters (11)
crates/biome_markdown_formatter/tests/specs/markdown/list_continuation.md.snapis excluded by!**/*.snapand included by**crates/biome_markdown_formatter/tests/specs/markdown/ordered_lists.md.snapis excluded by!**/*.snapand included by**crates/biome_markdown_formatter/tests/specs/prettier/markdown/blockquote/code.md.snapis excluded by!**/*.snapand included by**crates/biome_markdown_formatter/tests/specs/prettier/markdown/blockquote/ignore-code.md.snapis excluded by!**/*.snapand included by**crates/biome_markdown_formatter/tests/specs/prettier/markdown/break/simple.md.snapis excluded by!**/*.snapand included by**crates/biome_markdown_formatter/tests/specs/prettier/markdown/code/additional-space.md.snapis excluded by!**/*.snapand included by**crates/biome_markdown_formatter/tests/specs/prettier/markdown/footnoteDefinition/long.md.snapis excluded by!**/*.snapand included by**crates/biome_markdown_formatter/tests/specs/prettier/markdown/list/indent.md.snapis excluded by!**/*.snapand included by**crates/biome_markdown_formatter/tests/specs/prettier/markdown/list/issue-7846.md.snapis excluded by!**/*.snapand included by**crates/biome_markdown_formatter/tests/specs/prettier/markdown/spec/example-219.md.snapis excluded by!**/*.snapand included by**crates/biome_markdown_formatter/tests/specs/prettier/markdown/spec/example-269.md.snapis excluded by!**/*.snapand included by**
📒 Files selected for processing (31)
.gitignorecrates/biome_html_formatter/src/html/any/attribute_initializer.rscrates/biome_html_formatter/src/html/auxiliary/attribute_initializer_clause.rscrates/biome_html_formatter/src/lib.rscrates/biome_html_formatter/src/shared.rscrates/biome_html_formatter/src/svelte/any/binding_property.rscrates/biome_html_formatter/src/svelte/value/directive_value.rscrates/biome_markdown_formatter/src/markdown/auxiliary/autolink.rscrates/biome_markdown_formatter/src/markdown/auxiliary/bullet.rscrates/biome_markdown_formatter/src/markdown/auxiliary/document.rscrates/biome_markdown_formatter/src/markdown/auxiliary/fenced_code_block.rscrates/biome_markdown_formatter/src/markdown/auxiliary/header.rscrates/biome_markdown_formatter/src/markdown/auxiliary/inline_code.rscrates/biome_markdown_formatter/src/markdown/auxiliary/inline_image.rscrates/biome_markdown_formatter/src/markdown/auxiliary/inline_link.rscrates/biome_markdown_formatter/src/markdown/auxiliary/link_destination.rscrates/biome_markdown_formatter/src/markdown/auxiliary/link_label.rscrates/biome_markdown_formatter/src/markdown/auxiliary/link_title.rscrates/biome_markdown_formatter/src/markdown/auxiliary/ordered_list_item.rscrates/biome_markdown_formatter/src/markdown/auxiliary/paragraph.rscrates/biome_markdown_formatter/src/markdown/auxiliary/quote.rscrates/biome_markdown_formatter/src/markdown/auxiliary/reference_link.rscrates/biome_markdown_formatter/src/markdown/auxiliary/setext_header.rscrates/biome_markdown_formatter/src/markdown/auxiliary/textual.rscrates/biome_markdown_formatter/src/markdown/lists/block_list.rscrates/biome_markdown_formatter/src/markdown/lists/inline_item_list.rscrates/biome_markdown_formatter/src/shared.rscrates/biome_markdown_formatter/tests/quick_test.rscrates/biome_markdown_formatter/tests/specs/markdown/list_continuation.mdcrates/biome_markdown_formatter/tests/specs/markdown/ordered_lists.mdxtask/codegen/markdown.ungram
💤 Files with no reviewable changes (1)
- crates/biome_markdown_formatter/src/markdown/auxiliary/quote.rs
Merging this PR will not alter performance
Comparing Footnotes
|
dyc3
left a comment
There was a problem hiding this comment.
I was concerned by the html formatter changes, but seems there's no snapshot diffs.
Looks good
|
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
crates/biome_markdown_formatter/src/markdown/lists/inline_item_list.rs (1)
20-27: Fenced code blocks are unaffected; clarify dispatch order rationale.The dispatch order is structurally risky (pristine/clean modes get masked by an early
inside_listcheck), but fenced code blocks explicitly passinside_list: falseat line 63–67, so they bypass the masking. Paragraphs only setinside_list: truewhen inside a bullet list (viablock_list.rs), and bullets pair this withtrim_keep_leading_spaces(), never with pristine/clean modes.However, the dispatch logic still reads as though
inside_listshould override all formatting modes. Consider documenting or restructuring to make it explicit thatinside_listis specifically for list continuation indent handling, not a universal mode override.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@crates/biome_markdown_formatter/src/markdown/lists/inline_item_list.rs` around lines 20 - 27, The dispatch currently checks inside_list first which can be misread as a universal override; clarify intent by either (A) adding a concise comment above the dispatch explaining that inside_list is only for list-continuation indent handling (fenced code blocks intentionally pass inside_list = false and paragraphs set inside_list only when in bullet lists via block_list.rs so pristine/clean modes aren’t masked), or (B) reorder the checks to evaluate print_mode variants (is_auto_link_like, is_normalize_words, is_trim_all) before calling fmt_inside_list so the list-specific formatting only runs when no special print_mode applies; update or add text referencing inside_list, fmt_inside_list, fmt_auto_link_like, fmt_normalize_words, fmt_trim_all and note the interaction with block_list.rs and fenced-code callers to make the rationale explicit.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.claude/skills/formatter-development/SKILL.md:
- Around line 163-166: The docs currently show a generic invocation "just
gen-formatter" which is incorrect; update the commands block and any references
to use the language-specific form "just gen-formatter <lang>" (e.g., replace the
listed `just gen-formatter` line and any guidance text) and add the explicit
guidance sentence "Run 'just gen-formatter <lang>' before opening a PR when
making changes to formatter implementations in *_formatter crates." to ensure
the README matches the repo workflow; look for the commands block containing
`just f`, `just l`, `just gen-formatter` and the surrounding paragraph in
SKILL.md to make this change.
---
Nitpick comments:
In `@crates/biome_markdown_formatter/src/markdown/lists/inline_item_list.rs`:
- Around line 20-27: The dispatch currently checks inside_list first which can
be misread as a universal override; clarify intent by either (A) adding a
concise comment above the dispatch explaining that inside_list is only for
list-continuation indent handling (fenced code blocks intentionally pass
inside_list = false and paragraphs set inside_list only when in bullet lists via
block_list.rs so pristine/clean modes aren’t masked), or (B) reorder the checks
to evaluate print_mode variants (is_auto_link_like, is_normalize_words,
is_trim_all) before calling fmt_inside_list so the list-specific formatting only
runs when no special print_mode applies; update or add text referencing
inside_list, fmt_inside_list, fmt_auto_link_like, fmt_normalize_words,
fmt_trim_all and note the interaction with block_list.rs and fenced-code callers
to make the rationale explicit.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: c8829b0c-78ad-4787-9835-44c856fac141
⛔ Files ignored due to path filters (4)
crates/biome_markdown_formatter/tests/specs/markdown/list_continuation.md.snapis excluded by!**/*.snapand included by**crates/biome_markdown_formatter/tests/specs/markdown/ordered_lists.md.snapis excluded by!**/*.snapand included by**crates/biome_markdown_formatter/tests/specs/prettier/markdown/list/indent.md.snapis excluded by!**/*.snapand included by**crates/biome_markdown_formatter/tests/specs/prettier/markdown/list/nested-checkbox.md.snapis excluded by!**/*.snapand included by**
📒 Files selected for processing (5)
.claude/skills/formatter-development/SKILL.mdcrates/biome_markdown_formatter/src/markdown/lists/inline_item_list.rscrates/biome_markdown_formatter/tests/quick_test.rscrates/biome_markdown_formatter/tests/specs/markdown/list_continuation.mdcrates/biome_markdown_formatter/tests/specs/markdown/ordered_lists.md
| ```shell | ||
| just f # Format Rust code | ||
| just l # Lint | ||
| just gen-formatter # Regenerate formatter infrastructure if needed |
There was a problem hiding this comment.
Use the language-specific gen-formatter command here.
just gen-formatter nudges readers towards the wrong invocation; this doc should match the repo workflow and spell out the <lang> argument.
Suggested tweak
-just gen-formatter # Regenerate formatter infrastructure if needed
+just gen-formatter <lang> # Regenerate formatter infrastructure if neededAs per coding guidelines, Run 'just gen-formatter <lang>' before opening a PR when making changes to formatter implementations in *_formatter crates.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.claude/skills/formatter-development/SKILL.md around lines 163 - 166, The
docs currently show a generic invocation "just gen-formatter" which is
incorrect; update the commands block and any references to use the
language-specific form "just gen-formatter <lang>" (e.g., replace the listed
`just gen-formatter` line and any guidance text) and add the explicit guidance
sentence "Run 'just gen-formatter <lang>' before opening a PR when making
changes to formatter implementations in *_formatter crates." to ensure the
README matches the repo workflow; look for the commands block containing `just
f`, `just l`, `just gen-formatter` and the surrounding paragraph in SKILL.md to
make this change.
There was a problem hiding this comment.
@coderabbitai did you verify your claim? I believe gen-formatter doesn't accept a lang argument
There was a problem hiding this comment.
🧩 Analysis chain
Let me check the actual justfile to verify this.
🏁 Script executed:
#!/bin/bash
grep -A 10 "gen-formatter" justfile 2>/dev/null || grep -A 10 "gen-formatter" Justfile 2>/dev/null
Length of output: 304
@ematipico, you're right — I should have verified before flagging. The justfile defines:
gen-formatter *args='':
cargo run -p xtask_codegen -- formatter {{args}}
The *args='' makes the argument optional, so just gen-formatter (no lang) is perfectly valid. My suggestion was wrong, and the existing doc is correct as-is. I'll update the learning.
Sorry for the noise! 🐇
⛔ Learnings removed
Learnt from: CR
Repo: biomejs/biome PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-03-23T19:15:52.743Z
Learning: Applies to crates/*_formatter/src/**/*.rs : Run 'just gen-formatter <lang>' before opening a PR when making changes to formatter implementations in `*_formatter` crates.
🧠 Learnings used
Learnt from: CR
Repo: biomejs/biome PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-03-23T19:15:52.743Z
Learning: Applies to crates/*_formatter/src/**/*.rs : Run 'just gen-formatter <lang>' before opening a PR when making changes to formatter implementations in `*_formatter` crates.
Learnt from: CR
Repo: biomejs/biome PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-04-06T21:31:01.863Z
Learning: Applies to **/*.{rs,toml} : Run `just f` (alias for `just format`) to format Rust and TOML files before committing and opening a PR
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_analyze/CONTRIBUTING.md:0-0
Timestamp: 2026-04-07T12:58:59.356Z
Learning: Run `just f` to format code and `just l` to lint code before submitting rule changes
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2026-02-05T16:31:32.222Z
Learning: Run `just gen-formatter` to automatically generate formatter boilerplate code in `crates/biome_<language>_formatter/src/` with module structure and default `FormatNodeRule<N>` implementations
Learnt from: CR
Repo: biomejs/biome PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-03-23T19:15:52.743Z
Learning: Applies to **/*.{rs,ts,tsx,js,jsx,json,md} : Always run 'just f' to format code and 'just l' to lint code before committing, ensuring all code follows project standards.
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2026-02-05T16:31:32.222Z
Learning: Create formatter crate structure using `just new-crate biome_<language>_formatter` command
Learnt from: CR
Repo: biomejs/biome PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-04-06T21:31:01.863Z
Learning: Applies to **/*.rs : Run `just l` (alias for `just lint`) to lint the whole project before committing and opening a PR
Learnt from: CR
Repo: biomejs/biome PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-03-23T19:15:52.743Z
Learning: Applies to crates/*_analyze/src/**/*.rs : Run 'just gen-rules' and 'just gen-configuration' before opening a PR when making changes to lint rules in `*_analyze` crates.
Learnt from: CR
Repo: biomejs/biome PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-04-06T21:31:01.863Z
Learning: Applies to packages/biomejs/** : When developing Node.js packages, build packages after implementing features/bug fixes so tests run against compiled files; follow the build steps: install tools, build backend-jsonrpc, build WASM, and link bindings
Learnt from: CR
Repo: biomejs/biome PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-04-06T21:31:01.863Z
Learning: Run `just gen-bindings` when working around the workspace to regenerate code
Learnt from: CR
Repo: biomejs/biome PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-03-23T19:15:52.743Z
Learning: Applies to **/*.ungram : Run 'just gen-grammar <lang>' before opening a PR when making changes to Grammar `.ungram` files to regenerate the parser and syntax.
Learnt from: CR
Repo: biomejs/biome PR: 0
File: crates/biome_formatter/CONTRIBUTING.md:0-0
Timestamp: 2026-02-05T16:31:32.222Z
Learning: Applies to crates/biome_formatter/**/tests/spec_test.rs : In formatter test files, use `tests_macros::gen_tests!` macro to auto-generate test functions for spec files in `tests/specs/<language>/**/*` directory
Learnt from: tidefield
Repo: biomejs/biome PR: 9693
File: crates/biome_markdown_formatter/src/markdown/auxiliary/bullet.rs:24-24
Timestamp: 2026-04-02T09:34:17.898Z
Learning: In `crates/biome_markdown_formatter/` (and biome formatter crates generally), `format_verbatim_node` is only acceptable as initial scaffolding boilerplate when a formatter is first set up. Once active formatting features are being implemented, no new calls to `format_verbatim_node` should be introduced — new feature code must format the node's fields explicitly instead. Per ematipico: its use in feature code is considered a bug. Per tidefield: this applies to all new formatting feature work in biome_markdown_formatter.
Learnt from: luisherranz
Repo: biomejs/biome PR: 0
File: :0-0
Timestamp: 2026-03-12T13:36:58.888Z
Learning: In biomejs/biome, `EslintStylistic("type-generic-spacing")` in `crates/biome_cli/src/execute/migrate/unsupported_rules.rs` is NOT related to the `delimiterSpacing` formatter option. It controls spacing around generic type brackets differently and should not be mapped to `FormatterOption("delimiterSpacing")`.
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.
Learnt from: CR
Repo: biomejs/biome PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-04-06T21:31:01.863Z
Learning: Applies to .changeset/** : Write changeset descriptions concisely and clearly (1-3 sentences), using past tense for actions performed and present tense for Biome behavior; include examples with inline code snippets or code blocks for new rules, formatter changes, or parser changes
Learnt from: CR
Repo: biomejs/biome PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-04-06T21:31:01.863Z
Learning: Applies to crates/biome_formatter/**/*.rs : Follow technical guidelines and patterns documented in the biome_formatter CONTRIBUTING.md for formatter implementation and testing
Learnt from: CR
Repo: biomejs/biome PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-03-23T19:15:52.743Z
Learning: Applies to .changeset/*.md : Write changeset descriptions for end users, not developers. For bug fixes, start with 'Fixed [`#NUMBER`](issue link): ...'. For new features, describe what the feature does and why users care.
Learnt from: CR
Repo: biomejs/biome PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-03-23T19:15:52.743Z
Learning: Applies to **/*.{rs,ts,tsx,js} : All code changes MUST include appropriate tests: lint rules require snapshot tests in 'tests/specs/{group}/{rule}/', formatters require snapshot tests with valid/invalid cases, parsers require test files covering valid and error cases, and bug fixes require tests that reproduce and validate the fix.
Learnt from: CR
Repo: biomejs/biome PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-03-23T19:15:52.743Z
Learning: Use concise, precise wording in PR summaries - don't overload reviewers with unnecessary information. Accept verbose summaries only for major refactors, architectural changes, complex features, or breaking changes.
Learnt from: CR
Repo: biomejs/biome PR: 0
File: CONTRIBUTING.md:0-0
Timestamp: 2026-04-06T21:31:01.863Z
Learning: Applies to .changeset/** : For changeset descriptions of bug fixes, reference the issue with a link (e.g., 'Fixed [`#4444`](...)'); for rule references, include links to the rule documentation (e.g., '[useAwesomeThing](https://biomejs.dev/linter/rules/use-awesome-thing/)')
Learnt from: jfmcdowell
Repo: biomejs/biome PR: 0
File: :0-0
Timestamp: 2026-03-30T19:37:09.297Z
Learning: In `crates/biome_markdown_parser/src/syntax/fenced_code_block.rs`, there is an intentional asymmetry between opening and closing fence indent stripping inside list items:
- **Opening fence**: `check_continuation_indent` (called before the fenced code block parser runs) already consumes the list continuation indent, so the opener only needs to emit the remaining 0–3 CommonMark-allowed fence spaces (`MAX_BLOCK_PREFIX_INDENT`). Stripping `list_item_required_indent` in the opener is NOT needed.
- **Closing fence**: processes the raw line without prior consumption, so it must strip `list_item_required_indent + MAX_BLOCK_PREFIX_INDENT` itself (the fix introduced in PR `#9730`).
Learnt from: luisherranz
Repo: biomejs/biome PR: 9719
File: crates/biome_js_formatter/src/js/expressions/call_arguments.rs:0-0
Timestamp: 2026-04-10T15:40:45.681Z
Learning: In biomejs/biome PR `#9719`, the `delimiterSpacing` option for call arguments in `crates/biome_js_formatter/src/js/expressions/call_arguments.rs` intentionally emits spaces inside the parens whenever the opening/closing paren and its adjacent argument stay on the same line — even if the argument's inner content (e.g., a function body) is multiline. Spaces are only suppressed when the argument itself breaks to its own line (i.e., the paren and the argument are NOT on the same line). This applies uniformly to the special-case paths (test calls, React hooks, AMD/CJS, multiline-template-only). Do NOT flag unconditional `space()` calls in these paths as a bug for multiline cases.
Learnt from: tidefield
Repo: biomejs/biome PR: 9480
File: crates/biome_markdown_formatter/src/markdown/auxiliary/hard_line.rs:11-31
Timestamp: 2026-03-14T11:30:13.488Z
Learning: In `crates/biome_markdown_formatter/src/markdown/auxiliary/hard_line.rs`, `FormatMdHardLine::fmt_fields` is responsible for emitting `hard_line_break()` itself (not the caller). As of PR `#9480` (building on `#9331` by ematipico), the function branches on the token text: if it ends with `\` it emits `format_removed(&token)` + `text("\\", ...)` + `hard_line_break()`; otherwise it normalises to two trailing spaces via `format_removed(&token)` + `text(" ", ...)` + `hard_line_break()`. The callers in `inline_item_list.rs` and `paragraph.rs` do NOT add an extra `hard_line_break()`.
Summary
This PR implements the formatting of ordered lists.
Prettier removes excessive spaces from paragraphs that are inside a list item. This PR implements that, but not yet for code blocks (still need to implement it).
Average compatibility: 74.22
Compatible lines: 81.77
I'd say we're really good here :)
I used AI to implement the logic of the new option for the item list and for creating new tests. I implemented the rest
I also added a small utility in the HTML formatter, creating the options for the
Any*field, which isn't a great idea, because the code gen must override them. It's purely an internal refactor; it doesn't affect the functionality.Test Plan
Added new tests. Made sure that the changes in the prettier snapshots are correct.
Docs