You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
prevent unnecessary indent when formatting doc comment code snippets
Fixes 5623
When formatting code snippets in doc comments, we start by wrapping the
content of the code block in an `fn main(){}` and add indentation. We do
this because we're about to create an internal rustfmt `Session` that
will try to parse the input snippet as a crate. In order for that
operation to succeed the snippet can only contain top level items like
function definitions.
To illustrate the transformation, assume we're starting with the following
doc comment:
```rust
//! ```rust
//! let x = "hello world!";
//! ```
```
After the transformation rustfmt will actually try to format this:
```rust
fn main() {
let x = "hello world!";
}
```
It turns out that during the transformation described above, we sometimes
add indentation to empty lines. This normally isn't an issue because
rustfmt removes the redundant indentation while reformatting, but in the
event a user adds an inner `#![rustfmt::skip]` attribute to their doc
comment snippet the inner attribute will be applied to the `fn main(){}`
and we'll leave the erroneous indentation in place.
So this is what rustfmt will try to reformat:
```rust
fn main() {
#![rustfmt::skip]
// ... the rest of the doc comment snippet
}
```
To prevent this issue entirely we won't add indentation to any line
that is empty or only contains whitespace.
0 commit comments