From 3575812e449e8a174b67023ee0879f573f8a6d1f Mon Sep 17 00:00:00 2001 From: Omer Sheikh Date: Fri, 5 Aug 2016 20:54:04 +0500 Subject: [PATCH 1/2] Update E0107 message to new format --- src/librustc_typeck/astconv.rs | 22 +++++++++++++++++++--- src/test/compile-fail/E0107.rs | 8 ++++++-- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/librustc_typeck/astconv.rs b/src/librustc_typeck/astconv.rs index 3b2bca4ab3912..e3f4f82b0ef6d 100644 --- a/src/librustc_typeck/astconv.rs +++ b/src/librustc_typeck/astconv.rs @@ -2266,9 +2266,25 @@ fn check_type_argument_count(tcx: TyCtxt, span: Span, supplied: usize, } fn report_lifetime_number_error(tcx: TyCtxt, span: Span, number: usize, expected: usize) { - span_err!(tcx.sess, span, E0107, - "wrong number of lifetime parameters: expected {}, found {}", - expected, number); + let label = if number < expected { + if expected == 1 { + format!("expected {} lifetime parameter", expected) + } else { + format!("expected {} lifetime parameters", expected) + } + } else { + let additional = number - expected; + if additional == 1 { + "unexpected lifetime parameter".to_string() + } else { + format!("{} unexpected lifetime parameters", additional) + } + }; + struct_span_err!(tcx.sess, span, E0107, + "wrong number of lifetime parameters: expected {}, found {}", + expected, number) + .span_label(span, &label) + .emit(); } // A helper struct for conveniently grouping a set of bounds which we pass to diff --git a/src/test/compile-fail/E0107.rs b/src/test/compile-fail/E0107.rs index d27b70865bbfb..6a5456c010953 100644 --- a/src/test/compile-fail/E0107.rs +++ b/src/test/compile-fail/E0107.rs @@ -17,8 +17,12 @@ enum Bar { } struct Baz<'a> { - foo: Foo, //~ ERROR E0107 - bar: Bar<'a>, //~ ERROR E0107 + foo: Foo, + //~^ ERROR E0107 + //~| expected 1 lifetime parameter + bar: Bar<'a>, + //~^ ERROR E0107 + //~| unexpected lifetime parameter } fn main() { From 2061d656e5ba2225a58e1073c9a0a22eef4f0ece Mon Sep 17 00:00:00 2001 From: Omer Sheikh Date: Fri, 5 Aug 2016 22:56:10 +0500 Subject: [PATCH 2/2] Add E0107 tests for multiple lifetime params --- src/test/compile-fail/E0107.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/test/compile-fail/E0107.rs b/src/test/compile-fail/E0107.rs index 6a5456c010953..5f333e17c478e 100644 --- a/src/test/compile-fail/E0107.rs +++ b/src/test/compile-fail/E0107.rs @@ -9,6 +9,7 @@ // except according to those terms. struct Foo<'a>(&'a str); +struct Buzz<'a, 'b>(&'a str, &'b str); enum Bar { A, @@ -16,13 +17,19 @@ enum Bar { C, } -struct Baz<'a> { +struct Baz<'a, 'b, 'c> { foo: Foo, //~^ ERROR E0107 //~| expected 1 lifetime parameter + buzz: Buzz<'a>, + //~^ ERROR E0107 + //~| expected 2 lifetime parameters bar: Bar<'a>, //~^ ERROR E0107 //~| unexpected lifetime parameter + foo2: Foo<'a, 'b, 'c>, + //~^ ERROR E0107 + //~| 2 unexpected lifetime parameters } fn main() {