Don't trim substitution if it's only whitespace

This commit is contained in:
Michael Goulet 2022-09-11 20:02:33 +00:00
parent 370c816a71
commit c2cff68d84
3 changed files with 33 additions and 23 deletions

View File

@ -268,7 +268,10 @@ fn primary_span_formatted<'a>(
SuggestionStyle::ShowAlways,
].contains(&sugg.style)
{
let substitution = &sugg.substitutions[0].parts[0].snippet.trim();
// Don't trim the substitution if it's only whitespace changes
let substitution = &sugg.substitutions[0].parts[0].snippet;
let substitution =
if substitution.trim().is_empty() { substitution } else { substitution.trim() };
let msg = if substitution.is_empty() || sugg.style.hide_inline() {
// This substitution is only removal OR we explicitly don't want to show the
// code inline (`hide_inline`). Therefore, we don't show the substitution.
@ -1880,16 +1883,23 @@ fn emit_suggestion_default(
let span_start_pos = sm.lookup_char_pos(part.span.lo()).col_display;
let span_end_pos = sm.lookup_char_pos(part.span.hi()).col_display;
// If this addition is _only_ whitespace, then don't trim it,
// or else we're just not rendering anything.
let is_whitespace_addition = part.snippet.trim().is_empty();
// Do not underline the leading...
let start = part.snippet.len().saturating_sub(part.snippet.trim_start().len());
let start = if is_whitespace_addition {
0
} else {
part.snippet.len().saturating_sub(part.snippet.trim_start().len())
};
// ...or trailing spaces. Account for substitutions containing unicode
// characters.
let sub_len: usize = part
.snippet
.trim()
.chars()
.map(|ch| unicode_width::UnicodeWidthChar::width(ch).unwrap_or(1))
.sum();
let sub_len: usize =
if is_whitespace_addition { &part.snippet } else { part.snippet.trim() }
.chars()
.map(|ch| unicode_width::UnicodeWidthChar::width(ch).unwrap_or(1))
.sum();
let offset: isize = offsets
.iter()
@ -2130,7 +2140,7 @@ fn draw_code_line(
}
}
#[derive(Clone, Copy)]
#[derive(Clone, Copy, Debug)]
enum DisplaySuggestion {
Underline,
Diff,

View File

@ -14,7 +14,7 @@ LL | #![warn(rust_2021_prefixes_incompatible_syntax)]
help: insert whitespace here to avoid this being parsed as a prefix in Rust 2021
|
LL | m2!(z "hey");
|
| +
warning: prefix `prefix` is unknown
--> $DIR/reserved-prefixes-migration.rs:19:9
@ -27,7 +27,7 @@ LL | m2!(prefix"hey");
help: insert whitespace here to avoid this being parsed as a prefix in Rust 2021
|
LL | m2!(prefix "hey");
|
| +
warning: prefix `hey` is unknown
--> $DIR/reserved-prefixes-migration.rs:22:9
@ -40,7 +40,7 @@ LL | m3!(hey#123);
help: insert whitespace here to avoid this being parsed as a prefix in Rust 2021
|
LL | m3!(hey #123);
|
| +
warning: prefix `hey` is unknown
--> $DIR/reserved-prefixes-migration.rs:25:9
@ -53,7 +53,7 @@ LL | m3!(hey#hey);
help: insert whitespace here to avoid this being parsed as a prefix in Rust 2021
|
LL | m3!(hey #hey);
|
| +
warning: prefix `kind` is unknown
--> $DIR/reserved-prefixes-migration.rs:35:14
@ -66,7 +66,7 @@ LL | #name = #kind#value
help: insert whitespace here to avoid this being parsed as a prefix in Rust 2021
|
LL | #name = #kind #value
|
| +
warning: 5 warnings emitted

View File

@ -8,7 +8,7 @@ LL | demo3!(foo#bar);
help: consider inserting whitespace here
|
LL | demo3!(foo #bar);
|
| +
error: prefix `foo` is unknown
--> $DIR/reserved-prefixes.rs:17:12
@ -20,7 +20,7 @@ LL | demo2!(foo"bar");
help: consider inserting whitespace here
|
LL | demo2!(foo "bar");
|
| +
error: prefix `foo` is unknown
--> $DIR/reserved-prefixes.rs:18:12
@ -32,7 +32,7 @@ LL | demo2!(foo'b');
help: consider inserting whitespace here
|
LL | demo2!(foo 'b');
|
| +
error: prefix `foo` is unknown
--> $DIR/reserved-prefixes.rs:20:12
@ -44,7 +44,7 @@ LL | demo2!(foo'b);
help: consider inserting whitespace here
|
LL | demo2!(foo 'b);
|
| +
error: prefix `foo` is unknown
--> $DIR/reserved-prefixes.rs:21:12
@ -56,7 +56,7 @@ LL | demo3!(foo# bar);
help: consider inserting whitespace here
|
LL | demo3!(foo # bar);
|
| +
error: prefix `foo` is unknown
--> $DIR/reserved-prefixes.rs:22:12
@ -68,7 +68,7 @@ LL | demo4!(foo#! bar);
help: consider inserting whitespace here
|
LL | demo4!(foo #! bar);
|
| +
error: prefix `foo` is unknown
--> $DIR/reserved-prefixes.rs:23:12
@ -80,7 +80,7 @@ LL | demo4!(foo## bar);
help: consider inserting whitespace here
|
LL | demo4!(foo ## bar);
|
| +
error: prefix `foo` is unknown
--> $DIR/reserved-prefixes.rs:25:12
@ -92,7 +92,7 @@ LL | demo4!(foo#bar#);
help: consider inserting whitespace here
|
LL | demo4!(foo #bar#);
|
| +
error: prefix `bar` is unknown
--> $DIR/reserved-prefixes.rs:25:16
@ -104,7 +104,7 @@ LL | demo4!(foo#bar#);
help: consider inserting whitespace here
|
LL | demo4!(foo#bar #);
|
| +
error: aborting due to 9 previous errors