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

Fix msg for verbose suggestions with confusable capitalization #121107

Merged
merged 1 commit into from
Feb 15, 2024
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
19 changes: 10 additions & 9 deletions compiler/rustc_errors/src/emitter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1742,9 +1742,17 @@ impl HumanEmitter {
buffer.append(0, level.to_str(), Style::Level(*level));
buffer.append(0, ": ", Style::HeaderMsg);

let mut msg = vec![(suggestion.msg.to_owned(), Style::NoStyle)];
if suggestions
.iter()
.take(MAX_SUGGESTIONS)
.any(|(_, _, _, only_capitalization)| *only_capitalization)
{
msg.push((" (notice the capitalization difference)".into(), Style::NoStyle));
}
self.msgs_to_buffer(
&mut buffer,
&[(suggestion.msg.to_owned(), Style::NoStyle)],
&msg,
args,
max_line_num_len,
"suggestion",
Expand All @@ -1753,12 +1761,8 @@ impl HumanEmitter {

let mut row_num = 2;
draw_col_separator_no_space(&mut buffer, 1, max_line_num_len + 1);
let mut notice_capitalization = false;
for (complete, parts, highlights, only_capitalization) in
suggestions.iter().take(MAX_SUGGESTIONS)
{
for (complete, parts, highlights, _) in suggestions.iter().take(MAX_SUGGESTIONS) {
debug!(?complete, ?parts, ?highlights);
notice_capitalization |= only_capitalization;

let has_deletion = parts.iter().any(|p| p.is_deletion(sm));
let is_multiline = complete.lines().count() > 1;
Expand Down Expand Up @@ -2057,9 +2061,6 @@ impl HumanEmitter {
let others = suggestions.len() - MAX_SUGGESTIONS;
let msg = format!("and {} other candidate{}", others, pluralize!(others));
buffer.puts(row_num, max_line_num_len + 3, &msg, Style::NoStyle);
} else if notice_capitalization {
let msg = "notice the capitalization difference";
buffer.puts(row_num, max_line_num_len + 3, msg, Style::NoStyle);
}
emit_to_destination(&buffer.render(), level, &mut self.dst, self.short_message)?;
Ok(())
Expand Down
3 changes: 2 additions & 1 deletion compiler/rustc_errors/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,9 @@ impl CodeSuggestion {
// We need to keep track of the difference between the existing code and the added
// or deleted code in order to point at the correct column *after* substitution.
let mut acc = 0;
let mut only_capitalization = false;
for part in &substitution.parts {
only_capitalization |= is_case_difference(sm, &part.snippet, part.span);
let cur_lo = sm.lookup_char_pos(part.span.lo());
if prev_hi.line == cur_lo.line {
let mut count =
Expand Down Expand Up @@ -392,7 +394,6 @@ impl CodeSuggestion {
}
}
highlights.push(std::mem::take(&mut line_highlight));
let only_capitalization = is_case_difference(sm, &buf, bounding_span);
// if the replacement already ends with a newline, don't print the next line
if !buf.ends_with('\n') {
push_trailing(&mut buf, prev_line.as_ref(), &prev_hi, None);
Expand Down
2 changes: 1 addition & 1 deletion src/tools/clippy/tests/ui/match_str_case_mismatch.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ error: this `match` arm has a differing case than its expression
LL | "~!@#$%^&*()-_=+Foo" => {},
| ^^^^^^^^^^^^^^^^^^^^
|
help: consider changing the case of this arm to respect `to_ascii_lowercase`
help: consider changing the case of this arm to respect `to_ascii_lowercase` (notice the capitalization difference)
|
LL | "~!@#$%^&*()-_=+foo" => {},
| ~~~~~~~~~~~~~~~~~~~~
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/error-codes/E0423.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ help: use struct literal syntax instead
|
LL | let f = Foo { a: val };
| ~~~~~~~~~~~~~~
help: a function with a similar name exists
help: a function with a similar name exists (notice the capitalization difference)
|
LL | let f = foo();
| ~~~
Expand Down
8 changes: 4 additions & 4 deletions tests/ui/parser/kw-in-trait-bounds.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ error: expected identifier, found keyword `fn`
LL | fn _f<F: fn(), G>(_: impl fn(), _: &dyn fn())
| ^^
|
help: use `Fn` to refer to the trait
help: use `Fn` to refer to the trait (notice the capitalization difference)
|
LL | fn _f<F: Fn(), G>(_: impl fn(), _: &dyn fn())
| ~~
Expand All @@ -15,7 +15,7 @@ error: expected identifier, found keyword `fn`
LL | fn _f<F: fn(), G>(_: impl fn(), _: &dyn fn())
| ^^
|
help: use `Fn` to refer to the trait
help: use `Fn` to refer to the trait (notice the capitalization difference)
|
LL | fn _f<F: fn(), G>(_: impl Fn(), _: &dyn fn())
| ~~
Expand All @@ -26,7 +26,7 @@ error: expected identifier, found keyword `fn`
LL | fn _f<F: fn(), G>(_: impl fn(), _: &dyn fn())
| ^^
|
help: use `Fn` to refer to the trait
help: use `Fn` to refer to the trait (notice the capitalization difference)
|
LL | fn _f<F: fn(), G>(_: impl fn(), _: &dyn Fn())
| ~~
Expand All @@ -37,7 +37,7 @@ error: expected identifier, found keyword `fn`
LL | G: fn(),
| ^^
|
help: use `Fn` to refer to the trait
help: use `Fn` to refer to the trait (notice the capitalization difference)
|
LL | G: Fn(),
| ~~
Expand Down
4 changes: 2 additions & 2 deletions tests/ui/parser/recover/recover-fn-trait-from-fn-kw.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ error: expected identifier, found keyword `fn`
LL | fn foo(_: impl fn() -> i32) {}
| ^^
|
help: use `Fn` to refer to the trait
help: use `Fn` to refer to the trait (notice the capitalization difference)
|
LL | fn foo(_: impl Fn() -> i32) {}
| ~~
Expand All @@ -15,7 +15,7 @@ error: expected identifier, found keyword `fn`
LL | fn foo2<T: fn(i32)>(_: T) {}
| ^^
|
help: use `Fn` to refer to the trait
help: use `Fn` to refer to the trait (notice the capitalization difference)
|
LL | fn foo2<T: Fn(i32)>(_: T) {}
| ~~
Expand Down
8 changes: 4 additions & 4 deletions tests/ui/parser/typod-const-in-const-param-def.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ error: `const` keyword was mistyped as `Const`
LL | pub fn foo<Const N: u8>() {}
| ^^^^^
|
help: use the `const` keyword
help: use the `const` keyword (notice the capitalization difference)
|
LL | pub fn foo<const N: u8>() {}
| ~~~~~
Expand All @@ -15,7 +15,7 @@ error: `const` keyword was mistyped as `Const`
LL | pub fn baz<Const N: u8, T>() {}
| ^^^^^
|
help: use the `const` keyword
help: use the `const` keyword (notice the capitalization difference)
|
LL | pub fn baz<const N: u8, T>() {}
| ~~~~~
Expand All @@ -26,7 +26,7 @@ error: `const` keyword was mistyped as `Const`
LL | pub fn qux<T, Const N: u8>() {}
| ^^^^^
|
help: use the `const` keyword
help: use the `const` keyword (notice the capitalization difference)
|
LL | pub fn qux<T, const N: u8>() {}
| ~~~~~
Expand All @@ -37,7 +37,7 @@ error: `const` keyword was mistyped as `Const`
LL | pub fn quux<T, Const N: u8, U>() {}
| ^^^^^
|
help: use the `const` keyword
help: use the `const` keyword (notice the capitalization difference)
|
LL | pub fn quux<T, const N: u8, U>() {}
| ~~~~~
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/suggestions/assoc-ct-for-assoc-method.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ LL | let x: i32 = MyS::foo;
|
= note: expected type `i32`
found fn item `fn() -> MyS {MyS::foo}`
help: try referring to the associated const `FOO` instead
help: try referring to the associated const `FOO` instead (notice the capitalization difference)
|
LL | let x: i32 = MyS::FOO;
| ~~~
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/suggestions/bool_typo_err_suggest.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ error[E0425]: cannot find value `False` in this scope
LL | let y = False;
| ^^^^^ not found in this scope
|
help: you may want to use a bool value instead
help: you may want to use a bool value instead (notice the capitalization difference)
|
LL | let y = false;
| ~~~~~
Expand Down
Loading