rcvr,
probe::ProbeScope::AllTraits,
) {
- err.span_label(
- pick.item.ident.span,
- &format!("the method is available for `{}` here", new_rcvr_t),
- );
+ debug!("try_alt_rcvr: pick candidate {:?}", pick);
+ // Make sure the method is defined for the *actual* receiver:
+ // we don't want to treat `Box<Self>` as a receiver if
+ // it only works because of an autoderef to `&self`
+ if pick.autoderefs == 0 {
+ err.span_label(
+ pick.item.ident.span,
+ &format!("the method is available for `{}` here", new_rcvr_t),
+ );
+ }
}
}
};
error[E0599]: no method named `method` found for struct `std::rc::Rc<&mut std::boxed::Box<&char>>` in the current scope
--> $DIR/no-method-suggested-traits.rs:32:43
|
-LL | fn method(&self) {}
- | ------
- | |
- | the method is available for `std::boxed::Box<std::rc::Rc<&mut std::boxed::Box<&char>>>` here
- | the method is available for `std::pin::Pin<std::rc::Rc<&mut std::boxed::Box<&char>>>` here
- | the method is available for `std::sync::Arc<std::rc::Rc<&mut std::boxed::Box<&char>>>` here
- | the method is available for `std::rc::Rc<std::rc::Rc<&mut std::boxed::Box<&char>>>` here
-...
LL | std::rc::Rc::new(&mut Box::new(&'a')).method();
| ^^^^^^ method not found in `std::rc::Rc<&mut std::boxed::Box<&char>>`
|
|
LL | std::rc::Rc::new(&mut Box::new(&1i32)).method();
| ^^^^^^ method not found in `std::rc::Rc<&mut std::boxed::Box<&i32>>`
- |
- ::: $DIR/auxiliary/no_method_suggested_traits.rs:8:12
- |
-LL | fn method(&self) {}
- | ------
- | |
- | the method is available for `std::boxed::Box<std::rc::Rc<&mut std::boxed::Box<&i32>>>` here
- | the method is available for `std::pin::Pin<std::rc::Rc<&mut std::boxed::Box<&i32>>>` here
- | the method is available for `std::sync::Arc<std::rc::Rc<&mut std::boxed::Box<&i32>>>` here
- | the method is available for `std::rc::Rc<std::rc::Rc<&mut std::boxed::Box<&i32>>>` here
|
= help: items from traits can only be used if the trait is in scope
help: the following trait is implemented but not in scope; perhaps add a `use` for it:
LL | struct S;
| --------- method `b` not found for this
...
-LL | fn b(&self) { }
- | -
- | |
- | the method is available for `std::boxed::Box<S>` here
- | the method is available for `std::sync::Arc<S>` here
- | the method is available for `std::rc::Rc<S>` here
-...
LL | S.b();
| ^ method not found in `S`
|