Explicitly mention Self
This commit is contained in:
parent
fa0428c9d0
commit
57085a06d9
@ -351,7 +351,7 @@ hir_analysis_param_in_ty_of_assoc_const_binding =
|
|||||||
*[normal] the {$param_def_kind} `{$param_name}` is defined here
|
*[normal] the {$param_def_kind} `{$param_name}` is defined here
|
||||||
}
|
}
|
||||||
|
|
||||||
hir_analysis_param_not_captured = `impl Trait` must mention all {$kind} parameters in scope
|
hir_analysis_param_not_captured = `impl Trait` must mention all {$kind} parameters in scope in `use<...>`
|
||||||
.label = {$kind} parameter is implicitly captured by this `impl Trait`
|
.label = {$kind} parameter is implicitly captured by this `impl Trait`
|
||||||
.note = currently, all {$kind} parameters are required to be mentioned in the precise captures list
|
.note = currently, all {$kind} parameters are required to be mentioned in the precise captures list
|
||||||
|
|
||||||
@ -405,6 +405,10 @@ hir_analysis_self_in_impl_self =
|
|||||||
`Self` is not valid in the self type of an impl block
|
`Self` is not valid in the self type of an impl block
|
||||||
.note = replace `Self` with a different type
|
.note = replace `Self` with a different type
|
||||||
|
|
||||||
|
hir_analysis_self_ty_not_captured = `impl Trait` must mention the `Self` type of the trait in `use<...>`
|
||||||
|
.label = `Self` type parameter is implicitly captured by this `impl Trait`
|
||||||
|
.note = currently, all type parameters are required to be mentioned in the precise captures list
|
||||||
|
|
||||||
hir_analysis_simd_ffi_highly_experimental = use of SIMD type{$snip} in FFI is highly experimental and may result in invalid code
|
hir_analysis_simd_ffi_highly_experimental = use of SIMD type{$snip} in FFI is highly experimental and may result in invalid code
|
||||||
.help = add `#![feature(simd_ffi)]` to the crate attributes to enable
|
.help = add `#![feature(simd_ffi)]` to the crate attributes to enable
|
||||||
|
|
||||||
|
@ -612,12 +612,20 @@ fn check_opaque_precise_captures<'tcx>(tcx: TyCtxt<'tcx>, opaque_def_id: LocalDe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ty::GenericParamDefKind::Type { .. } => {
|
ty::GenericParamDefKind::Type { .. } => {
|
||||||
// FIXME(precise_capturing): Structured suggestion for this would be useful
|
if matches!(tcx.def_kind(param.def_id), DefKind::Trait | DefKind::TraitAlias) {
|
||||||
tcx.dcx().emit_err(errors::ParamNotCaptured {
|
// FIXME(precise_capturing): Structured suggestion for this would be useful
|
||||||
param_span: tcx.def_span(param.def_id),
|
tcx.dcx().emit_err(errors::SelfTyNotCaptured {
|
||||||
opaque_span: tcx.def_span(opaque_def_id),
|
trait_span: tcx.def_span(param.def_id),
|
||||||
kind: "type",
|
opaque_span: tcx.def_span(opaque_def_id),
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
// FIXME(precise_capturing): Structured suggestion for this would be useful
|
||||||
|
tcx.dcx().emit_err(errors::ParamNotCaptured {
|
||||||
|
param_span: tcx.def_span(param.def_id),
|
||||||
|
opaque_span: tcx.def_span(opaque_def_id),
|
||||||
|
kind: "type",
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ty::GenericParamDefKind::Const { .. } => {
|
ty::GenericParamDefKind::Const { .. } => {
|
||||||
// FIXME(precise_capturing): Structured suggestion for this would be useful
|
// FIXME(precise_capturing): Structured suggestion for this would be useful
|
||||||
|
@ -12,6 +12,16 @@ pub struct ParamNotCaptured {
|
|||||||
pub kind: &'static str,
|
pub kind: &'static str,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Diagnostic)]
|
||||||
|
#[diag(hir_analysis_self_ty_not_captured)]
|
||||||
|
#[note]
|
||||||
|
pub struct SelfTyNotCaptured {
|
||||||
|
#[primary_span]
|
||||||
|
pub opaque_span: Span,
|
||||||
|
#[label]
|
||||||
|
pub trait_span: Span,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Diagnostic)]
|
#[derive(Diagnostic)]
|
||||||
#[diag(hir_analysis_lifetime_not_captured)]
|
#[diag(hir_analysis_lifetime_not_captured)]
|
||||||
pub struct LifetimeNotCaptured {
|
pub struct LifetimeNotCaptured {
|
||||||
|
@ -7,7 +7,7 @@ LL | #![feature(precise_capturing)]
|
|||||||
= note: see issue #123432 <https://github.com/rust-lang/rust/issues/123432> for more information
|
= note: see issue #123432 <https://github.com/rust-lang/rust/issues/123432> for more information
|
||||||
= note: `#[warn(incomplete_features)]` on by default
|
= note: `#[warn(incomplete_features)]` on by default
|
||||||
|
|
||||||
error: `impl Trait` must mention all const parameters in scope
|
error: `impl Trait` must mention all const parameters in scope in `use<...>`
|
||||||
--> $DIR/forgot-to-capture-const.rs:4:34
|
--> $DIR/forgot-to-capture-const.rs:4:34
|
||||||
|
|
|
|
||||||
LL | fn constant<const C: usize>() -> impl use<> Sized {}
|
LL | fn constant<const C: usize>() -> impl use<> Sized {}
|
||||||
|
@ -6,7 +6,7 @@ fn type_param<T>() -> impl use<> Sized {}
|
|||||||
|
|
||||||
trait Foo {
|
trait Foo {
|
||||||
fn bar() -> impl use<> Sized;
|
fn bar() -> impl use<> Sized;
|
||||||
//~^ ERROR `impl Trait` must mention all type parameters in scope
|
//~^ ERROR `impl Trait` must mention the `Self` type of the trait
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
@ -7,7 +7,7 @@ LL | #![feature(precise_capturing)]
|
|||||||
= note: see issue #123432 <https://github.com/rust-lang/rust/issues/123432> for more information
|
= note: see issue #123432 <https://github.com/rust-lang/rust/issues/123432> for more information
|
||||||
= note: `#[warn(incomplete_features)]` on by default
|
= note: `#[warn(incomplete_features)]` on by default
|
||||||
|
|
||||||
error: `impl Trait` must mention all type parameters in scope
|
error: `impl Trait` must mention all type parameters in scope in `use<...>`
|
||||||
--> $DIR/forgot-to-capture-type.rs:4:23
|
--> $DIR/forgot-to-capture-type.rs:4:23
|
||||||
|
|
|
|
||||||
LL | fn type_param<T>() -> impl use<> Sized {}
|
LL | fn type_param<T>() -> impl use<> Sized {}
|
||||||
@ -17,11 +17,11 @@ LL | fn type_param<T>() -> impl use<> Sized {}
|
|||||||
|
|
|
|
||||||
= note: currently, all type parameters are required to be mentioned in the precise captures list
|
= note: currently, all type parameters are required to be mentioned in the precise captures list
|
||||||
|
|
||||||
error: `impl Trait` must mention all type parameters in scope
|
error: `impl Trait` must mention the `Self` type of the trait in `use<...>`
|
||||||
--> $DIR/forgot-to-capture-type.rs:8:17
|
--> $DIR/forgot-to-capture-type.rs:8:17
|
||||||
|
|
|
|
||||||
LL | trait Foo {
|
LL | trait Foo {
|
||||||
| --------- type parameter is implicitly captured by this `impl Trait`
|
| --------- `Self` type parameter is implicitly captured by this `impl Trait`
|
||||||
LL | fn bar() -> impl use<> Sized;
|
LL | fn bar() -> impl use<> Sized;
|
||||||
| ^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
|
Loading…
Reference in New Issue
Block a user