@@ -1125,90 +1125,107 @@ impl Rewrite for UseTree {
1125
1125
1126
1126
// This does NOT format attributes and visibility or add a trailing `;`.
1127
1127
fn rewrite_result ( & self , context : & RewriteContext < ' _ > , mut shape : Shape ) -> RewriteResult {
1128
- fn proceed (
1129
- context : & RewriteContext < ' _ > ,
1130
- span : & Span ,
1131
- shape : & Shape ,
1132
- curr_segment : & UseSegment ,
1133
- curr_segment_is_allow_overflow : bool ,
1134
- next_segment : Option < & & UseSegment > ,
1135
- ) -> Result < ( String , Shape ) , RewriteError > {
1136
- let mut rewritten_segment = curr_segment. rewrite_result ( context, shape. clone ( ) ) ?;
1137
- if next_segment. is_some ( ) {
1138
- rewritten_segment. push_str ( "::" ) ;
1139
- }
1140
- let reserved_room_for_brace = match next_segment. map ( |s| & s. kind ) {
1141
- Some ( UseSegmentKind :: List ( _) ) => "{" . len ( ) ,
1142
- _ => 0 ,
1143
- } ;
1144
- let next_shape = if matches ! ( & curr_segment. kind, UseSegmentKind :: List ( _) ) {
1145
- // This is the last segment and we won't use `next_shape`. Return `shape`
1146
- // unchanged.
1147
- shape. clone ( )
1148
- } else if curr_segment_is_allow_overflow {
1149
- // If the segment follows `use ` or newline, force to consume the segment with
1150
- // overflow.
1151
-
1152
- let s = shape. offset_left_maybe_overflow ( rewritten_segment. len ( ) ) ;
1153
- if s. width == 0 {
1154
- // We have to to commit current segment in this line. Make a room for next
1155
- // round.
1156
- s. add_width ( reserved_room_for_brace)
1157
- } else {
1158
- s. clone ( )
1128
+ if context. config . style_edition ( ) >= StyleEdition :: Edition2024 {
1129
+ fn proceed (
1130
+ context : & RewriteContext < ' _ > ,
1131
+ span : & Span ,
1132
+ shape : & Shape ,
1133
+ curr_segment : & UseSegment ,
1134
+ curr_segment_is_allow_overflow : bool ,
1135
+ next_segment : Option < & & UseSegment > ,
1136
+ ) -> Result < ( String , Shape ) , RewriteError > {
1137
+ let mut rewritten_segment = curr_segment. rewrite_result ( context, shape. clone ( ) ) ?;
1138
+ if next_segment. is_some ( ) {
1139
+ rewritten_segment. push_str ( "::" ) ;
1159
1140
}
1160
- } else {
1161
- let Some ( ret) = shape. offset_left ( rewritten_segment. len ( ) ) else {
1162
- return Err ( RewriteError :: ExceedsMaxWidth {
1163
- configured_width : shape. width ,
1164
- span : span. clone ( ) ,
1165
- } ) ;
1141
+ let reserved_room_for_brace = match next_segment. map ( |s| & s. kind ) {
1142
+ Some ( UseSegmentKind :: List ( _) ) => "{" . len ( ) ,
1143
+ _ => 0 ,
1166
1144
} ;
1167
- // Check that there is a room for the next "{". If not, return an error for retry
1168
- // with newline.
1169
- if ret. offset_left ( reserved_room_for_brace) . is_none ( ) {
1170
- return Err ( RewriteError :: ExceedsMaxWidth {
1171
- configured_width : shape. width ,
1172
- span : span. clone ( ) ,
1173
- } ) ;
1174
- }
1175
- ret
1176
- } ;
1177
- Ok ( ( rewritten_segment, next_shape) )
1178
- }
1145
+ let next_shape = if matches ! ( & curr_segment. kind, UseSegmentKind :: List ( _) ) {
1146
+ // This is the last segment and we won't use `next_shape`. Return `shape`
1147
+ // unchanged.
1148
+ shape. clone ( )
1149
+ } else if curr_segment_is_allow_overflow {
1150
+ // If the segment follows `use ` or newline, force to consume the segment with
1151
+ // overflow.
1152
+
1153
+ let s = shape. offset_left_maybe_overflow ( rewritten_segment. len ( ) ) ;
1154
+ if s. width == 0 {
1155
+ // We have to to commit current segment in this line. Make a room for next
1156
+ // round.
1157
+ s. add_width ( reserved_room_for_brace)
1158
+ } else {
1159
+ s. clone ( )
1160
+ }
1161
+ } else {
1162
+ let Some ( ret) = shape. offset_left ( rewritten_segment. len ( ) ) else {
1163
+ return Err ( RewriteError :: ExceedsMaxWidth {
1164
+ configured_width : shape. width ,
1165
+ span : span. clone ( ) ,
1166
+ } ) ;
1167
+ } ;
1168
+ // Check that there is a room for the next "{". If not, return an error for
1169
+ // retry with newline.
1170
+ if ret. offset_left ( reserved_room_for_brace) . is_none ( ) {
1171
+ return Err ( RewriteError :: ExceedsMaxWidth {
1172
+ configured_width : shape. width ,
1173
+ span : span. clone ( ) ,
1174
+ } ) ;
1175
+ }
1176
+ ret
1177
+ } ;
1178
+ Ok ( ( rewritten_segment, next_shape) )
1179
+ }
1179
1180
1180
- let shape_top_level = shape. clone ( ) ;
1181
- let mut result = String :: with_capacity ( 256 ) ;
1182
- let mut is_first = true ;
1183
- let mut iter = self . path . iter ( ) . peekable ( ) ;
1184
- let span = self . span ( ) ;
1185
- while let Some ( segment) = iter. next ( ) {
1186
- let allow_overflow = is_first;
1187
- is_first = false ;
1188
- match proceed ( context, & span, & shape, segment, allow_overflow, iter. peek ( ) ) {
1189
- Ok ( ( rewritten_segment, next_shape) ) => {
1190
- result. push_str ( & rewritten_segment) ;
1191
- shape = next_shape;
1192
- continue ;
1193
- }
1194
- Err ( RewriteError :: ExceedsMaxWidth { .. } ) => {
1195
- // If the first `proceed()` failed with no room, retry with newline.
1181
+ let shape_top_level = shape. clone ( ) ;
1182
+ let mut result = String :: with_capacity ( 256 ) ;
1183
+ let mut is_first = true ;
1184
+ let mut iter = self . path . iter ( ) . peekable ( ) ;
1185
+ let span = self . span ( ) ;
1186
+ while let Some ( segment) = iter. next ( ) {
1187
+ let allow_overflow = is_first;
1188
+ is_first = false ;
1189
+ match proceed ( context, & span, & shape, segment, allow_overflow, iter. peek ( ) ) {
1190
+ Ok ( ( rewritten_segment, next_shape) ) => {
1191
+ result. push_str ( & rewritten_segment) ;
1192
+ shape = next_shape;
1193
+ continue ;
1194
+ }
1195
+ Err ( RewriteError :: ExceedsMaxWidth { .. } ) => {
1196
+ // If the first `proceed()` failed with no room, retry with newline.
1197
+ }
1198
+ Err ( e) => {
1199
+ // Abort otherwise.
1200
+ return Err ( e) ;
1201
+ }
1196
1202
}
1197
- Err ( e) => {
1198
- // Abort otherwise.
1199
- return Err ( e) ;
1203
+ result. push_str ( "\n " ) ;
1204
+ result. push_str ( & " " . repeat ( shape. indent . block_indent + 4 ) ) ;
1205
+ shape = shape_top_level. clone ( ) ;
1206
+ let allow_overflow = true ;
1207
+ let ( rewritten_segment, next_shape) =
1208
+ proceed ( context, & span, & shape, segment, allow_overflow, iter. peek ( ) ) ?;
1209
+ result. push_str ( & rewritten_segment) ;
1210
+ shape = next_shape;
1211
+ }
1212
+ Ok ( result)
1213
+ } else {
1214
+ let mut result = String :: with_capacity ( 256 ) ;
1215
+ let mut iter = self . path . iter ( ) . peekable ( ) ;
1216
+ while let Some ( segment) = iter. next ( ) {
1217
+ let segment_str = segment. rewrite_result ( context, shape) ?;
1218
+ result. push_str ( & segment_str) ;
1219
+ if iter. peek ( ) . is_some ( ) {
1220
+ result. push_str ( "::" ) ;
1221
+ // 2 = "::"
1222
+ shape = shape
1223
+ . offset_left ( 2 + segment_str. len ( ) )
1224
+ . max_width_error ( shape. width , self . span ( ) ) ?;
1200
1225
}
1201
1226
}
1202
- result. push_str ( "\n " ) ;
1203
- result. push_str ( & " " . repeat ( shape. indent . block_indent + 4 ) ) ;
1204
- shape = shape_top_level. clone ( ) ;
1205
- let allow_overflow = true ;
1206
- let ( rewritten_segment, next_shape) =
1207
- proceed ( context, & span, & shape, segment, allow_overflow, iter. peek ( ) ) ?;
1208
- result. push_str ( & rewritten_segment) ;
1209
- shape = next_shape;
1227
+ Ok ( result)
1210
1228
}
1211
- Ok ( result)
1212
1229
}
1213
1230
}
1214
1231
0 commit comments