mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-03 20:23:59 +00:00
9b45cfdbdd
This change tweaks the error message generation to actually use the `#[do_not_recommend]` attribute if present by just skipping the marked trait impl in favour of the parent impl. It also adds a compile test for this behaviour. Without this change the test would output the following error: ``` error[E0277]: the trait bound `&str: Expression` is not satisfied --> /home/weiznich/Documents/rust/rust/tests/ui/diagnostic_namespace/do_not_recommend.rs:53:15 | LL | SelectInt.check("bar"); | ^^^^^ the trait `Expression` is not implemented for `&str`, which is required by `&str: AsExpression<Integer>` | = help: the following other types implement trait `Expression`: Bound<T> SelectInt note: required for `&str` to implement `AsExpression<Integer>` --> /home/weiznich/Documents/rust/rust/tests/ui/diagnostic_namespace/do_not_recommend.rs:26:13 | LL | impl<T, ST> AsExpression<ST> for T | ^^^^^^^^^^^^^^^^ ^ LL | where LL | T: Expression<SqlType = ST>, | ------------------------ unsatisfied trait bound introduced here ``` Note how that mentions `&str: Expression` before and now mentions `&str: AsExpression<Integer>` instead which is much more helpful for users. Open points for further changes before stabilization: * We likely want to move the attribute to the `#[diagnostic]` namespace to relax the guarantees given? * How does it interact with the new trait solver? |
||
---|---|---|
.. | ||
auxiliary | ||
do_not_recommend | ||
on_unimplemented | ||
can_use_the_diagnostic_name_in_other_places.rs | ||
deny_malformed_attribute.rs | ||
deny_malformed_attribute.stderr | ||
existing_proc_macros.rs | ||
malformed_foreign_on_unimplemented.rs | ||
malformed_foreign_on_unimplemented.stderr | ||
non_existing_attributes_accepted.rs | ||
non_existing_attributes_accepted.stderr | ||
requires_path.rs | ||
requires_path.stderr | ||
suggest_typos.rs | ||
suggest_typos.stderr |