Skip to content

Commit

Permalink
Rollup merge of rust-lang#39758 - shepmaster:e0089-duplicate-text, r=…
Browse files Browse the repository at this point in the history
…GuillaumeGomez

Remove duplicated "parameter" in E0089 text

Closes rust-lang#39732
  • Loading branch information
frewsxcv authored Feb 13, 2017
2 parents 5b79f33 + 1c99841 commit 4148711
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 36 deletions.
48 changes: 25 additions & 23 deletions src/librustc_typeck/check/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4510,28 +4510,32 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
}
};

let count = |n| {
format!("{} parameter{}", n, if n == 1 { "" } else { "s" })
let count_lifetime_params = |n| {
format!("{} lifetime parameter{}", n, if n == 1 { "" } else { "s" })
};
let count_type_params = |n| {
format!("{} type parameter{}", n, if n == 1 { "" } else { "s" })
};

// Check provided lifetime parameters.
let lifetime_defs = segment.map_or(&[][..], |(_, generics)| &generics.regions);
if lifetimes.len() > lifetime_defs.len() {
let expected_text = count_lifetime_params(lifetime_defs.len());
let actual_text = count_lifetime_params(lifetimes.len());
struct_span_err!(self.tcx.sess, span, E0088,
"too many lifetime parameters provided: \
expected {}, found {}",
count(lifetime_defs.len()),
count(lifetimes.len()))
.span_label(span, &format!("unexpected lifetime parameter{}",
match lifetimes.len() { 1 => "", _ => "s" }))
expected at most {}, found {}",
expected_text, actual_text)
.span_label(span, &format!("expected {}", expected_text))
.emit();
} else if lifetimes.len() > 0 && lifetimes.len() < lifetime_defs.len() {
let expected_text = count_lifetime_params(lifetime_defs.len());
let actual_text = count_lifetime_params(lifetimes.len());
struct_span_err!(self.tcx.sess, span, E0090,
"too few lifetime parameters provided: \
expected {}, found {}",
count(lifetime_defs.len()),
count(lifetimes.len()))
.span_label(span, &format!("too few lifetime parameters"))
expected {}, found {}",
expected_text, actual_text)
.span_label(span, &format!("expected {}", expected_text))
.emit();
}

Expand All @@ -4552,29 +4556,27 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
.count();
if types.len() > type_defs.len() {
let span = types[type_defs.len()].span;
let expected_text = count_type_params(type_defs.len());
let actual_text = count_type_params(types.len());
struct_span_err!(self.tcx.sess, span, E0087,
"too many type parameters provided: \
expected at most {}, found {}",
count(type_defs.len()),
count(types.len()))
.span_label(span, &format!("too many type parameters")).emit();
expected_text, actual_text)
.span_label(span, &format!("expected {}", expected_text))
.emit();

// To prevent derived errors to accumulate due to extra
// type parameters, we force instantiate_value_path to
// use inference variables instead of the provided types.
*segment = None;
} else if !infer_types && types.len() < required_len {
let adjust = |len| if len > 1 { "parameters" } else { "parameter" };
let required_param_str = adjust(required_len);
let actual_param_str = adjust(types.len());
let expected_text = count_type_params(required_len);
let actual_text = count_type_params(types.len());
struct_span_err!(self.tcx.sess, span, E0089,
"too few type parameters provided: \
expected {} {}, found {} {}",
count(required_len),
required_param_str,
count(types.len()),
actual_param_str)
.span_label(span, &format!("expected {} type {}", required_len, required_param_str))
expected {}, found {}",
expected_text, actual_text)
.span_label(span, &format!("expected {}", expected_text))
.emit();
}

Expand Down
10 changes: 7 additions & 3 deletions src/test/compile-fail/E0087.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,13 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

fn foo<T>() {}
fn foo() {}
fn bar<T>() {}

fn main() {
foo::<f64, bool>(); //~ ERROR E0087
//~^ NOTE too many type parameters
foo::<f64>(); //~ ERROR expected at most 0 type parameters, found 1 type parameter [E0087]
//~^ NOTE expected 0 type parameters

bar::<f64, u64>(); //~ ERROR expected at most 1 type parameter, found 2 type parameters [E0087]
//~^ NOTE expected 1 type parameter
}
10 changes: 6 additions & 4 deletions src/test/compile-fail/E0088.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@ fn f() {}
fn g<'a>() {}

fn main() {
f::<'static>(); //~ ERROR E0088
//~^ unexpected lifetime parameter
f::<'static>();
//~^ ERROR expected at most 0 lifetime parameters, found 1 lifetime parameter [E0088]
//~| NOTE expected 0 lifetime parameters

g::<'static, 'static>(); //~ ERROR E0088
//~^ unexpected lifetime parameters
g::<'static, 'static>();
//~^ ERROR expected at most 0 lifetime parameters, found 2 lifetime parameters [E0088]
//~| NOTE expected 0 lifetime parameters
}
5 changes: 2 additions & 3 deletions src/test/compile-fail/E0089.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
fn foo<T, U>() {}

fn main() {
foo::<f64>();
//~^ ERROR E0089
//~| NOTE expected 2 type parameters
foo::<f64>(); //~ ERROR expected 2 type parameters, found 1 type parameter [E0089]
//~| NOTE expected 2 type parameters
}
5 changes: 3 additions & 2 deletions src/test/compile-fail/E0090.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
// except according to those terms.

fn foo<'a: 'b, 'b: 'a>() {}

fn main() {
foo::<'static>();//~ ERROR E0090
//~^ too few lifetime parameters
foo::<'static>(); //~ ERROR expected 2 lifetime parameters, found 1 lifetime parameter [E0090]
//~^ NOTE expected 2 lifetime parameters
}
2 changes: 1 addition & 1 deletion src/test/compile-fail/ufcs-qpath-missing-params.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,5 @@ impl<'a> IntoCow<'a, str> for String {

fn main() {
<String as IntoCow>::into_cow("foo".to_string());
//~^ ERROR too few type parameters provided: expected 1 parameter
//~^ ERROR too few type parameters provided: expected 1 type parameter
}

0 comments on commit 4148711

Please sign in to comment.