Add example to opaque_hidden_inferred_bound lint

This commit is contained in:
Michael Goulet 2022-10-02 19:07:31 +00:00
parent 426424b320
commit 7a8854037b

View File

@ -11,13 +11,44 @@ use crate::{LateContext, LateLintPass, LintContext};
declare_lint! {
/// The `opaque_hidden_inferred_bound` lint detects cases in which nested
/// `impl Trait` in associated type bounds are not written generally enough
/// to satisfy the bounds of the associated type. This functionality was
/// removed in #97346, but then rolled back in #99860 because it was made
/// into a hard error too quickly.
/// to satisfy the bounds of the associated type.
///
/// We plan on reintroducing this as a hard error, but in the mean time, this
/// lint serves to warn and suggest fixes for any use-cases which rely on this
/// behavior.
/// ### Explanation
///
/// This functionality was removed in #97346, but then rolled back in #99860
/// because it caused regressions.
///
/// We plan on reintroducing this as a hard error, but in the mean time,
/// this lint serves to warn and suggest fixes for any use-cases which rely
/// on this behavior.
///
/// ### Example
///
/// ```
/// trait Trait {
/// type Assoc: Send;
/// }
///
/// struct Struct;
///
/// impl Trait for Struct {
/// type Assoc = i32;
/// }
///
/// fn test() -> impl Trait<Assoc = impl Sized> {
/// Struct
/// }
/// ```
///
/// {{produces}}
///
/// In this example, `test` declares that the associated type `Assoc` for
/// `impl Trait` is `impl Sized`, which does not satisfy the `Send` bound
/// on the associated type.
///
/// Although the hidden type, `i32` does satisfy this bound, we do not
/// consider the return type to be well-formed with this lint. It can be
/// fixed by changing `impl Sized` into `impl Sized + Send`.
pub OPAQUE_HIDDEN_INFERRED_BOUND,
Warn,
"detects the use of nested `impl Trait` types in associated type bounds that are not general enough"