Skip to content

Commit 50c86db

Browse files
committed
Add help message for unused type param
1 parent b52769b commit 50c86db

22 files changed

+49
-3
lines changed

compiler/rustc_typeck/src/check/wfcheck.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1298,12 +1298,14 @@ fn check_variances_for_type_defn<'tcx>(
12981298

12991299
match param.name {
13001300
hir::ParamName::Error => {}
1301-
_ => report_bivariance(tcx, param.span, param.name.ident().name),
1301+
_ => report_bivariance(tcx, param),
13021302
}
13031303
}
13041304
}
13051305

1306-
fn report_bivariance(tcx: TyCtxt<'_>, span: Span, param_name: Symbol) {
1306+
fn report_bivariance(tcx: TyCtxt<'_>, param: &rustc_hir::GenericParam<'_>) {
1307+
let span = param.span;
1308+
let param_name = param.name.ident().name;
13071309
let mut err = error_392(tcx, span, param_name);
13081310

13091311
let suggested_marker_id = tcx.lang_items().phantom_data();
@@ -1318,7 +1320,14 @@ fn report_bivariance(tcx: TyCtxt<'_>, span: Span, param_name: Symbol) {
13181320
format!("consider removing `{}` or referring to it in a field", param_name)
13191321
};
13201322
err.help(&msg);
1321-
err.emit();
1323+
1324+
if matches!(param.kind, rustc_hir::GenericParamKind::Type { .. }) {
1325+
err.help(&format!(
1326+
"if you intended `{0}` to be a const parameter, use `const {0}: usize` instead",
1327+
param_name
1328+
));
1329+
}
1330+
err.emit()
13221331
}
13231332

13241333
/// Feature gates RFC 2056 -- trivial bounds, checking for global bounds that

src/test/ui/const-generics/const-param-type-depends-on-type-param.full.stderr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ LL | pub struct Dependent<T, const X: T>([(); X]);
1111
| ^ unused parameter
1212
|
1313
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
14+
= help: if you intended `T` to be a const parameter, use `const T: usize` instead
1415

1516
error: aborting due to 2 previous errors
1617

src/test/ui/const-generics/const-param-type-depends-on-type-param.min.stderr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ LL | pub struct Dependent<T, const X: T>([(); X]);
1111
| ^ unused parameter
1212
|
1313
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
14+
= help: if you intended `T` to be a const parameter, use `const T: usize` instead
1415

1516
error: aborting due to 2 previous errors
1617

src/test/ui/const-generics/issue-67375.full.stderr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ LL | struct Bug<T> {
1515
| ^ unused parameter
1616
|
1717
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
18+
= help: if you intended `T` to be a const parameter, use `const T: usize` instead
1819

1920
error: aborting due to previous error; 1 warning emitted
2021

src/test/ui/const-generics/issue-67375.min.stderr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ LL | struct Bug<T> {
1414
| ^ unused parameter
1515
|
1616
= help: consider removing `T`, referring to it in a field, or using a marker such as `PhantomData`
17+
= help: if you intended `T` to be a const parameter, use `const T: usize` instead
1718

1819
error: aborting due to 2 previous errors
1920

src/test/ui/const-generics/issue-67945-1.full.stderr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ LL | struct Bug<S> {
1919
| ^ unused parameter
2020
|
2121
= help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData`
22+
= help: if you intended `S` to be a const parameter, use `const S: usize` instead
2223

2324
error: aborting due to 2 previous errors
2425

src/test/ui/const-generics/issue-67945-1.min.stderr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ LL | struct Bug<S> {
2323
| ^ unused parameter
2424
|
2525
= help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData`
26+
= help: if you intended `S` to be a const parameter, use `const S: usize` instead
2627

2728
error: aborting due to 3 previous errors
2829

src/test/ui/const-generics/issue-67945-2.full.stderr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ LL | struct Bug<S> {
1919
| ^ unused parameter
2020
|
2121
= help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData`
22+
= help: if you intended `S` to be a const parameter, use `const S: usize` instead
2223

2324
error: aborting due to 2 previous errors
2425

src/test/ui/const-generics/issue-67945-2.min.stderr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ LL | struct Bug<S> {
2323
| ^ unused parameter
2424
|
2525
= help: consider removing `S`, referring to it in a field, or using a marker such as `PhantomData`
26+
= help: if you intended `S` to be a const parameter, use `const S: usize` instead
2627

2728
error: aborting due to 3 previous errors
2829

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#![crate_type="lib"]
2+
3+
struct Example<N>;
4+
//~^ ERROR parameter

0 commit comments

Comments
 (0)