Add help message for unused type param
This commit is contained in:
parent
b52769b804
commit
50c86db4fa
22 changed files with 49 additions and 3 deletions
|
@ -1298,12 +1298,14 @@ fn check_variances_for_type_defn<'tcx>(
|
||||||
|
|
||||||
match param.name {
|
match param.name {
|
||||||
hir::ParamName::Error => {}
|
hir::ParamName::Error => {}
|
||||||
_ => report_bivariance(tcx, param.span, param.name.ident().name),
|
_ => report_bivariance(tcx, param),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn report_bivariance(tcx: TyCtxt<'_>, span: Span, param_name: Symbol) {
|
fn report_bivariance(tcx: TyCtxt<'_>, param: &rustc_hir::GenericParam<'_>) {
|
||||||
|
let span = param.span;
|
||||||
|
let param_name = param.name.ident().name;
|
||||||
let mut err = error_392(tcx, span, param_name);
|
let mut err = error_392(tcx, span, param_name);
|
||||||
|
|
||||||
let suggested_marker_id = tcx.lang_items().phantom_data();
|
let suggested_marker_id = tcx.lang_items().phantom_data();
|
||||||
|
@ -1318,7 +1320,14 @@ fn report_bivariance(tcx: TyCtxt<'_>, span: Span, param_name: Symbol) {
|
||||||
format!("consider removing `{}` or referring to it in a field", param_name)
|
format!("consider removing `{}` or referring to it in a field", param_name)
|
||||||
};
|
};
|
||||||
err.help(&msg);
|
err.help(&msg);
|
||||||
err.emit();
|
|
||||||
|
if matches!(param.kind, rustc_hir::GenericParamKind::Type { .. }) {
|
||||||
|
err.help(&format!(
|
||||||
|
"if you intended `{0}` to be a const parameter, use `const {0}: usize` instead",
|
||||||
|
param_name
|
||||||
|
));
|
||||||
|
}
|
||||||
|
err.emit()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Feature gates RFC 2056 -- trivial bounds, checking for global bounds that
|
/// Feature gates RFC 2056 -- trivial bounds, checking for global bounds that
|
||||||
|
|
|
@ -11,6 +11,7 @@ LL | pub struct Dependent<T, const X: T>([(); X]);
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `T` to be a const parameter, use `const T: usize` instead
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ LL | pub struct Dependent<T, const X: T>([(); X]);
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `T` to be a const parameter, use `const T: usize` instead
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ LL | struct Bug<T> {
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `T` to be a const parameter, use `const T: usize` instead
|
||||||
|
|
||||||
error: aborting due to previous error; 1 warning emitted
|
error: aborting due to previous error; 1 warning emitted
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ LL | struct Bug<T> {
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `T` to be a const parameter, use `const T: usize` instead
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ LL | struct Bug<S> {
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `S` to be a const parameter, use `const S: usize` instead
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ LL | struct Bug<S> {
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `S` to be a const parameter, use `const S: usize` instead
|
||||||
|
|
||||||
error: aborting due to 3 previous errors
|
error: aborting due to 3 previous errors
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ LL | struct Bug<S> {
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `S` to be a const parameter, use `const S: usize` instead
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ LL | struct Bug<S> {
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `S` to be a const parameter, use `const S: usize` instead
|
||||||
|
|
||||||
error: aborting due to 3 previous errors
|
error: aborting due to 3 previous errors
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
#![crate_type="lib"]
|
||||||
|
|
||||||
|
struct Example<N>;
|
||||||
|
//~^ ERROR parameter
|
|
@ -0,0 +1,12 @@
|
||||||
|
error[E0392]: parameter `N` is never used
|
||||||
|
--> $DIR/unused-type-param-suggestion.rs:3:16
|
||||||
|
|
|
||||||
|
LL | struct Example<N>;
|
||||||
|
| ^ unused parameter
|
||||||
|
|
|
||||||
|
= help: consider removing `N`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `N` to be a const parameter, use `const N: usize` instead
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0392`.
|
|
@ -14,6 +14,7 @@ LL | enum MyWeirdOption<T> {
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `T` to be a const parameter, use `const T: usize` instead
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ LL | enum Bug<S> {
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `S` to be a const parameter, use `const S: usize` instead
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ LL | enum Bug<S> {
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `S` to be a const parameter, use `const S: usize` instead
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ LL | enum Foo<T> { Bar }
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `T` to be a const parameter, use `const T: usize` instead
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ LL | enum Bar<T> { What }
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `T` to be a const parameter, use `const T: usize` instead
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ LL | struct Foo<T> where T: Copy;
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `T` to be a const parameter, use `const T: usize` instead
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ LL | struct NoData<T>;
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `T` to be a const parameter, use `const T: usize` instead
|
||||||
|
|
||||||
error[E0275]: overflow evaluating the requirement `NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>: Foo`
|
error[E0275]: overflow evaluating the requirement `NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<NoData<T>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>: Foo`
|
||||||
--> $DIR/issue-20413.rs:8:36
|
--> $DIR/issue-20413.rs:8:36
|
||||||
|
|
|
@ -13,6 +13,7 @@ LL | struct Foo<'a, A> {}
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `A`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `A`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `A` to be a const parameter, use `const A: usize` instead
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ LL | struct Foo<Self>(Self);
|
||||||
| ^^^^ unused parameter
|
| ^^^^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `Self`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `Self`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `Self` to be a const parameter, use `const Self: usize` instead
|
||||||
|
|
||||||
error: aborting due to 3 previous errors
|
error: aborting due to 3 previous errors
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@ LL | struct Foo<T: ?Hash> { }
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `T` to be a const parameter, use `const T: usize` instead
|
||||||
|
|
||||||
error: aborting due to 2 previous errors; 1 warning emitted
|
error: aborting due to 2 previous errors; 1 warning emitted
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ LL | struct SomeStruct<A> { x: u32 }
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `A`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `A`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `A` to be a const parameter, use `const A: usize` instead
|
||||||
|
|
||||||
error[E0392]: parameter `A` is never used
|
error[E0392]: parameter `A` is never used
|
||||||
--> $DIR/variance-unused-type-param.rs:9:15
|
--> $DIR/variance-unused-type-param.rs:9:15
|
||||||
|
@ -13,6 +14,7 @@ LL | enum SomeEnum<A> { Nothing }
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `A`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `A`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `A` to be a const parameter, use `const A: usize` instead
|
||||||
|
|
||||||
error[E0392]: parameter `T` is never used
|
error[E0392]: parameter `T` is never used
|
||||||
--> $DIR/variance-unused-type-param.rs:13:15
|
--> $DIR/variance-unused-type-param.rs:13:15
|
||||||
|
@ -21,6 +23,7 @@ LL | enum ListCell<T> {
|
||||||
| ^ unused parameter
|
| ^ unused parameter
|
||||||
|
|
|
|
||||||
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
|
||||||
|
= help: if you intended `T` to be a const parameter, use `const T: usize` instead
|
||||||
|
|
||||||
error: aborting due to 3 previous errors
|
error: aborting due to 3 previous errors
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue