File tree 2 files changed +40
-2
lines changed
2 files changed +40
-2
lines changed Original file line number Diff line number Diff line change @@ -409,7 +409,11 @@ fn format_body(
409
409
} ) ;
410
410
}
411
411
} else {
412
- let range = ( start - line_start_index, start - line_start_index + 1 ) ;
412
+ let annotation_start_col = char_widths
413
+ . iter ( )
414
+ . take ( start - line_start_index)
415
+ . sum :: < usize > ( ) ;
416
+ let range = ( annotation_start_col, annotation_start_col + 1 ) ;
413
417
body. insert (
414
418
body_idx + 1 ,
415
419
DisplayLine :: Source {
@@ -466,7 +470,11 @@ fn format_body(
466
470
} ) ;
467
471
}
468
472
469
- let end_mark = ( end - line_start_index) . saturating_sub ( 1 ) ;
473
+ let end_mark = char_widths
474
+ . iter ( )
475
+ . take ( end - line_start_index)
476
+ . sum :: < usize > ( )
477
+ . saturating_sub ( 1 ) ;
470
478
let range = ( end_mark - margin_left, ( end_mark + 1 ) - margin_left) ;
471
479
body. insert (
472
480
body_idx + 1 ,
Original file line number Diff line number Diff line change @@ -578,3 +578,33 @@ fn test_point_to_double_width_characters() {
578
578
579
579
assert_eq ! ( DisplayList :: from( snippets) . to_string( ) , expected) ;
580
580
}
581
+
582
+ #[ test]
583
+ fn test_point_to_double_width_characters_across_lines ( ) {
584
+ let snippets = Snippet {
585
+ slices : vec ! [ snippet:: Slice {
586
+ source: "おはよう\n ございます" ,
587
+ line_start: 1 ,
588
+ origin: Some ( "<current file>" ) ,
589
+ annotations: vec![ snippet:: SourceAnnotation {
590
+ range: ( 2 , 8 ) ,
591
+ label: "Good morning" ,
592
+ annotation_type: snippet:: AnnotationType :: Error ,
593
+ } ] ,
594
+ fold: false ,
595
+ } ] ,
596
+ title : None ,
597
+ footer : vec ! [ ] ,
598
+ opt : Default :: default ( ) ,
599
+ } ;
600
+
601
+ let expected = r#" --> <current file>:1:3
602
+ |
603
+ 1 | おはよう
604
+ | _____^
605
+ 2 | | ございます
606
+ | |______^ Good morning
607
+ |"# ;
608
+
609
+ assert_eq ! ( DisplayList :: from( snippets) . to_string( ) , expected) ;
610
+ }
You can’t perform that action at this time.
0 commit comments