Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

avrabe
Copy link

@avrabe avrabe commented Aug 10, 2025

Fixes #6571

Problem

rustfmt panics with Option::unwrap() on a None value when formatting enums with very long generic type constraints. This occurs when the generic constraints exceed the available width budget (~80-100 characters), causing rewrite_generics to fail and format_generics to return None, which is then unwrapped.

Solution

This PR implements a three-tier fallback strategy in format_generics:

  1. First attempt: Try formatting with normal width constraint
  2. Second attempt: If that fails, retry with infinite width using shape.infinite_width()
  3. Fallback: If even that fails, preserve the original source formatting

Changes

  • Modified format_generics function in src/items.rs to handle width budget exhaustion gracefully
  • Added regression test case issue-6571.rs to prevent future regressions

Testing

  • All existing tests pass
  • New regression test verifies the fix works for complex generic constraints
  • Tested on the original failing codebase that triggered the issue

This fix ensures rustfmt can process files with complex generic constraints without crashing, while maintaining proper formatting where possible.

Handle cases where rewrite_generics fails due to long generic constraints
by implementing a fallback to infinite width and preserving original
formatting when necessary.
@ding-young
Copy link
Contributor

ding-young commented Aug 31, 2025

Hi, I just came across your PR. Would it be alright if I try it out to see if #6396 fixes the unwrap error in that test case? (This seems orthogonal to the mentioned PR though, so just to verify whether the issue is duplicate or not)

@avrabe
Copy link
Author

avrabe commented Sep 1, 2025

@ding-young Sure, would be good to see. https://github.com/pulseengine/wrt is where my problem originate from. My patch makes this repository format again. Otherwise it actually stripped away code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

rustfmt panic: Option::unwrap() on None value in items.rs:562
3 participants