Skip to content

Commit 6d00258

Browse files
committed
fix: Properly handle annotating leading whitespace
1 parent 1598c65 commit 6d00258

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

src/renderer/margin.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,12 @@ impl Margin {
7171

7272
if self.computed_right - self.computed_left > self.term_width {
7373
// Trimming only whitespace isn't enough, let's get craftier.
74-
if self.label_right - self.whitespace_left <= self.term_width {
74+
if self.label_right.saturating_sub(self.whitespace_left) <= self.term_width
75+
// Trimming whitespace when the right-most label is somewhrere
76+
// within it would result in the label pointing to the wrong
77+
// place
78+
&& self.label_right >= self.whitespace_left
79+
{
7580
// Attempt to fit the code window only trimming whitespace.
7681
self.computed_left = self.whitespace_left;
7782
self.computed_right = self.computed_left + self.term_width;

tests/rustc_tests.rs

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5648,7 +5648,6 @@ LL │ static ROOK_ATTACKS_TABLE: () = {
56485648
}
56495649

56505650
#[test]
5651-
#[should_panic = "attempt to subtract with overflow"]
56525651
fn emitter_overflow_bad_whitespace() {
56535652
// tests/ui/errors/emitter-overflow-bad-whitespace.rs
56545653
let source = r#"                                        fn main() { return; }
@@ -5669,11 +5668,33 @@ fn emitter_overflow_bad_whitespace() {
56695668
.patch(Patch::new(0..2, " ")),
56705669
),
56715670
];
5672-
let expected_ascii = str![[r#""#]];
5671+
let expected_ascii = str![[r#"
5672+
error: unknown start of token:  
5673+
--> $DIR/emitter-overflow-bad-whitespace.rs:10:1
5674+
|
5675+
10 |     ...
5676+
| ^
5677+
|
5678+
help: Unicode character ' ' (No-Break Space) looks like ' ' (Space), but it is not
5679+
|
5680+
10 |                                       fn main() { return; }
5681+
| +
5682+
"#]];
56735683
let renderer_ascii = Renderer::plain().term_width(1);
56745684
assert_data_eq!(renderer_ascii.render(report), expected_ascii);
56755685

5676-
let expected_unicode = str![[r#""#]];
5686+
let expected_unicode = str![[r#"
5687+
error: unknown start of token:  
5688+
╭▸ $DIR/emitter-overflow-bad-whitespace.rs:10:1
5689+
5690+
10 │       …
5691+
│ ━
5692+
╰╴
5693+
help: Unicode character ' ' (No-Break Space) looks like ' ' (Space), but it is not
5694+
╭╴
5695+
10 │                                       fn main() { return; }
5696+
╰╴+
5697+
"#]];
56775698
let renderer_unicode = renderer_ascii.decor_style(DecorStyle::Unicode);
56785699
assert_data_eq!(renderer_unicode.render(report), expected_unicode);
56795700
}

0 commit comments

Comments
 (0)