@@ -33,7 +33,7 @@ use matches::rewrite_match;
33
33
use overflow;
34
34
use pairs:: { rewrite_all_pairs, rewrite_pair, PairParts } ;
35
35
use patterns:: { can_be_overflowed_pat, is_short_pattern, TuplePatField } ;
36
- use rewrite:: { Rewrite , RewriteContext } ;
36
+ use rewrite:: { Rewrite , RewriteContext , RewriteStmt } ;
37
37
use shape:: { Indent , Shape } ;
38
38
use spanned:: Spanned ;
39
39
use string:: { rewrite_string, StringFormat } ;
@@ -455,7 +455,7 @@ fn rewrite_single_line_block(
455
455
) -> Option < String > {
456
456
if is_simple_block ( block, attrs, context. codemap ) {
457
457
let expr_shape = shape. offset_left ( last_line_width ( prefix) ) ?;
458
- let expr_str = block. stmts [ 0 ] . rewrite ( context, expr_shape) ?;
458
+ let expr_str = block. stmts [ 0 ] . rewrite ( context, expr_shape, false ) ?;
459
459
let label_str = rewrite_label ( label) ;
460
460
let result = format ! ( "{}{}{{ {} }}" , prefix, label_str, expr_str) ;
461
461
if result. len ( ) <= shape. width && !result. contains ( '\n' ) {
@@ -531,8 +531,13 @@ fn rewrite_block(
531
531
result
532
532
}
533
533
534
- impl Rewrite for ast:: Stmt {
535
- fn rewrite ( & self , context : & RewriteContext , shape : Shape ) -> Option < String > {
534
+ impl RewriteStmt for ast:: Stmt {
535
+ fn rewrite (
536
+ & self ,
537
+ context : & RewriteContext ,
538
+ shape : Shape ,
539
+ last_stmt_is_if : bool ,
540
+ ) -> Option < String > {
536
541
skip_out_of_file_lines_range ! ( context, self . span( ) ) ;
537
542
538
543
let result = match self . node {
@@ -545,12 +550,11 @@ impl Rewrite for ast::Stmt {
545
550
} ;
546
551
547
552
let shape = shape. sub_width ( suffix. len ( ) ) ?;
548
- let expr_type =
549
- if stmt_is_expr ( & self ) && context. snippet ( self . span ) . starts_with ( "if " ) {
550
- ExprType :: SubExpression
551
- } else {
552
- ExprType :: Statement
553
- } ;
553
+ let expr_type = if last_stmt_is_if {
554
+ ExprType :: SubExpression
555
+ } else {
556
+ ExprType :: Statement
557
+ } ;
554
558
format_expr ( ex, expr_type, context, shape) . map ( |s| s + suffix)
555
559
}
556
560
ast:: StmtKind :: Mac ( ..) | ast:: StmtKind :: Item ( ..) => None ,
@@ -750,11 +754,12 @@ impl<'a> ControlFlow<'a> {
750
754
751
755
let new_width = width. checked_sub ( pat_expr_str. len ( ) + fixed_cost) ?;
752
756
let expr = & self . block . stmts [ 0 ] ;
753
- let if_str = expr. rewrite ( context, Shape :: legacy ( new_width, Indent :: empty ( ) ) ) ?;
757
+ let if_str = expr. rewrite ( context, Shape :: legacy ( new_width, Indent :: empty ( ) ) , false ) ?;
754
758
755
759
let new_width = new_width. checked_sub ( if_str. len ( ) ) ?;
756
760
let else_expr = & else_node. stmts [ 0 ] ;
757
- let else_str = else_expr. rewrite ( context, Shape :: legacy ( new_width, Indent :: empty ( ) ) ) ?;
761
+ let else_str =
762
+ else_expr. rewrite ( context, Shape :: legacy ( new_width, Indent :: empty ( ) ) , false ) ?;
758
763
759
764
if if_str. contains ( '\n' ) || else_str. contains ( '\n' ) {
760
765
return None ;
@@ -1136,26 +1141,16 @@ pub fn stmt_is_expr(stmt: &ast::Stmt) -> bool {
1136
1141
}
1137
1142
}
1138
1143
1139
- fn stmt_is_if ( stmt : & ast:: Stmt ) -> bool {
1144
+ pub ( crate ) fn stmt_is_if ( stmt : & ast:: Stmt ) -> bool {
1140
1145
match stmt. node {
1141
- ast:: StmtKind :: Semi ( ref e) | ast:: StmtKind :: Expr ( ref e) => {
1142
- match e. node {
1143
- ast:: ExprKind :: If ( ..) => true ,
1144
- _ => false ,
1145
- }
1146
+ ast:: StmtKind :: Semi ( ref e) | ast:: StmtKind :: Expr ( ref e) => match e. node {
1147
+ ast:: ExprKind :: If ( ..) => true ,
1148
+ _ => false ,
1146
1149
} ,
1147
1150
_ => false ,
1148
1151
}
1149
1152
}
1150
1153
1151
- fn block_last_stmt_is_if ( block : & ast:: Block ) -> bool {
1152
- if let Some ( ref stmt) = block. stmts . last ( ) {
1153
- stmt_is_if ( stmt)
1154
- } else {
1155
- false
1156
- }
1157
- }
1158
-
1159
1154
pub fn is_unsafe_block ( block : & ast:: Block ) -> bool {
1160
1155
if let ast:: BlockCheckMode :: Unsafe ( ..) = block. rules {
1161
1156
true
0 commit comments