@@ -3498,7 +3498,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
3498
3498
err,
3499
3499
pick. item . def_id ,
3500
3500
rcvr. hir_id ,
3501
- * rcvr_ty,
3501
+ Some ( * rcvr_ty) ,
3502
3502
) ;
3503
3503
if pick. autoderefs == 0 && !trait_in_other_version_found {
3504
3504
err. span_label (
@@ -3689,8 +3689,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
3689
3689
if let SelfSource :: QPath ( ty) = source
3690
3690
&& !valid_out_of_scope_traits. is_empty ( )
3691
3691
&& let hir:: TyKind :: Path ( path) = ty. kind
3692
- && let hir:: QPath :: Resolved ( _, path) = path
3693
- && let Some ( def_id) = path. res . opt_def_id ( )
3692
+ && let hir:: QPath :: Resolved ( ..) = path
3694
3693
&& let Some ( assoc) = self
3695
3694
. tcx
3696
3695
. associated_items ( valid_out_of_scope_traits[ 0 ] )
@@ -3700,7 +3699,8 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
3700
3699
// See if the `Type::function(val)` where `function` wasn't found corresponds to a
3701
3700
// `Trait` that is imported directly, but `Type` came from a different version of the
3702
3701
// same crate.
3703
- let rcvr_ty = self . tcx . type_of ( def_id) . instantiate_identity ( ) ;
3702
+
3703
+ let rcvr_ty = self . node_ty_opt ( ty. hir_id ) ;
3704
3704
trait_in_other_version_found = self . detect_and_explain_multiple_crate_versions (
3705
3705
err,
3706
3706
assoc. def_id ,
@@ -4080,7 +4080,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
4080
4080
err : & mut Diag < ' _ > ,
4081
4081
item_def_id : DefId ,
4082
4082
hir_id : hir:: HirId ,
4083
- rcvr_ty : Ty < ' _ > ,
4083
+ rcvr_ty : Option < Ty < ' _ > > ,
4084
4084
) -> bool {
4085
4085
let hir_id = self . tcx . parent_hir_id ( hir_id) ;
4086
4086
let Some ( traits) = self . tcx . in_scope_traits ( hir_id) else { return false } ;
@@ -4110,8 +4110,10 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
4110
4110
let mut multi_span: MultiSpan = trait_span. into ( ) ;
4111
4111
multi_span. push_span_label ( trait_span, format ! ( "this is the trait that is needed" ) ) ;
4112
4112
let descr = self . tcx . associated_item ( item_def_id) . descr ( ) ;
4113
+ let rcvr_ty =
4114
+ rcvr_ty. map ( |t| format ! ( "`{t}`" ) ) . unwrap_or_else ( || "the receiver" . to_string ( ) ) ;
4113
4115
multi_span
4114
- . push_span_label ( item_span, format ! ( "the {descr} is available for ` {rcvr_ty}` here" ) ) ;
4116
+ . push_span_label ( item_span, format ! ( "the {descr} is available for {rcvr_ty} here" ) ) ;
4115
4117
for ( def_id, import_def_id) in candidates {
4116
4118
if let Some ( import_def_id) = import_def_id {
4117
4119
multi_span. push_span_label (
0 commit comments