@@ -34,7 +34,6 @@ pub(crate) enum PathContext {
34
34
Import ,
35
35
}
36
36
37
- // Does not wrap on simple segments.
38
37
pub ( crate ) fn rewrite_path (
39
38
context : & RewriteContext < ' _ > ,
40
39
path_context : PathContext ,
@@ -115,24 +114,35 @@ where
115
114
if segment. ident . name == kw:: PathRoot {
116
115
continue ;
117
116
}
118
- if first {
119
- first = false ;
120
- } else {
117
+
118
+ if !first {
121
119
buffer. push_str ( "::" ) ;
122
120
}
123
121
124
- let extra_offset = extra_offset ( & buffer, shape) ;
125
- let new_shape = shape. shrink_left ( extra_offset, mk_sp ( span_lo, span_hi) ) ?;
122
+ let new_shape = match shape. shrink_left_opt ( extra_offset ( & buffer, shape) ) {
123
+ Some ( s) => s,
124
+ None => {
125
+ buffer. push ( '\n' ) ;
126
+ shape. shrink_left ( extra_offset ( & buffer, shape) , mk_sp ( span_lo, span_hi) ) ?
127
+ }
128
+ } ;
129
+
126
130
let segment_string = rewrite_segment (
127
131
path_context,
128
132
segment,
129
133
& mut span_lo,
130
134
span_hi,
131
135
context,
136
+ shape,
132
137
new_shape,
138
+ first,
133
139
) ?;
134
140
135
141
buffer. push_str ( & segment_string) ;
142
+
143
+ if first {
144
+ first = false ;
145
+ }
136
146
}
137
147
138
148
Ok ( buffer)
@@ -270,16 +280,37 @@ fn rewrite_segment(
270
280
span_hi : BytePos ,
271
281
context : & RewriteContext < ' _ > ,
272
282
shape : Shape ,
283
+ new_shape : Shape ,
284
+ first : bool ,
273
285
) -> RewriteResult {
274
286
let mut result = String :: with_capacity ( 128 ) ;
275
287
result. push_str ( rewrite_ident ( context, segment. ident ) ) ;
276
288
277
289
let ident_len = result. len ( ) ;
290
+
278
291
let span = mk_sp ( * span_lo, span_hi) ;
279
- let shape = if context. use_block_indent ( ) {
280
- shape. offset_left ( ident_len, span) ?
292
+
293
+ let new_shape = if context. use_block_indent ( ) {
294
+ new_shape. offset_left ( ident_len, span)
295
+ } else {
296
+ new_shape. shrink_left ( ident_len, span)
297
+ } ;
298
+
299
+ let shape = if first {
300
+ new_shape?
281
301
} else {
282
- shape. shrink_left ( ident_len, span) ?
302
+ match new_shape {
303
+ Ok ( s) => s,
304
+ Err ( _) => {
305
+ let mut shape = shape;
306
+ // dbg!(&shape);
307
+ shape. indent = shape. indent . block_indent ( context. config ) . block_only ( ) ;
308
+ // dbg!(&result, shape);
309
+ result. insert_str ( 0 , & shape. indent . to_string_with_newline ( context. config ) ) ;
310
+ // dbg!(&result);
311
+ shape
312
+ }
313
+ }
283
314
} ;
284
315
285
316
if let Some ( ref args) = segment. args {
0 commit comments