Remove detail from label/note that is already available in other note
Remove the "which is required by `{root_obligation}`" post-script in "the trait `X` is not implemented for `Y`" explanation in E0277. This information is already conveyed in the notes explaining requirements, making it redundant while making the text (particularly in labels) harder to read. ``` error[E0277]: the trait bound `NotCopy: Copy` is not satisfied --> $DIR/wf-static-type.rs:10:13 | LL | static FOO: IsCopy<Option<NotCopy>> = IsCopy { t: None }; | ^^^^^^^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `NotCopy` | = note: required for `Option<NotCopy>` to implement `Copy` note: required by a bound in `IsCopy` --> $DIR/wf-static-type.rs:7:17 | LL | struct IsCopy<T:Copy> { t: T } | ^^^^ required by this bound in `IsCopy` ``` vs the prior ``` error[E0277]: the trait bound `NotCopy: Copy` is not satisfied --> $DIR/wf-static-type.rs:10:13 | LL | static FOO: IsCopy<Option<NotCopy>> = IsCopy { t: None }; | ^^^^^^^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `NotCopy`, which is required by `Option<NotCopy>: Copy` | = note: required for `Option<NotCopy>` to implement `Copy` note: required by a bound in `IsCopy` --> $DIR/wf-static-type.rs:7:17 | LL | struct IsCopy<T:Copy> { t: T } | ^^^^ required by this bound in `IsCopy` ```
This commit is contained in:
parent
2dece5bb62
commit
5b54286640
223 changed files with 407 additions and 418 deletions
|
@ -5105,24 +5105,13 @@ pub(super) fn get_explanation_based_on_obligation<'tcx>(
|
|||
_ => None,
|
||||
};
|
||||
|
||||
let pred = obligation.predicate;
|
||||
let (_, base) = obligation.cause.code().peel_derives_with_predicate();
|
||||
let post = if let ty::PredicateKind::Clause(clause) = pred.kind().skip_binder()
|
||||
&& let ty::ClauseKind::Trait(pred) = clause
|
||||
&& let Some(base) = base
|
||||
&& base.skip_binder() != pred
|
||||
{
|
||||
format!(", which is required by `{base}`")
|
||||
} else {
|
||||
String::new()
|
||||
};
|
||||
let desc = match ty_desc {
|
||||
Some(desc) => format!(" {desc}"),
|
||||
None => String::new(),
|
||||
};
|
||||
if let ty::PredicatePolarity::Positive = trait_predicate.polarity() {
|
||||
format!(
|
||||
"{pre_message}the trait `{}` is not implemented for{desc} `{}`{post}",
|
||||
"{pre_message}the trait `{}` is not implemented for{desc} `{}`",
|
||||
trait_predicate.print_modifiers_and_trait_path(),
|
||||
tcx.short_ty_string(trait_predicate.self_ty().skip_binder(), &mut None),
|
||||
)
|
||||
|
@ -5130,7 +5119,7 @@ pub(super) fn get_explanation_based_on_obligation<'tcx>(
|
|||
// "the trait bound `T: !Send` is not satisfied" reads better than "`!Send` is
|
||||
// not implemented for `T`".
|
||||
// FIXME: add note explaining explicit negative trait bounds.
|
||||
format!("{pre_message}the trait bound `{trait_predicate}` is not satisfied{post}")
|
||||
format!("{pre_message}the trait bound `{trait_predicate}` is not satisfied")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue