Skip to content

Commit

Permalink
Prevent rustfmt from removing inner attributes in inline const blocks
Browse files Browse the repository at this point in the history
Fixes 6158
  • Loading branch information
WeiTheShinobi authored and ytmimi committed Jun 1, 2024
1 parent 871113e commit bf7bb56
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
12 changes: 11 additions & 1 deletion src/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,17 @@ pub(crate) fn format_expr(
| ast::ExprKind::While(..) => to_control_flow(expr, expr_type)
.and_then(|control_flow| control_flow.rewrite(context, shape)),
ast::ExprKind::ConstBlock(ref anon_const) => {
Some(format!("const {}", anon_const.rewrite(context, shape)?))
let rewrite = match anon_const.value.kind {
ast::ExprKind::Block(ref block, opt_label) => {
// Inner attributes are associated with the `ast::ExprKind::ConstBlock` node,
// not the `ast::Block` node we're about to rewrite. To prevent dropping inner
// attributes call `rewrite_block` directly.
// See https://github.com/rust-lang/rustfmt/issues/6158
rewrite_block(block, Some(&expr.attrs), opt_label, context, shape)?
}
_ => anon_const.rewrite(context, shape)?,
};
Some(format!("const {}", rewrite))
}
ast::ExprKind::Block(ref block, opt_label) => {
match expr_type {
Expand Down
7 changes: 7 additions & 0 deletions tests/target/issue_6158.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
fn main() {
const {
#![allow(clippy::assertions_on_constants)]

assert!(1 < 2);
}
}

0 comments on commit bf7bb56

Please sign in to comment.