Change:
<ins> error[E0782]: trait objects must include the `dyn` keyword --> $DIR/suggest-blanket-impl-local-trait.rs:13:24 | LL | impl LocalTraitTwo for LocalTraitOne {} |                        ^^^^^^^^^^^^^ | help: add `dyn` keyword before this trait | LL - impl LocalTraitTwo for LocalTraitOne {} LL + impl LocalTraitTwo for dyn LocalTraitOne {} | help: alternatively use a blanket implementation to implement `LocalTraitTwo` for all types that also implement `LocalTraitOne` | LL | impl<T: LocalTraitOne> LocalTraitTwo for T {} |     ++++++++++++++++++                   ~ error[E0782]: trait objects must include the `dyn` keyword --> $DIR/suggest-blanket-impl-local-trait.rs:18:23 | LL | impl fmt::Display for LocalTraitOne { |                       ^^^^^^^^^^^^^ | help: add `dyn` keyword before this trait | LL - impl fmt::Display for LocalTraitOne { LL + impl fmt::Display for dyn LocalTraitOne { | error[E0782]: trait objects must include the `dyn` keyword --> $DIR/suggest-blanket-impl-local-trait.rs:26:23 | LL | impl fmt::Display for LocalTraitTwo + Send { |                       ^^^^^^^^^^^^^^^^^^^^ | help: add `dyn` keyword before this trait | LL - impl fmt::Display for LocalTraitTwo + Send { LL + impl fmt::Display for dyn LocalTraitTwo + Send { | error[E0782]: trait objects must include the `dyn` keyword --> $DIR/suggest-blanket-impl-local-trait.rs:34:24 | LL | impl LocalTraitOne for fmt::Display {} |                        ^^^^^^^^^^^^ | help: add `dyn` keyword before this trait | LL - impl LocalTraitOne for fmt::Display {} LL + impl LocalTraitOne for dyn fmt::Display {} | help: alternatively use a blanket implementation to implement `LocalTraitOne` for all types that also implement `fmt::Display` | LL | impl<T: fmt::Display> LocalTraitOne for T {} |     +++++++++++++++++                   ~ error[E0782]: trait objects must include the `dyn` keyword --> $DIR/suggest-blanket-impl-local-trait.rs:40:24 | LL | impl LocalTraitOne for fmt::Display + Send {} |                        ^^^^^^^^^^^^^^^^^^^ | help: add `dyn` keyword before this trait | LL - impl LocalTraitOne for fmt::Display + Send {} LL + impl LocalTraitOne for dyn fmt::Display + Send {} | help: alternatively use a blanket implementation to implement `LocalTraitOne` for all types that also implement `fmt::Display + Send` | LL | impl<T: fmt::Display + Send> LocalTraitOne for T {} |     ++++++++++++++++++++++++                   ~ error[E0782]: trait objects must include the `dyn` keyword --> $DIR/suggest-blanket-impl-local-trait.rs:46:29 | LL | impl<E> GenericTrait<E> for LocalTraitOne {} |                             ^^^^^^^^^^^^^ | help: add `dyn` keyword before this trait | LL - impl<E> GenericTrait<E> for LocalTraitOne {} LL + impl<E> GenericTrait<E> for dyn LocalTraitOne {} | help: alternatively use a blanket implementation to implement `GenericTrait<E>` for all types that also implement `LocalTraitOne` | LL | impl<E, T: LocalTraitOne> GenericTrait<E> for T {} |       ++++++++++++++++++                      ~ error[E0782]: trait objects must include the `dyn` keyword --> $DIR/suggest-blanket-impl-local-trait.rs:53:35 | LL | impl<T, E> GenericTraitTwo<E> for GenericTrait<T> {} |                                   ^^^^^^^^^^^^^^^ | help: add `dyn` keyword before this trait | LL - impl<T, E> GenericTraitTwo<E> for GenericTrait<T> {} LL + impl<T, E> GenericTraitTwo<E> for dyn GenericTrait<T> {} | help: alternatively use a blanket implementation to implement `GenericTraitTwo<E>` for all types that also implement `GenericTrait<T>` | LL | impl<T, E, U: GenericTrait<T>> GenericTraitTwo<E> for U {} |          ++++++++++++++++++++                         ~ error: aborting due to 7 previous errors For more information about this error, try `rustc --explain E0782`. </ins>

Discussion:
One of the big problems with the 2015-style trait object syntax (no ) was that users often write things like when what they really meant was . Back then, the error message would more often than not be some inscrutable message about , which would send them on a wild goose chase of adding bounds everywhere they could think of, leading to even more inscrutable messages. Now, the error message is clearer: it tells users they need to add for a trait object type. However, I find in many cases (most cases?) this is not what users actually want - what they actually want is the blanket impl. It would be helpful to have a note suggesting the correct syntax for a blanket impl, or better yet just presenting both correct syntaxes (impl for trait object and blanket impl) on equal footing and making it clear the difference between them. <!-- TRIAGEBOTSTART --<!-- TRIAGEBOTASSIGNSTART --<!-- TRIAGEBOTASSIGNDATASTARTTRIAGEBOTASSIGNDATAEND --<!-- TRIAGEBOTASSIGNEND --<!-- TRIAGEBOTEND --
claim
I work to reproduce this issue and start to understand what type of check we need to do, and in particular the work that we need to do is the following one: If the traits are local traits we can perform the suggestion of the blanket impls, for example in the following code But we need to skip the following suggestion in case we are using not local traits, like the following code here