@@ -367,24 +367,34 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
367367
368368                if  self . is_fn_ty ( rcvr_ty,  span)  { 
369369                    if  let  SelfSource :: MethodCall ( expr)  = source { 
370-                         let  suggest = if  let  ty:: FnDef ( def_id,  _)  = rcvr_ty. kind ( )  && let  Some ( local_id)  = def_id. as_local ( )  { 
371-                             let  hir_id = tcx. hir ( ) . local_def_id_to_hir_id ( local_id) ; 
372-                             let  node = tcx. hir ( ) . get ( hir_id) ; 
373-                             let  fields = node. tuple_fields ( ) ; 
374- 
375-                             if  let  Some ( fields)  = fields
376-                                 && let  Some ( DefKind :: Ctor ( of,  _) )  = self . tcx . opt_def_kind ( local_id)  { 
377-                                     Some ( ( fields,  of) ) 
370+                         let  suggest = if  let  ty:: FnDef ( def_id,  _)  = rcvr_ty. kind ( )  { 
371+                             if  let  Some ( local_id)  = def_id. as_local ( )  { 
372+                                 let  hir_id = tcx. hir ( ) . local_def_id_to_hir_id ( local_id) ; 
373+                                 let  node = tcx. hir ( ) . get ( hir_id) ; 
374+                                 let  fields = node. tuple_fields ( ) ; 
375+                                 if  let  Some ( fields)  = fields
376+                                     && let  Some ( DefKind :: Ctor ( of,  _) )  = self . tcx . opt_def_kind ( local_id)  { 
377+                                         Some ( ( fields. len ( ) ,  of) ) 
378+                                 }  else  { 
379+                                     None 
380+                                 } 
378381                            }  else  { 
379-                                 None 
382+                                 // The logic here isn't smart but `associated_item_def_ids` 
383+                                 // doesn't work nicely on local. 
384+                                 if  let  DefKind :: Ctor ( of,  _)  = tcx. def_kind ( def_id)  { 
385+                                     let  parent_def_id = tcx. parent ( * def_id) ; 
386+                                     Some ( ( tcx. associated_item_def_ids ( parent_def_id) . len ( ) ,  of) ) 
387+                                 }  else  { 
388+                                     None 
389+                                 } 
380390                            } 
381391                        }  else  { 
382392                            None 
383393                        } ; 
384394
385395                        // If the function is a tuple constructor, we recommend that they call it 
386396                        if  let  Some ( ( fields,  kind) )  = suggest { 
387-                             suggest_call_constructor ( expr. span ,  kind,  fields. len ( ) ,  & mut  err) ; 
397+                             suggest_call_constructor ( expr. span ,  kind,  fields,  & mut  err) ; 
388398                        }  else  { 
389399                            // General case 
390400                            err. span_label ( 
0 commit comments