@@ -175,7 +175,15 @@ pub(crate) fn format_expr(
175
175
// not the `ast::Block` node we're about to rewrite. To prevent dropping inner
176
176
// attributes call `rewrite_block` directly.
177
177
// See https://github.com/rust-lang/rustfmt/issues/6158
178
- rewrite_block ( block, Some ( & expr. attrs ) , opt_label, context, shape) ?
178
+ rewrite_block_inner (
179
+ block,
180
+ Some ( & expr. attrs ) ,
181
+ opt_label,
182
+ true ,
183
+ context,
184
+ shape,
185
+ false ,
186
+ ) ?
179
187
}
180
188
_ => anon_const. rewrite_result ( context, shape) ?,
181
189
} ;
@@ -199,6 +207,7 @@ pub(crate) fn format_expr(
199
207
false ,
200
208
context,
201
209
shape,
210
+ true ,
202
211
)
203
212
}
204
213
}
@@ -628,7 +637,7 @@ fn rewrite_block(
628
637
context : & RewriteContext < ' _ > ,
629
638
shape : Shape ,
630
639
) -> RewriteResult {
631
- rewrite_block_inner ( block, attrs, label, true , context, shape)
640
+ rewrite_block_inner ( block, attrs, label, true , context, shape, true )
632
641
}
633
642
634
643
fn remove_nested_block (
@@ -638,6 +647,7 @@ fn remove_nested_block(
638
647
inner_block : & ast:: Block ,
639
648
context : & RewriteContext < ' _ > ,
640
649
shape : Shape ,
650
+ can_inner_be_removed : bool ,
641
651
) -> Option < RewriteResult > {
642
652
let pre_inner_block_span = mk_sp ( block. span . lo ( ) , block_expr. span . lo ( ) ) ;
643
653
let post_inner_block_span = mk_sp ( block_expr. span . hi ( ) , block. span . hi ( ) ) ;
@@ -647,12 +657,14 @@ fn remove_nested_block(
647
657
if immdiately_contains_comment {
648
658
return None ;
649
659
}
650
- Some ( rewrite_block (
660
+ Some ( rewrite_block_inner (
651
661
inner_block,
652
662
Some ( & block_expr. attrs ) ,
653
663
inner_label,
664
+ true ,
654
665
context,
655
666
shape,
667
+ can_inner_be_removed,
656
668
) )
657
669
}
658
670
@@ -663,13 +675,16 @@ fn rewrite_block_inner(
663
675
allow_single_line : bool ,
664
676
context : & RewriteContext < ' _ > ,
665
677
shape : Shape ,
678
+ can_be_removed : bool ,
666
679
) -> RewriteResult {
667
680
debug ! ( "rewrite_block : {:?}" , context. snippet( block. span) ) ;
668
681
let prefix = block_prefix ( context, block, shape) ?;
669
682
670
683
let no_attrs = attrs. is_none ( ) || attrs. unwrap ( ) . is_empty ( ) ;
671
684
672
685
if context. config . remove_nested_blocks ( )
686
+ && can_be_removed
687
+ && prefix. is_empty ( )
673
688
&& !is_unsafe_block ( block)
674
689
&& no_attrs
675
690
&& label. is_none ( )
@@ -685,6 +700,7 @@ fn rewrite_block_inner(
685
700
inner_block,
686
701
context,
687
702
shape,
703
+ true ,
688
704
) {
689
705
return rw;
690
706
}
@@ -701,6 +717,7 @@ fn rewrite_block_inner(
701
717
inner_block,
702
718
context,
703
719
shape,
720
+ false ,
704
721
) {
705
722
return Ok ( format ! ( "const {}" , rw?) ) ;
706
723
}
@@ -734,7 +751,7 @@ pub(crate) fn rewrite_let_else_block(
734
751
context : & RewriteContext < ' _ > ,
735
752
shape : Shape ,
736
753
) -> RewriteResult {
737
- rewrite_block_inner ( block, None , None , allow_single_line, context, shape)
754
+ rewrite_block_inner ( block, None , None , allow_single_line, context, shape, false )
738
755
}
739
756
740
757
// Rewrite condition if the given expression has one.
0 commit comments