@@ -2251,26 +2251,39 @@ fn fn_sig_suggestion(
22512251 sig : & ty:: FnSig < ' _ > ,
22522252 ident : Ident ,
22532253 predicates : ty:: GenericPredicates < ' _ > ,
2254+ assoc : & ty:: AssocItem ,
22542255) -> String {
22552256 let args = sig
22562257 . inputs ( )
22572258 . iter ( )
2258- . map ( |ty| {
2259+ . enumerate ( )
2260+ . map ( |( i, ty) | {
22592261 Some ( match ty. kind {
2260- ty:: Param ( param ) if param . name == kw :: SelfUpper => "self" . to_string ( ) ,
2261- ty:: Ref ( reg, ref_ty, mutability) => {
2262+ ty:: Param ( _ ) if assoc . fn_has_self_parameter && i == 0 => "self" . to_string ( ) ,
2263+ ty:: Ref ( reg, ref_ty, mutability) if i == 0 => {
22622264 let reg = match & format ! ( "{}" , reg) [ ..] {
22632265 "'_" | "" => String :: new ( ) ,
22642266 reg => format ! ( "{} " , reg) ,
22652267 } ;
2266- match ref_ty. kind {
2267- ty:: Param ( param) if param. name == kw:: SelfUpper => {
2268- format ! ( "&{}{}self" , reg, mutability. prefix_str( ) )
2268+ if assoc. fn_has_self_parameter {
2269+ match ref_ty. kind {
2270+ ty:: Param ( param) if param. name == kw:: SelfUpper => {
2271+ format ! ( "&{}{}self" , reg, mutability. prefix_str( ) )
2272+ }
2273+
2274+ _ => format ! ( "self: {}" , ty) ,
22692275 }
2270- _ => format ! ( "_: {:?}" , ty) ,
2276+ } else {
2277+ format ! ( "_: {:?}" , ty)
2278+ }
2279+ }
2280+ _ => {
2281+ if assoc. fn_has_self_parameter && i == 0 {
2282+ format ! ( "self: {:?}" , ty)
2283+ } else {
2284+ format ! ( "_: {:?}" , ty)
22712285 }
22722286 }
2273- _ => format ! ( "_: {:?}" , ty) ,
22742287 } )
22752288 } )
22762289 . chain ( std:: iter:: once ( if sig. c_variadic { Some ( "..." . to_string ( ) ) } else { None } ) )
@@ -2309,6 +2322,7 @@ fn suggestion_signature(assoc: &ty::AssocItem, tcx: TyCtxt<'_>) -> String {
23092322 tcx. fn_sig ( assoc. def_id ) . skip_binder ( ) ,
23102323 assoc. ident ,
23112324 tcx. predicates_of ( assoc. def_id ) ,
2325+ assoc,
23122326 )
23132327 }
23142328 ty:: AssocKind :: Type => format ! ( "type {} = Type;" , assoc. ident) ,
0 commit comments