Skip to content

Commit b157102

Browse files
committed
fix: Handle window close for lines with no annotations
1 parent ded7a3b commit b157102

File tree

5 files changed

+56
-4
lines changed

5 files changed

+56
-4
lines changed

examples/multislice.svg

Lines changed: 4 additions & 2 deletions
Loading

src/renderer/mod.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,6 +1004,16 @@ impl Renderer {
10041004
margin,
10051005
);
10061006

1007+
// If there are no annotations, we are done
1008+
if line_info.annotations.is_empty() {
1009+
// `close_window` normally gets handled later, but we are early
1010+
// returning, so it needs to be handled here
1011+
if close_window {
1012+
self.draw_col_separator_end(buffer, line_offset + 1, width_offset - 2);
1013+
}
1014+
return vec![];
1015+
}
1016+
10071017
// Special case when there's only one annotation involved, it is the start of a multiline
10081018
// span and there's no text at the beginning of the code line. Instead of doing the whole
10091019
// graph:

tests/color/ann_multiline2.term.svg

Lines changed: 3 additions & 1 deletion
Loading

tests/color/multiple_annotations.term.svg

Lines changed: 3 additions & 1 deletion
Loading

tests/formatter.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ error:
194194
|
195195
5402 | This is line 1
196196
5403 | This is line 2
197+
|
197198
"#]];
198199
let renderer = Renderer::plain();
199200
assert_data_eq!(renderer.render(input), expected_ascii);
@@ -203,6 +204,7 @@ error:
203204
╭▸
204205
5402 │ This is line 1
205206
5403 │ This is line 2
207+
╰╴
206208
"#]];
207209
let renderer = renderer.decor_style(DecorStyle::Unicode);
208210
assert_data_eq!(renderer.render(input), expected_unicode);
@@ -234,6 +236,7 @@ error:
234236
::: file2.rs:2
235237
|
236238
2 | This is slice 2
239+
|
237240
"#]];
238241
let renderer = Renderer::plain();
239242
assert_data_eq!(renderer.render(input), expected_ascii);
@@ -247,6 +250,7 @@ error:
247250
⸬ file2.rs:2
248251
249252
2 │ This is slice 2
253+
╰╴
250254
"#]];
251255
let renderer = renderer.decor_style(DecorStyle::Unicode);
252256
assert_data_eq!(renderer.render(input), expected_unicode);
@@ -340,6 +344,7 @@ error:
340344
|
341345
56 | This is an example
342346
57 | of content lines
347+
|
343348
"#]];
344349
let renderer = Renderer::plain();
345350
assert_data_eq!(renderer.render(input), expected_ascii);
@@ -349,6 +354,7 @@ error:
349354
╭▸
350355
56 │ This is an example
351356
57 │ of content lines
357+
╰╴
352358
"#]];
353359
let renderer = renderer.decor_style(DecorStyle::Unicode);
354360
assert_data_eq!(renderer.render(input), expected_unicode);
@@ -427,6 +433,7 @@ error:
427433
--> file.rs
428434
|
429435
1 |
436+
|
430437
"#]];
431438
let renderer = Renderer::plain();
432439
assert_data_eq!(renderer.render(input), expected_ascii);
@@ -436,6 +443,7 @@ error:
436443
╭▸ file.rs
437444
438445
1 │
446+
╰╴
439447
"#]];
440448
let renderer = renderer.decor_style(DecorStyle::Unicode);
441449
assert_data_eq!(renderer.render(input), expected_unicode);
@@ -456,6 +464,7 @@ LL | This is an example
456464
LL | of content lines
457465
LL |
458466
LL | abc
467+
|
459468
"#]];
460469
let renderer = Renderer::plain().anonymized_line_numbers(true);
461470
assert_data_eq!(renderer.render(input), expected_ascii);
@@ -467,6 +476,7 @@ LL │ This is an example
467476
LL │ of content lines
468477
LL │
469478
LL │ abc
479+
╰╴
470480
"#]];
471481
let renderer = renderer.decor_style(DecorStyle::Unicode);
472482
assert_data_eq!(renderer.render(input), expected_unicode);
@@ -561,6 +571,7 @@ error:
561571
3 | a
562572
| ^
563573
4 | b
574+
|
564575
"#]];
565576
let renderer = Renderer::plain();
566577
assert_data_eq!(renderer.render(input), expected_ascii);
@@ -572,6 +583,7 @@ error:
572583
3 │ a
573584
│ ━
574585
4 │ b
586+
╰╴
575587
"#]];
576588
let renderer = renderer.decor_style(DecorStyle::Unicode);
577589
assert_data_eq!(renderer.render(input), expected_unicode);
@@ -629,6 +641,7 @@ error:
629641
2 | | にちは
630642
| |_^
631643
3 | 世界
644+
|
632645
"#]];
633646

634647
let renderer = Renderer::plain();
@@ -643,6 +656,7 @@ error:
643656
2 │ ┃ にちは
644657
│ ┗━┛
645658
3 │ 世界
659+
╰╴
646660
"#]];
647661
let renderer = renderer.decor_style(DecorStyle::Unicode);
648662
assert_data_eq!(renderer.render(input), expected_unicode);
@@ -699,6 +713,7 @@ error:
699713
3 | a
700714
| ^
701715
4 | b
716+
|
702717
"#]];
703718
let renderer = Renderer::plain();
704719
assert_data_eq!(renderer.render(input), expected_ascii);
@@ -710,6 +725,7 @@ error:
710725
3 │ a
711726
│ ━
712727
4 │ b
728+
╰╴
713729
"#]];
714730
let renderer = renderer.decor_style(DecorStyle::Unicode);
715731
assert_data_eq!(renderer.render(input), expected_unicode);
@@ -803,6 +819,7 @@ error:
803819
3 | a
804820
| ^
805821
4 | b
822+
|
806823
"#]];
807824
let renderer = Renderer::plain();
808825
assert_data_eq!(renderer.render(input), expected_ascii);
@@ -814,6 +831,7 @@ error:
814831
3 │ a
815832
│ ━
816833
4 │ b
834+
╰╴
817835
"#]];
818836
let renderer = renderer.decor_style(DecorStyle::Unicode);
819837
assert_data_eq!(renderer.render(input), expected_unicode);
@@ -838,6 +856,7 @@ error:
838856
2 | | にちは
839857
| |_^
840858
3 | 世界
859+
|
841860
"#]];
842861

843862
let renderer = Renderer::plain();
@@ -852,6 +871,7 @@ error:
852871
2 │ ┃ にちは
853872
│ ┗━┛
854873
3 │ 世界
874+
╰╴
855875
"#]];
856876
let renderer = renderer.decor_style(DecorStyle::Unicode);
857877
assert_data_eq!(renderer.render(input), expected_unicode);
@@ -981,6 +1001,7 @@ error:
9811001
2 | | にちは
9821002
| |__^
9831003
3 | 世界
1004+
|
9841005
"#]];
9851006

9861007
let renderer = Renderer::plain();
@@ -995,6 +1016,7 @@ error:
9951016
2 │ ┃ にちは
9961017
│ ┗━━┛
9971018
3 │ 世界
1019+
╰╴
9981020
"#]];
9991021
let renderer = renderer.decor_style(DecorStyle::Unicode);
10001022
assert_data_eq!(renderer.render(input), expected_unicode);
@@ -1057,6 +1079,7 @@ error:
10571079
4 | | b
10581080
| |__^
10591081
5 | c
1082+
|
10601083
"#]];
10611084
let renderer = Renderer::plain();
10621085
assert_data_eq!(renderer.render(input), expected_ascii);
@@ -1070,6 +1093,7 @@ error:
10701093
4 │ ┃ b
10711094
│ ┗━━┛
10721095
5 │ c
1096+
╰╴
10731097
"#]];
10741098
let renderer = renderer.decor_style(DecorStyle::Unicode);
10751099
assert_data_eq!(renderer.render(input), expected_unicode);
@@ -1444,6 +1468,7 @@ error: title
14441468
3 | ccc
14451469
| ^^^ annotation
14461470
4 | ddd
1471+
|
14471472
"#]];
14481473
let renderer = Renderer::plain();
14491474
assert_data_eq!(renderer.render(input), expected_ascii);
@@ -1457,6 +1482,7 @@ error: title
14571482
3 │ ccc
14581483
│ ━━━ annotation
14591484
4 │ ddd
1485+
╰╴
14601486
"#]];
14611487
let renderer = renderer.decor_style(DecorStyle::Unicode);
14621488
assert_data_eq!(renderer.render(input), expected_unicode);
@@ -1487,6 +1513,7 @@ error: title
14871513
3 | ccc
14881514
| ^^ annotation
14891515
4 | ddd
1516+
|
14901517
"#]];
14911518
let renderer = Renderer::plain();
14921519
assert_data_eq!(renderer.render(input), expected_ascii);
@@ -1500,6 +1527,7 @@ error: title
15001527
3 │ ccc
15011528
│ ━━ annotation
15021529
4 │ ddd
1530+
╰╴
15031531
"#]];
15041532
let renderer = renderer.decor_style(DecorStyle::Unicode);
15051533
assert_data_eq!(renderer.render(input), expected_unicode);
@@ -3467,6 +3495,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
34673495
12 | crazy
34683496
13 | quack
34693497
14 | zappy
3498+
|
34703499
"#]];
34713500
let renderer = Renderer::plain();
34723501
assert_data_eq!(renderer.render(input), expected_ascii);
@@ -3482,6 +3511,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
34823511
12 │ crazy
34833512
13 │ quack
34843513
14 │ zappy
3514+
╰╴
34853515
"#]];
34863516
let renderer = renderer.decor_style(DecorStyle::Unicode);
34873517
assert_data_eq!(renderer.render(input), expected_unicode);
@@ -3505,6 +3535,7 @@ fn empty_span_start_line() {
35053535
| ^ E112
35063536
10 | #: E113
35073537
11 | print()
3538+
|
35083539
"#]];
35093540
let renderer = Renderer::plain();
35103541
assert_data_eq!(renderer.render(input), expected_ascii);
@@ -3517,6 +3548,7 @@ fn empty_span_start_line() {
35173548
│ ━ E112
35183549
10 │ #: E113
35193550
11 │ print()
3551+
╰╴
35203552
"#]];
35213553
let renderer = renderer.decor_style(DecorStyle::Unicode);
35223554
assert_data_eq!(renderer.render(input), expected_unicode);
@@ -3973,6 +4005,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
39734005
| ^^^^^
39744006
...
39754007
18 | zappy
4008+
|
39764009
"#]];
39774010
let renderer = Renderer::plain();
39784011
assert_data_eq!(renderer.render(input), expected_ascii);
@@ -3984,6 +4017,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
39844017
│ ━━━━━
39854018
39864019
18 │ zappy
4020+
╰╴
39874021
"#]];
39884022
let renderer = renderer.decor_style(DecorStyle::Unicode);
39894023
assert_data_eq!(renderer.render(input), expected_unicode);
@@ -4019,6 +4053,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
40194053
| ^^^^^
40204054
13 | fuzzy
40214055
14 | pizza
4056+
|
40224057
"#]];
40234058
let renderer = Renderer::plain();
40244059
assert_data_eq!(renderer.render(input), expected_ascii);
@@ -4030,6 +4065,7 @@ error[E0277]: the size for values of type `T` cannot be known at compilation tim
40304065
│ ━━━━━
40314066
13 │ fuzzy
40324067
14 │ pizza
4068+
╰╴
40334069
"#]];
40344070
let renderer = renderer.decor_style(DecorStyle::Unicode);
40354071
assert_data_eq!(renderer.render(input), expected_unicode);

0 commit comments

Comments
 (0)