diff --git a/src/librustc_typeck/astconv.rs b/src/librustc_typeck/astconv.rs index c93f1c6c8e610..560d83fdd5860 100644 --- a/src/librustc_typeck/astconv.rs +++ b/src/librustc_typeck/astconv.rs @@ -2245,27 +2245,32 @@ fn check_type_argument_count(tcx: TyCtxt, span: Span, supplied: usize, "expected" }; let arguments_plural = if required == 1 { "" } else { "s" }; - struct_span_err!(tcx.sess, span, E0243, "wrong number of type arguments") - .span_label( - span, - &format!("{} {} type argument{}, found {}", - expected, required, arguments_plural, supplied) - ) + + struct_span_err!(tcx.sess, span, E0243, + "wrong number of type arguments: {} {}, found {}", + expected, required, supplied) + .span_label(span, + &format!("{} {} type argument{}", + expected, + required, + arguments_plural)) .emit(); } else if supplied > accepted { - let expected = if required == 0 { - "expected no".to_string() - } else if required < accepted { + let expected = if required < accepted { format!("expected at most {}", accepted) } else { format!("expected {}", accepted) }; let arguments_plural = if accepted == 1 { "" } else { "s" }; - struct_span_err!(tcx.sess, span, E0244, "wrong number of type arguments") + struct_span_err!(tcx.sess, span, E0244, + "wrong number of type arguments: {}, found {}", + expected, supplied) .span_label( span, - &format!("{} type argument{}, found {}", expected, arguments_plural, supplied) + &format!("{} type argument{}", + if accepted == 0 { "expected no" } else { &expected }, + arguments_plural) ) .emit(); } diff --git a/src/librustc_typeck/diagnostics.rs b/src/librustc_typeck/diagnostics.rs index be012d8976f6c..f5432c6e0fcd7 100644 --- a/src/librustc_typeck/diagnostics.rs +++ b/src/librustc_typeck/diagnostics.rs @@ -1355,7 +1355,7 @@ extern "rust-intrinsic" { } ``` -Please check that you provided the right number of lifetime parameters +Please check that you provided the right number of type parameters and verify with the function declaration in the Rust source code. Example: diff --git a/src/test/compile-fail/E0243.rs b/src/test/compile-fail/E0243.rs index 4434723e12f82..d20435a37ff5b 100644 --- a/src/test/compile-fail/E0243.rs +++ b/src/test/compile-fail/E0243.rs @@ -10,8 +10,8 @@ struct Foo { x: T } struct Bar { x: Foo } - //~^ ERROR E0243 - //~| NOTE expected 1 type argument, found 0 + //~^ ERROR wrong number of type arguments: expected 1, found 0 [E0243] + //~| NOTE expected 1 type argument fn main() { } diff --git a/src/test/compile-fail/E0244.rs b/src/test/compile-fail/E0244.rs index 5678a7fd450d8..02d4b337894b2 100644 --- a/src/test/compile-fail/E0244.rs +++ b/src/test/compile-fail/E0244.rs @@ -10,8 +10,8 @@ struct Foo { x: bool } struct Bar { x: Foo } - //~^ ERROR E0244 - //~| NOTE expected no type arguments, found 2 + //~^ ERROR wrong number of type arguments: expected 0, found 2 [E0244] + //~| NOTE expected no type arguments fn main() { diff --git a/src/test/compile-fail/generic-type-less-params-with-defaults.rs b/src/test/compile-fail/generic-type-less-params-with-defaults.rs index 9b1f3e51647cb..9b19e09eeae76 100644 --- a/src/test/compile-fail/generic-type-less-params-with-defaults.rs +++ b/src/test/compile-fail/generic-type-less-params-with-defaults.rs @@ -17,6 +17,6 @@ struct Vec( fn main() { let _: Vec; - //~^ ERROR E0243 - //~| NOTE expected at least 1 type argument, found 0 + //~^ ERROR wrong number of type arguments: expected at least 1, found 0 [E0243] + //~| NOTE expected at least 1 type argument } diff --git a/src/test/compile-fail/generic-type-more-params-with-defaults.rs b/src/test/compile-fail/generic-type-more-params-with-defaults.rs index 8f733ddfce187..b5764ef89ab54 100644 --- a/src/test/compile-fail/generic-type-more-params-with-defaults.rs +++ b/src/test/compile-fail/generic-type-more-params-with-defaults.rs @@ -17,6 +17,6 @@ struct Vec( fn main() { let _: Vec; - //~^ ERROR E0244 - //~| NOTE expected at most 2 type arguments, found 3 + //~^ ERROR wrong number of type arguments: expected at most 2, found 3 [E0244] + //~| NOTE expected at most 2 type arguments } diff --git a/src/test/compile-fail/issue-14092.rs b/src/test/compile-fail/issue-14092.rs index df8707ab823e5..85dd88e614fd7 100644 --- a/src/test/compile-fail/issue-14092.rs +++ b/src/test/compile-fail/issue-14092.rs @@ -9,7 +9,7 @@ // except according to those terms. fn fn1(0: Box) {} - //~^ ERROR E0243 - //~| NOTE expected 1 type argument, found 0 + //~^ ERROR wrong number of type arguments: expected 1, found 0 [E0243] + //~| NOTE expected 1 type argument fn main() {} diff --git a/src/test/compile-fail/issue-23024.rs b/src/test/compile-fail/issue-23024.rs index e266f004317e7..5d9b49f486c69 100644 --- a/src/test/compile-fail/issue-23024.rs +++ b/src/test/compile-fail/issue-23024.rs @@ -18,6 +18,6 @@ fn main() vfnfer.push(box h); println!("{:?}",(vfnfer[0] as Fn)(3)); //~^ ERROR the precise format of `Fn`-family traits' - //~| ERROR E0243 + //~| ERROR wrong number of type arguments: expected 1, found 0 [E0243] //~| ERROR the value of the associated type `Output` (from the trait `std::ops::FnOnce`) } diff --git a/src/test/compile-fail/typeck-builtin-bound-type-parameters.rs b/src/test/compile-fail/typeck-builtin-bound-type-parameters.rs index 41242a44f58b8..0d98e044ab04e 100644 --- a/src/test/compile-fail/typeck-builtin-bound-type-parameters.rs +++ b/src/test/compile-fail/typeck-builtin-bound-type-parameters.rs @@ -9,16 +9,16 @@ // except according to those terms. fn foo1, U>(x: T) {} -//~^ ERROR E0244 -//~| NOTE expected no type arguments, found 1 +//~^ ERROR wrong number of type arguments: expected 0, found 1 [E0244] +//~| NOTE expected no type arguments trait Trait: Copy {} -//~^ ERROR E0244 -//~| NOTE expected no type arguments, found 1 +//~^ ERROR wrong number of type arguments: expected 0, found 1 [E0244] +//~| NOTE expected no type arguments struct MyStruct1>; -//~^ ERROR E0244 -//~| NOTE expected no type arguments, found 1 +//~^ ERROR wrong number of type arguments: expected 0, found 1 [E0244] +//~| NOTE expected no type arguments struct MyStruct2<'a, T: Copy<'a>>; //~^ ERROR: wrong number of lifetime parameters: expected 0, found 1 @@ -26,8 +26,8 @@ struct MyStruct2<'a, T: Copy<'a>>; fn foo2<'a, T:Copy<'a, U>, U>(x: T) {} -//~^ ERROR E0244 -//~| NOTE expected no type arguments, found 1 +//~^ ERROR wrong number of type arguments: expected 0, found 1 [E0244] +//~| NOTE expected no type arguments //~| ERROR: wrong number of lifetime parameters: expected 0, found 1 //~| NOTE unexpected lifetime parameter diff --git a/src/test/compile-fail/typeck_type_placeholder_lifetime_1.rs b/src/test/compile-fail/typeck_type_placeholder_lifetime_1.rs index f40445a030e01..ad57752b6f755 100644 --- a/src/test/compile-fail/typeck_type_placeholder_lifetime_1.rs +++ b/src/test/compile-fail/typeck_type_placeholder_lifetime_1.rs @@ -17,6 +17,6 @@ struct Foo<'a, T:'a> { pub fn main() { let c: Foo<_, _> = Foo { r: &5 }; - //~^ ERROR E0244 - //~| NOTE expected 1 type argument, found 2 + //~^ ERROR wrong number of type arguments: expected 1, found 2 [E0244] + //~| NOTE expected 1 type argument } diff --git a/src/test/compile-fail/typeck_type_placeholder_lifetime_2.rs b/src/test/compile-fail/typeck_type_placeholder_lifetime_2.rs index 47898690fcce4..f1ecad0056e97 100644 --- a/src/test/compile-fail/typeck_type_placeholder_lifetime_2.rs +++ b/src/test/compile-fail/typeck_type_placeholder_lifetime_2.rs @@ -17,6 +17,6 @@ struct Foo<'a, T:'a> { pub fn main() { let c: Foo<_, usize> = Foo { r: &5 }; - //~^ ERROR E0244 - //~| NOTE expected 1 type argument, found 2 + //~^ ERROR wrong number of type arguments: expected 1, found 2 [E0244] + //~| NOTE expected 1 type argument } diff --git a/src/test/compile-fail/unboxed-closure-sugar-wrong-trait.rs b/src/test/compile-fail/unboxed-closure-sugar-wrong-trait.rs index 50f4f3b98b337..95d78c0750173 100644 --- a/src/test/compile-fail/unboxed-closure-sugar-wrong-trait.rs +++ b/src/test/compile-fail/unboxed-closure-sugar-wrong-trait.rs @@ -13,8 +13,8 @@ trait Trait {} fn f isize>(x: F) {} -//~^ ERROR E0244 -//~| NOTE expected no type arguments, found 1 +//~^ ERROR wrong number of type arguments: expected 0, found 1 [E0244] +//~| NOTE expected no type arguments //~| ERROR E0220 //~| NOTE associated type `Output` not found