1
Fork 0

Change wording to avoid being misleading

This commit is contained in:
Esteban Küber 2023-01-02 09:55:13 -08:00
parent 1eb828ecb1
commit 670a6f1ef5
8 changed files with 21 additions and 27 deletions

View file

@ -177,9 +177,17 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
} }
MethodError::IllegalSizedBound(candidates, needs_mut, bound_span, self_expr) => { MethodError::IllegalSizedBound(candidates, needs_mut, bound_span, self_expr) => {
let msg = format!("the `{}` method cannot be invoked on a trait object", item_name); let msg = if needs_mut {
with_forced_trimmed_paths!(format!(
"the `{item_name}` method cannot be invoked on `{rcvr_ty}`"
))
} else {
format!("the `{item_name}` method cannot be invoked on a trait object")
};
let mut err = self.sess().struct_span_err(span, &msg); let mut err = self.sess().struct_span_err(span, &msg);
err.span_label(bound_span, "this has a `Sized` requirement"); if !needs_mut {
err.span_label(bound_span, "this has a `Sized` requirement");
}
if !candidates.is_empty() { if !candidates.is_empty() {
let help = format!( let help = format!(
"{an}other candidate{s} {were} found in the following trait{s}, perhaps \ "{an}other candidate{s} {were} found in the following trait{s}, perhaps \

View file

@ -1,6 +1,6 @@
// run-rustfix // run-rustfix
fn test(t: &mut dyn Iterator<Item=&u64>) -> u64 { fn test(t: &mut dyn Iterator<Item=&u64>) -> u64 {
*t.min().unwrap() //~ ERROR the `min` method cannot be invoked on a trait object *t.min().unwrap() //~ ERROR the `min` method cannot be invoked on
} }
fn main() { fn main() {

View file

@ -1,6 +1,6 @@
// run-rustfix // run-rustfix
fn test(t: &dyn Iterator<Item=&u64>) -> u64 { fn test(t: &dyn Iterator<Item=&u64>) -> u64 {
*t.min().unwrap() //~ ERROR the `min` method cannot be invoked on a trait object *t.min().unwrap() //~ ERROR the `min` method cannot be invoked on
} }
fn main() { fn main() {

View file

@ -1,11 +1,8 @@
error: the `min` method cannot be invoked on a trait object error: the `min` method cannot be invoked on `&dyn Iterator<Item = &u64>`
--> $DIR/mutability-mismatch-arg.rs:3:9 --> $DIR/mutability-mismatch-arg.rs:3:9
| |
LL | *t.min().unwrap() LL | *t.min().unwrap()
| ^^^ | ^^^
--> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
|
= note: this has a `Sized` requirement
| |
help: you need `&mut dyn Iterator<Item = &u64>` instead of `&dyn Iterator<Item = &u64>` help: you need `&mut dyn Iterator<Item = &u64>` instead of `&dyn Iterator<Item = &u64>`
| |

View file

@ -4,7 +4,6 @@ pub trait MutTrait {
fn function(&mut self) fn function(&mut self)
where where
Self: Sized; Self: Sized;
//~^ this has a `Sized` requirement
} }
impl MutTrait for MutType { impl MutTrait for MutType {
@ -17,7 +16,6 @@ pub trait Trait {
fn function(&self) fn function(&self)
where where
Self: Sized; Self: Sized;
//~^ this has a `Sized` requirement
} }
impl Trait for Type { impl Trait for Type {
@ -26,9 +24,9 @@ impl Trait for Type {
fn main() { fn main() {
(&MutType as &dyn MutTrait).function(); (&MutType as &dyn MutTrait).function();
//~^ ERROR the `function` method cannot be invoked on a trait object //~^ ERROR the `function` method cannot be invoked on `&dyn MutTrait`
//~| HELP you need `&mut dyn MutTrait` instead of `&dyn MutTrait` //~| HELP you need `&mut dyn MutTrait` instead of `&dyn MutTrait`
(&mut Type as &mut dyn Trait).function(); (&mut Type as &mut dyn Trait).function();
//~^ ERROR the `function` method cannot be invoked on a trait object //~^ ERROR the `function` method cannot be invoked on `&mut dyn Trait`
//~| HELP you need `&dyn Trait` instead of `&mut dyn Trait` //~| HELP you need `&dyn Trait` instead of `&mut dyn Trait`
} }

View file

@ -1,20 +1,14 @@
error: the `function` method cannot be invoked on a trait object error: the `function` method cannot be invoked on `&dyn MutTrait`
--> $DIR/mutability-mismatch.rs:28:33 --> $DIR/mutability-mismatch.rs:26:33
| |
LL | Self: Sized;
| ----- this has a `Sized` requirement
...
LL | (&MutType as &dyn MutTrait).function(); LL | (&MutType as &dyn MutTrait).function();
| ^^^^^^^^ | ^^^^^^^^
| |
= help: you need `&mut dyn MutTrait` instead of `&dyn MutTrait` = help: you need `&mut dyn MutTrait` instead of `&dyn MutTrait`
error: the `function` method cannot be invoked on a trait object error: the `function` method cannot be invoked on `&mut dyn Trait`
--> $DIR/mutability-mismatch.rs:31:35 --> $DIR/mutability-mismatch.rs:29:35
| |
LL | Self: Sized;
| ----- this has a `Sized` requirement
...
LL | (&mut Type as &mut dyn Trait).function(); LL | (&mut Type as &mut dyn Trait).function();
| ^^^^^^^^ | ^^^^^^^^
| |

View file

@ -1,5 +1,5 @@
fn test(t: &dyn Iterator<Item=&u64>) -> u64 { fn test(t: &dyn Iterator<Item=&u64>) -> u64 {
t.min().unwrap() //~ ERROR the `min` method cannot be invoked on a trait object t.min().unwrap() //~ ERROR the `min` method cannot be invoked on `&dyn Iterator<Item = &u64>`
} }
fn main() { fn main() {

View file

@ -1,11 +1,8 @@
error: the `min` method cannot be invoked on a trait object error: the `min` method cannot be invoked on `&dyn Iterator<Item = &u64>`
--> $DIR/imm-ref-trait-object.rs:2:8 --> $DIR/imm-ref-trait-object.rs:2:8
| |
LL | t.min().unwrap() LL | t.min().unwrap()
| ^^^ | ^^^
--> $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
|
= note: this has a `Sized` requirement
| |
help: you need `&mut dyn Iterator<Item = &u64>` instead of `&dyn Iterator<Item = &u64>` help: you need `&mut dyn Iterator<Item = &u64>` instead of `&dyn Iterator<Item = &u64>`
| |