Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Correct pluralisation of various diagnostic messages #64233

Merged
merged 2 commits into from
Sep 7, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This if $n != 1 { "s" } else { "" } business should be refactored to a function in some utility module in rustc_errors. Would be good to grep for "s" } else { "".

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would make a nice beginner issue. I'll open one.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Opened #64238.

}
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