@@ -964,6 +964,8 @@ fn format_impl_ref_and_type(
964
964
ast:: ImplPolarity :: Positive => "" ,
965
965
} ;
966
966
967
+ let polarity_overhead;
968
+ let trait_ref_overhead;
967
969
if let Some ( ref trait_ref) = * trait_ref {
968
970
let result_len = last_line_width ( & result) ;
969
971
result. push_str ( & rewrite_trait_ref (
@@ -973,11 +975,14 @@ fn format_impl_ref_and_type(
973
975
polarity_str,
974
976
result_len,
975
977
) ?) ;
978
+ polarity_overhead = 0 ; // already written
979
+ trait_ref_overhead = " for" . len ( ) ;
980
+ } else {
981
+ polarity_overhead = polarity_str. len ( ) ;
982
+ trait_ref_overhead = 0 ;
976
983
}
977
984
978
985
// Try to put the self type in a single line.
979
- // ` for`
980
- let trait_ref_overhead = if trait_ref. is_some ( ) { 4 } else { 0 } ;
981
986
let curly_brace_overhead = if generics. where_clause . predicates . is_empty ( ) {
982
987
// If there is no where-clause adapt budget for type formatting to take space and curly
983
988
// brace into account.
@@ -988,7 +993,10 @@ fn format_impl_ref_and_type(
988
993
} else {
989
994
0
990
995
} ;
991
- let used_space = last_line_width ( & result) + trait_ref_overhead + curly_brace_overhead;
996
+ let used_space = last_line_width ( & result)
997
+ + polarity_overhead
998
+ + trait_ref_overhead
999
+ + curly_brace_overhead;
992
1000
// 1 = space before the type.
993
1001
let budget = context. budget ( used_space + 1 ) ;
994
1002
if let Some ( self_ty_str) = self_ty. rewrite ( context, Shape :: legacy ( budget, offset) ) {
@@ -997,6 +1005,7 @@ fn format_impl_ref_and_type(
997
1005
result. push_str ( " for " ) ;
998
1006
} else {
999
1007
result. push ( ' ' ) ;
1008
+ result. push_str ( polarity_str) ;
1000
1009
}
1001
1010
result. push_str ( & self_ty_str) ;
1002
1011
return Some ( result) ;
@@ -1010,8 +1019,10 @@ fn format_impl_ref_and_type(
1010
1019
result. push_str ( & new_line_offset. to_string ( context. config ) ) ;
1011
1020
if trait_ref. is_some ( ) {
1012
1021
result. push_str ( "for " ) ;
1022
+ } else {
1023
+ result. push_str ( polarity_str) ;
1013
1024
}
1014
- let budget = context. budget ( last_line_width ( & result) ) ;
1025
+ let budget = context. budget ( last_line_width ( & result) + polarity_overhead ) ;
1015
1026
let type_offset = match context. config . indent_style ( ) {
1016
1027
IndentStyle :: Visual => new_line_offset + trait_ref_overhead,
1017
1028
IndentStyle :: Block => new_line_offset,
0 commit comments