@@ -857,6 +857,8 @@ fn format_impl_ref_and_type(
857
857
ast:: ImplPolarity :: Positive => "" ,
858
858
} ;
859
859
860
+ let polarity_overhead;
861
+ let trait_ref_overhead;
860
862
if let Some ( ref trait_ref) = * trait_ref {
861
863
let result_len = last_line_width ( & result) ;
862
864
result. push_str ( & rewrite_trait_ref (
@@ -866,11 +868,14 @@ fn format_impl_ref_and_type(
866
868
polarity_str,
867
869
result_len,
868
870
) ?) ;
871
+ polarity_overhead = 0 ; // already written
872
+ trait_ref_overhead = " for" . len ( ) ;
873
+ } else {
874
+ polarity_overhead = polarity_str. len ( ) ;
875
+ trait_ref_overhead = 0 ;
869
876
}
870
877
871
878
// Try to put the self type in a single line.
872
- // ` for`
873
- let trait_ref_overhead = if trait_ref. is_some ( ) { 4 } else { 0 } ;
874
879
let curly_brace_overhead = if generics. where_clause . predicates . is_empty ( ) {
875
880
// If there is no where-clause adapt budget for type formatting to take space and curly
876
881
// brace into account.
@@ -881,7 +886,10 @@ fn format_impl_ref_and_type(
881
886
} else {
882
887
0
883
888
} ;
884
- let used_space = last_line_width ( & result) + trait_ref_overhead + curly_brace_overhead;
889
+ let used_space = last_line_width ( & result)
890
+ + polarity_overhead
891
+ + trait_ref_overhead
892
+ + curly_brace_overhead;
885
893
// 1 = space before the type.
886
894
let budget = context. budget ( used_space + 1 ) ;
887
895
if let Some ( self_ty_str) = self_ty. rewrite ( context, Shape :: legacy ( budget, offset) ) {
@@ -890,6 +898,7 @@ fn format_impl_ref_and_type(
890
898
result. push_str ( " for " ) ;
891
899
} else {
892
900
result. push ( ' ' ) ;
901
+ result. push_str ( polarity_str) ;
893
902
}
894
903
result. push_str ( & self_ty_str) ;
895
904
return Some ( result) ;
@@ -903,8 +912,10 @@ fn format_impl_ref_and_type(
903
912
result. push_str ( & new_line_offset. to_string ( context. config ) ) ;
904
913
if trait_ref. is_some ( ) {
905
914
result. push_str ( "for " ) ;
915
+ } else {
916
+ result. push_str ( polarity_str) ;
906
917
}
907
- let budget = context. budget ( last_line_width ( & result) ) ;
918
+ let budget = context. budget ( last_line_width ( & result) + polarity_overhead ) ;
908
919
let type_offset = match context. config . indent_style ( ) {
909
920
IndentStyle :: Visual => new_line_offset + trait_ref_overhead,
910
921
IndentStyle :: Block => new_line_offset,
0 commit comments