@@ -73,20 +73,32 @@ pub fn run(maybe_files: Option<&[PathBuf]>) -> Result<(), ()> {
7373 & format ! ( "{}" , diagnostic. message) ,
7474 ) ;
7575 let range = diagnostic. range ;
76+ let padding_arrow = range. end . line . to_string ( ) . len ( ) ;
7677 eprintln ! (
77- "{} {}:{}:{}" ,
78- style( " -->" ) . bold( ) . blue( ) ,
78+ "{}{} {}:{}:{}" ,
79+ " " . repeat( padding_arrow) ,
80+ style( "-->" ) . bold( ) . blue( ) ,
7981 path. display( ) ,
8082 range. start. line,
8183 range. start. character
8284 ) ;
8385
86+ let line_start = usize:: max ( 1 , range. start . line as usize ) - 1 ;
8487 let lines = {
85- let start = rope. line_to_char ( usize :: max ( 1 , range . start . line as usize ) - 1 ) ;
88+ let start = rope. line_to_char ( line_start ) ;
8689 let end = rope. line_to_char ( range. end . line as usize ) + range. end . character as usize ;
8790 rope. slice ( start..end)
8891 } ;
89- let width = range. end . line . to_string ( ) . len ( ) + 1 ;
92+ let width = padding_arrow + 1 ;
93+ for ( i, line) in lines. lines ( ) . enumerate ( ) {
94+ eprint ! (
95+ "{} {}" ,
96+ style( format!( "{:<width$}|" , line_start + i) ) . blue( ) . bold( ) ,
97+ line
98+ ) ;
99+ }
100+ eprintln ! ( ) ;
101+
90102 let width_message = u32:: max (
91103 1 ,
92104 if range. end . character > range. start . character {
@@ -95,10 +107,6 @@ pub fn run(maybe_files: Option<&[PathBuf]>) -> Result<(), ()> {
95107 range. start . character - range. end . character
96108 } ,
97109 ) ;
98- for ( i, line) in lines. lines ( ) . enumerate ( ) {
99- eprint ! ( "{} {}" , style( format!( "{i:<width$}|" ) ) . blue( ) . bold( ) , line) ;
100- }
101- eprintln ! ( ) ;
102110 eprintln ! (
103111 "{}{} {}" ,
104112 " " . repeat( width) ,
0 commit comments