@@ -368,24 +368,33 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
368368                if  self . is_fn_ty ( rcvr_ty,  span)  { 
369369                    if  let  SelfSource :: MethodCall ( expr)  = source { 
370370                        let  suggest = if  let  ty:: FnDef ( def_id,  _)  = rcvr_ty. kind ( )  { 
371-                             let  local_id = def_id. expect_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- 
376-                             if  let  Some ( fields)  = fields
377-                                 && let  Some ( DefKind :: Ctor ( of,  _) )  = self . tcx . opt_def_kind ( local_id)  { 
378-                                     Some ( ( fields,  of) ) 
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+                                 } 
379381                            }  else  { 
380-                                 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+                                 } 
381390                            } 
382391                        }  else  { 
383392                            None 
384393                        } ; 
385394
386395                        // If the function is a tuple constructor, we recommend that they call it 
387396                        if  let  Some ( ( fields,  kind) )  = suggest { 
388-                             suggest_call_constructor ( expr. span ,  kind,  fields. len ( ) ,  & mut  err) ; 
397+                             suggest_call_constructor ( expr. span ,  kind,  fields,  & mut  err) ; 
389398                        }  else  { 
390399                            // General case 
391400                            err. span_label ( 
0 commit comments