1
Fork 0

Add help message for unused type param

This commit is contained in:
kadmin 2021-05-01 04:39:50 +00:00
parent b52769b804
commit 50c86db4fa
22 changed files with 49 additions and 3 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,4 @@
#![crate_type="lib"]
struct Example<N>;
//~^ ERROR parameter

View file

@ -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`.

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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