Skip to content

wrap_comments partially ignores comment_width with bullet lists #6801

@cyphar

Description

@cyphar

In some fairly specific circumstances, rustfmt with wrap_comments=true will allow comments to wrap a few characters beyond the configured comment_width. So far I have managed to only hit this a few times with bullet points in comments of the following form (these examples were hard-wrapped manually by me and are all within 80 columns -- I would expect rustfmt to do nothing as as result):

// * aaa Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
//   aaq tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
//   aaa veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
//   aaa commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
//   aaa velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
//   aaa occaecat cupidatat non proident, sunt in culpa qui officia deserunt
//   aaa mollit anim id est laborum.

fn bad_comment() {
    // * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
    //   tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
    //   veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
    //   commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
    //   velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
    //   occaecat cupidatat non proident, sunt in culpa qui officia deserunt
    //   mollit anim id est laborum.

    ()
}

fn comment_ignored() {
    foobar();

    // * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
    //   tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
    //   veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
    //   commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
    //   velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
    //   occaecat cupidatat non proident, sunt in culpa qui officia deserunt
    //   mollit anim id est laborum.
}

If you then try to use rustfmt you will see that it suggests wrappings that exceed 80 characters for a few lines where the continuing word is short. Note that it seems there must be something after the comment for comments in functions -- comment_ignored is accepted by rustfmt despite having identical comment text to bad_comment.

% rustc +nightly --version
rustc 1.95.0-nightly (7057231bd 2026-02-11)
% rustfmt +nightly --version
rustfmt 1.8.0-nightly (7057231bd7 2026-02-11)
% % rustfmt +nightly --config=wrap_comments=true --check test.rs
Diff in /home/cyphar/tmp/foo.rs:2:
 //   aaq tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
 //   aaa veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
 //   aaa commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
-//   aaa velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
-//   aaa occaecat cupidatat non proident, sunt in culpa qui officia deserunt
-//   aaa mollit anim id est laborum.
+//   aaa velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint aaa
+//   occaecat cupidatat non proident, sunt in culpa qui officia deserunt aaa
+//   mollit anim id est laborum.

 fn bad_comment() {
     // * Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
Diff in /home/cyphar/tmp/foo.rs:11:
     //   tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
     //   veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
     //   commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
-    //   velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
-    //   occaecat cupidatat non proident, sunt in culpa qui officia deserunt
-    //   mollit anim id est laborum.
+    //   velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
+    //   cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
+    //   est laborum.

     ()
 }
Diff in /home/cyphar/tmp/foo.rs:34:
 //   aaq tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
 //   aaa veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
 //   aaa commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
-//   aaa velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
-//   aaa occaecat cupidatat non proident, sunt in culpa qui officia deserunt
-//   aaa mollit anim id est laborum.
+//   aaa velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint aaa
+//   occaecat cupidatat non proident, sunt in culpa qui officia deserunt aaa
+//   mollit anim id est laborum.

As far as I can see, this occurs on all editions.

Metadata

Metadata

Labels

C-bugCategory: this is a bug; use also I-* labels for specific bug kinds, e.g. I-non-idempotency or I-ICEUO-wrap_commentsUnstable option: wrap_comments

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions