@@ -135,11 +135,17 @@ fn main() -> std::io::Result<()> {
135135 let path = PathBuf :: from ( line) . canonicalize ( ) ?;
136136 let trap_file = path_for ( & trap_dir, & path, trap_compression. extension ( ) ) ;
137137 let src_archive_file = path_for ( & src_archive_dir, & path, "" ) ;
138- let source = std:: fs:: read ( & path) ?;
138+ let mut source = std:: fs:: read ( & path) ?;
139139 let code_ranges;
140140 if path. extension ( ) . map_or ( false , |x| x == "erb" ) {
141141 tracing:: info!( "scanning: {}" , path. display( ) ) ;
142- code_ranges = scan_erb ( erb, & source) ;
142+ let ( ranges, line_breaks) = scan_erb ( erb, & source) ;
143+ for i in line_breaks {
144+ if i < source. len ( ) {
145+ source[ i] = b'\n' ;
146+ }
147+ }
148+ code_ranges = ranges;
143149 } else {
144150 code_ranges = vec ! [ ] ;
145151 }
@@ -159,18 +165,25 @@ fn main() -> std::io::Result<()> {
159165 } )
160166}
161167
162- fn scan_erb ( erb : Language , source : & std:: vec:: Vec < u8 > ) -> Vec < Range > {
168+ fn scan_erb ( erb : Language , source : & std:: vec:: Vec < u8 > ) -> ( Vec < Range > , Vec < usize > ) {
163169 let mut parser = Parser :: new ( ) ;
164170 parser. set_language ( erb) . unwrap ( ) ;
165171 let tree = parser. parse ( & source, None ) . expect ( "Failed to parse file" ) ;
166172 let mut result = Vec :: new ( ) ;
173+ let mut line_breaks = vec ! [ ] ;
167174
168175 for n in tree. root_node ( ) . children ( & mut tree. walk ( ) ) {
169176 let kind = n. kind ( ) ;
170177 if kind == "directive" || kind == "output_directive" {
171178 for c in n. children ( & mut tree. walk ( ) ) {
172179 if c. kind ( ) == "code" {
173- result. push ( c. range ( ) ) ;
180+ let mut range = c. range ( ) ;
181+ if range. end_byte < source. len ( ) {
182+ line_breaks. push ( range. end_byte ) ;
183+ range. end_byte += 1 ;
184+ range. end_point . column += 1 ;
185+ }
186+ result. push ( range) ;
174187 }
175188 }
176189 }
@@ -185,7 +198,7 @@ fn scan_erb(erb: Language, source: &std::vec::Vec<u8>) -> Vec<Range> {
185198 end_point : root. end_position ( ) ,
186199 } ) ;
187200 }
188- result
201+ ( result, line_breaks )
189202}
190203
191204fn path_for ( dir : & Path , path : & Path , ext : & str ) -> PathBuf {
0 commit comments