Skip to content

OR pattern in match arm makes rustfmt forget comment alignment #6060

Open
@tnull

Description

@tnull

When reformatting the following example:

let error_code = match err {
	msgs::DecodeError::UnknownVersion => 0x4000 | 1, // unknown realm byte
	msgs::DecodeError::UnknownRequiredFeature|
	msgs::DecodeError::InvalidValue|
	msgs::DecodeError::ShortRead => 0x4000 | 22, // invalid_onion_payload
	_ => 0x2000 | 2, // Should never happen
};

we receive this result:

let error_code = match err {
	msgs::DecodeError::UnknownVersion => 0x4000 | 1, // unknown realm byte
	msgs::DecodeError::UnknownRequiredFeature
	| msgs::DecodeError::InvalidValue
	| msgs::DecodeError::ShortRead => 0x4000 | 22, // invalid_onion_payload
	_ => 0x2000 | 2,                                 // Should never happen
};

Note that the comment at the end of the second match arm is unaligned with the others. For the third match arm rustfmt even introduces many whitespaces to ensure it's aligned with the in the first match arm. However, it seems that rustfmt entirely forgets about this alignment in the second match arm, presumably due to it being an OR pattern

This seems to happen independently from any particular config option or rustfmt version, but currently I'm using

> rustfmt --version
rustfmt 1.7.0-stable (82e1608d 2023-12-21)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions