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, SuggestionStyle::ShowAlways,
].contains(&sugg.style) ].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() { let msg = if substitution.is_empty() || sugg.style.hide_inline() {
// This substitution is only removal OR we explicitly don't want to show the // 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. // 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_start_pos = sm.lookup_char_pos(part.span.lo()).col_display;
let span_end_pos = sm.lookup_char_pos(part.span.hi()).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... // 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 // ...or trailing spaces. Account for substitutions containing unicode
// characters. // characters.
let sub_len: usize = part let sub_len: usize =
.snippet if is_whitespace_addition { &part.snippet } else { part.snippet.trim() }
.trim() .chars()
.chars() .map(|ch| unicode_width::UnicodeWidthChar::width(ch).unwrap_or(1))
.map(|ch| unicode_width::UnicodeWidthChar::width(ch).unwrap_or(1)) .sum();
.sum();
let offset: isize = offsets let offset: isize = offsets
.iter() .iter()
@ -2130,7 +2140,7 @@ fn draw_code_line(
} }
} }
#[derive(Clone, Copy)] #[derive(Clone, Copy, Debug)]
enum DisplaySuggestion { enum DisplaySuggestion {
Underline, Underline,
Diff, 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 help: insert whitespace here to avoid this being parsed as a prefix in Rust 2021
| |
LL | m2!(z "hey"); LL | m2!(z "hey");
| | +
warning: prefix `prefix` is unknown warning: prefix `prefix` is unknown
--> $DIR/reserved-prefixes-migration.rs:19:9 --> $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 help: insert whitespace here to avoid this being parsed as a prefix in Rust 2021
| |
LL | m2!(prefix "hey"); LL | m2!(prefix "hey");
| | +
warning: prefix `hey` is unknown warning: prefix `hey` is unknown
--> $DIR/reserved-prefixes-migration.rs:22:9 --> $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 help: insert whitespace here to avoid this being parsed as a prefix in Rust 2021
| |
LL | m3!(hey #123); LL | m3!(hey #123);
| | +
warning: prefix `hey` is unknown warning: prefix `hey` is unknown
--> $DIR/reserved-prefixes-migration.rs:25:9 --> $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 help: insert whitespace here to avoid this being parsed as a prefix in Rust 2021
| |
LL | m3!(hey #hey); LL | m3!(hey #hey);
| | +
warning: prefix `kind` is unknown warning: prefix `kind` is unknown
--> $DIR/reserved-prefixes-migration.rs:35:14 --> $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 help: insert whitespace here to avoid this being parsed as a prefix in Rust 2021
| |
LL | #name = #kind #value LL | #name = #kind #value
| | +
warning: 5 warnings emitted warning: 5 warnings emitted

View File

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