blob: f9e62b8ebcf875ad2aebd579b6d869e4630ee009 [file] [log] [blame]
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,
}