Skip to content

Commit

Permalink
Rollup merge of rust-lang#64233 - varkor:correct-pluralisation, r=est…
Browse files Browse the repository at this point in the history
…ebank

Correct pluralisation of various diagnostic messages
  • Loading branch information
Centril authored Sep 7, 2019
2 parents 84cb352 + 0b97726 commit d5caeac
Show file tree
Hide file tree
Showing 9 changed files with 42 additions and 22 deletions.
4 changes: 3 additions & 1 deletion src/librustc/ty/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,9 @@ impl<'tcx> ty::TyS<'tcx> {
ty::Array(_, n) => {
let n = tcx.lift_to_global(&n).unwrap();
match n.try_eval_usize(tcx, ty::ParamEnv::empty()) {
Some(n) => format!("array of {} elements", n).into(),
Some(n) => {
format!("array of {} element{}", n, if n != 1 { "s" } else { "" }).into()
}
None => "array".into(),
}
}
Expand Down
33 changes: 23 additions & 10 deletions src/librustc_typeck/check/pat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1098,22 +1098,35 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {

fn error_scrutinee_inconsistent_length(&self, span: Span, min_len: u64, size: u64) {
struct_span_err!(
self.tcx.sess, span, E0527,
"pattern requires {} elements but array has {}",
min_len, size
self.tcx.sess,
span,
E0527,
"pattern requires {} element{} but array has {}",
min_len,
if min_len != 1 { "s" } else { "" },
size,
)
.span_label(span, format!("expected {} elements", size))
.span_label(span, format!("expected {} element{}", size, if size != 1 { "s" } else { "" }))
.emit();
}

fn error_scrutinee_with_rest_inconsistent_length(&self, span: Span, min_len: u64, size: u64) {
struct_span_err!(
self.tcx.sess, span, E0528,
"pattern requires at least {} elements but array has {}",
min_len, size
)
.span_label(span, format!("pattern cannot match array of {} elements", size))
.emit();
self.tcx.sess,
span,
E0528,
"pattern requires at least {} element{} but array has {}",
min_len,
if min_len != 1 { "s" } else { "" },
size,
).span_label(
span,
format!(
"pattern cannot match array of {} element{}",
size,
if size != 1 { "s" } else { "" },
),
).emit();
}

fn error_scrutinee_unfixed_length(&self, span: Span) {
Expand Down
9 changes: 7 additions & 2 deletions src/libsyntax/ext/tt/transcribe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -345,8 +345,13 @@ impl LockstepIterSize {
LockstepIterSize::Constraint(r_len, _) if l_len == r_len => self,
LockstepIterSize::Constraint(r_len, r_id) => {
let msg = format!(
"meta-variable `{}` repeats {} times, but `{}` repeats {} times",
l_id, l_len, r_id, r_len
"meta-variable `{}` repeats {} time{}, but `{}` repeats {} time{}",
l_id,
l_len,
if l_len != 1 { "s" } else { "" },
r_id,
r_len,
if r_len != 1 { "s" } else { "" },
);
LockstepIterSize::Contradiction(msg)
}
Expand Down
2 changes: 1 addition & 1 deletion src/libsyntax_ext/format.rs
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ impl<'a, 'b> Context<'a, 'b> {
&format!(
"{} positional argument{} in format string, but {}",
count,
if count > 1 { "s" } else { "" },
if count != 1 { "s" } else { "" },
self.describe_num_args(),
),
);
Expand Down
2 changes: 1 addition & 1 deletion src/test/ui/coercion/coercion-slice.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,5 @@ fn main() {
let _: &[i32] = [0];
//~^ ERROR mismatched types
//~| expected type `&[i32]`
//~| expected &[i32], found array of 1 elements
//~| expected &[i32], found array of 1 element
}
2 changes: 1 addition & 1 deletion src/test/ui/coercion/coercion-slice.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ error[E0308]: mismatched types
LL | let _: &[i32] = [0];
| ^^^
| |
| expected &[i32], found array of 1 elements
| expected &[i32], found array of 1 element
| help: consider borrowing here: `&[0]`
|
= note: expected type `&[i32]`
Expand Down
8 changes: 4 additions & 4 deletions src/test/ui/issues/issue-15783.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ fn main() {
let name = "Foo";
let x = Some(&[name]);
let msg = foo(x);
//~^ ERROR mismatched types
//~| expected type `std::option::Option<&[&str]>`
//~| found type `std::option::Option<&[&str; 1]>`
//~| expected slice, found array of 1 elements
//~^ ERROR mismatched types
//~| expected type `std::option::Option<&[&str]>`
//~| found type `std::option::Option<&[&str; 1]>`
//~| expected slice, found array of 1 element
assert_eq!(msg, 3);
}
2 changes: 1 addition & 1 deletion src/test/ui/issues/issue-15783.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ error[E0308]: mismatched types
--> $DIR/issue-15783.rs:8:19
|
LL | let msg = foo(x);
| ^ expected slice, found array of 1 elements
| ^ expected slice, found array of 1 element
|
= note: expected type `std::option::Option<&[&str]>`
found type `std::option::Option<&[&str; 1]>`
Expand Down
2 changes: 1 addition & 1 deletion src/test/ui/match/match-vec-mismatch.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ error[E0529]: expected an array or slice, found `std::string::String`
LL | ['f', 'o', ..] => {}
| ^^^^^^^^^^^^^^ pattern cannot match with input type `std::string::String`

error[E0527]: pattern requires 1 elements but array has 3
error[E0527]: pattern requires 1 element but array has 3
--> $DIR/match-vec-mismatch.rs:20:9
|
LL | [0] => {},
Expand Down

0 comments on commit d5caeac

Please sign in to comment.