| use rustc_errors::E0799; | |
| use rustc_macros::Diagnostic; | |
| use rustc_span::{Span, Symbol}; | |
| #[derive(Diagnostic)] | |
| #[diag("`impl Trait` must mention all {$kind} parameters in scope in `use<...>`")] | |
| #[note( | |
| "currently, all {$kind} parameters are required to be mentioned in the precise captures list" | |
| )] | |
| pub(crate) struct ParamNotCaptured { | |
| #[primary_span] | |
| pub opaque_span: Span, | |
| #[label("{$kind} parameter is implicitly captured by this `impl Trait`")] | |
| pub param_span: Span, | |
| pub kind: &'static str, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("`impl Trait` must mention the `Self` type of the trait in `use<...>`")] | |
| #[note("currently, all type parameters are required to be mentioned in the precise captures list")] | |
| pub(crate) struct SelfTyNotCaptured { | |
| #[primary_span] | |
| pub opaque_span: Span, | |
| #[label("`Self` type parameter is implicitly captured by this `impl Trait`")] | |
| pub trait_span: Span, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag( | |
| "`impl Trait` captures lifetime parameter, but it is not mentioned in `use<...>` precise captures list" | |
| )] | |
| pub(crate) struct LifetimeNotCaptured { | |
| #[primary_span] | |
| pub use_span: Span, | |
| #[label("this lifetime parameter is captured")] | |
| pub param_span: Span, | |
| #[label("lifetime captured due to being mentioned in the bounds of the `impl Trait`")] | |
| pub opaque_span: Span, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag( | |
| "`impl Trait` captures lifetime parameter, but it is not mentioned in `use<...>` precise captures list" | |
| )] | |
| pub(crate) struct LifetimeImplicitlyCaptured { | |
| #[primary_span] | |
| pub opaque_span: Span, | |
| #[label("all lifetime parameters originating from a trait are captured implicitly")] | |
| pub param_span: Span, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("expected {$kind} parameter in `use<...>` precise captures list, found {$found}")] | |
| pub(crate) struct BadPreciseCapture { | |
| #[primary_span] | |
| pub span: Span, | |
| pub kind: &'static str, | |
| pub found: String, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("`Self` can't be captured in `use<...>` precise captures list, since it is an alias", code = E0799)] | |
| pub(crate) struct PreciseCaptureSelfAlias { | |
| #[primary_span] | |
| pub span: Span, | |
| #[label("`Self` is not a generic argument, but an alias to the type of the {$what}")] | |
| pub self_span: Span, | |
| pub what: &'static str, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("cannot capture parameter `{$name}` twice")] | |
| pub(crate) struct DuplicatePreciseCapture { | |
| #[primary_span] | |
| pub first_span: Span, | |
| pub name: Symbol, | |
| #[label("parameter captured again here")] | |
| pub second_span: Span, | |
| } | |
| #[derive(Diagnostic)] | |
| #[diag("lifetime parameter `{$name}` must be listed before non-lifetime parameters")] | |
| pub(crate) struct LifetimesMustBeFirst { | |
| #[primary_span] | |
| pub lifetime_span: Span, | |
| pub name: Symbol, | |
| #[label("move the lifetime before this parameter")] | |
| pub other_span: Span, | |
| } |