@@ -34,7 +34,6 @@ pub(crate) enum PathContext {
3434 Import ,
3535}
3636
37- // Does not wrap on simple segments.
3837pub ( crate ) fn rewrite_path (
3938 context : & RewriteContext < ' _ > ,
4039 path_context : PathContext ,
@@ -115,24 +114,35 @@ where
115114 if segment. ident . name == kw:: PathRoot {
116115 continue ;
117116 }
118- if first {
119- first = false ;
120- } else {
117+
118+ if !first {
121119 buffer. push_str ( "::" ) ;
122120 }
123121
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+
126130 let segment_string = rewrite_segment (
127131 path_context,
128132 segment,
129133 & mut span_lo,
130134 span_hi,
131135 context,
136+ shape,
132137 new_shape,
138+ first,
133139 ) ?;
134140
135141 buffer. push_str ( & segment_string) ;
142+
143+ if first {
144+ first = false ;
145+ }
136146 }
137147
138148 Ok ( buffer)
@@ -270,16 +280,37 @@ fn rewrite_segment(
270280 span_hi : BytePos ,
271281 context : & RewriteContext < ' _ > ,
272282 shape : Shape ,
283+ new_shape : Shape ,
284+ first : bool ,
273285) -> RewriteResult {
274286 let mut result = String :: with_capacity ( 128 ) ;
275287 result. push_str ( rewrite_ident ( context, segment. ident ) ) ;
276288
277289 let ident_len = result. len ( ) ;
290+
278291 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?
281301 } 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+ }
283314 } ;
284315
285316 if let Some ( ref args) = segment. args {
0 commit comments