Skip to content

Commit 7f5d263

Browse files
author
Jonathan Turner
authored
Rollup merge of rust-lang#35373 - oijazsh:E0107, r=jonathandturner
Update E0107 message to new format Fixes rust-lang#35246 as part of rust-lang#35233. r? @jonathandturner
2 parents 8d881d6 + 2061d65 commit 7f5d263

File tree

2 files changed

+33
-6
lines changed

2 files changed

+33
-6
lines changed

src/librustc_typeck/astconv.rs

+19-3
Original file line numberDiff line numberDiff line change
@@ -2273,9 +2273,25 @@ fn check_type_argument_count(tcx: TyCtxt, span: Span, supplied: usize,
22732273
}
22742274

22752275
fn report_lifetime_number_error(tcx: TyCtxt, span: Span, number: usize, expected: usize) {
2276-
span_err!(tcx.sess, span, E0107,
2277-
"wrong number of lifetime parameters: expected {}, found {}",
2278-
expected, number);
2276+
let label = if number < expected {
2277+
if expected == 1 {
2278+
format!("expected {} lifetime parameter", expected)
2279+
} else {
2280+
format!("expected {} lifetime parameters", expected)
2281+
}
2282+
} else {
2283+
let additional = number - expected;
2284+
if additional == 1 {
2285+
"unexpected lifetime parameter".to_string()
2286+
} else {
2287+
format!("{} unexpected lifetime parameters", additional)
2288+
}
2289+
};
2290+
struct_span_err!(tcx.sess, span, E0107,
2291+
"wrong number of lifetime parameters: expected {}, found {}",
2292+
expected, number)
2293+
.span_label(span, &label)
2294+
.emit();
22792295
}
22802296

22812297
// A helper struct for conveniently grouping a set of bounds which we pass to

src/test/compile-fail/E0107.rs

+14-3
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,27 @@
99
// except according to those terms.
1010

1111
struct Foo<'a>(&'a str);
12+
struct Buzz<'a, 'b>(&'a str, &'b str);
1213

1314
enum Bar {
1415
A,
1516
B,
1617
C,
1718
}
1819

19-
struct Baz<'a> {
20-
foo: Foo, //~ ERROR E0107
21-
bar: Bar<'a>, //~ ERROR E0107
20+
struct Baz<'a, 'b, 'c> {
21+
foo: Foo,
22+
//~^ ERROR E0107
23+
//~| expected 1 lifetime parameter
24+
buzz: Buzz<'a>,
25+
//~^ ERROR E0107
26+
//~| expected 2 lifetime parameters
27+
bar: Bar<'a>,
28+
//~^ ERROR E0107
29+
//~| unexpected lifetime parameter
30+
foo2: Foo<'a, 'b, 'c>,
31+
//~^ ERROR E0107
32+
//~| 2 unexpected lifetime parameters
2233
}
2334

2435
fn main() {

0 commit comments

Comments
 (0)