@@ -178,6 +178,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
178
178
sugg_span,
179
179
idx,
180
180
self . tcx . sess . source_map ( ) ,
181
+ item. fn_has_self_parameter ,
181
182
) ;
182
183
}
183
184
}
@@ -220,6 +221,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
220
221
sugg_span,
221
222
idx,
222
223
self . tcx . sess . source_map ( ) ,
224
+ item. fn_has_self_parameter ,
223
225
) ;
224
226
}
225
227
}
@@ -1738,6 +1740,7 @@ fn print_disambiguation_help(
1738
1740
span : Span ,
1739
1741
candidate : Option < usize > ,
1740
1742
source_map : & source_map:: SourceMap ,
1743
+ fn_has_self_parameter : bool ,
1741
1744
) {
1742
1745
let mut applicability = Applicability :: MachineApplicable ;
1743
1746
let ( span, sugg) = if let ( ty:: AssocKind :: Fn , Some ( args) ) = ( kind, args) {
@@ -1756,9 +1759,14 @@ fn print_disambiguation_help(
1756
1759
. collect:: <Vec <_>>( )
1757
1760
. join( ", " ) ,
1758
1761
) ;
1762
+ let trait_name = if !fn_has_self_parameter {
1763
+ format ! ( "<{} as {}>" , rcvr_ty, trait_name)
1764
+ } else {
1765
+ trait_name
1766
+ } ;
1759
1767
( span, format ! ( "{}::{}{}" , trait_name, item_name, args) )
1760
1768
} else {
1761
- ( span. with_hi ( item_name. span . lo ( ) ) , format ! ( "{} ::" , trait_name) )
1769
+ ( span. with_hi ( item_name. span . lo ( ) ) , format ! ( "<{} as {}> ::" , rcvr_ty , trait_name) )
1762
1770
} ;
1763
1771
err. span_suggestion_verbose (
1764
1772
span,
0 commit comments