@@ -5,6 +5,8 @@ use std::path::{Component, Path};
55use std:: { fs, io} ;
66use std:: { ops:: RangeInclusive , path:: PathBuf } ;
77
8+ use crate :: cli:: LinesChangedOnly ;
9+
810/// A structure to represent a file's path and line changes.
911#[ derive( Debug ) ]
1012pub struct FileObj {
@@ -52,7 +54,7 @@ impl FileObj {
5254 /// A helper function to consolidate a [Vec<u32>] of line numbers into a
5355 /// [Vec<RangeInclusive<u32>>] in which each range describes the beginning and
5456 /// ending of a group of consecutive line numbers.
55- fn consolidate_numbers_to_ranges ( lines : & Vec < u32 > ) -> Vec < RangeInclusive < u32 > > {
57+ fn consolidate_numbers_to_ranges ( lines : & [ u32 ] ) -> Vec < RangeInclusive < u32 > > {
5658 let mut range_start = None ;
5759 let mut ranges: Vec < RangeInclusive < u32 > > = Vec :: new ( ) ;
5860 for ( index, number) in lines. iter ( ) . enumerate ( ) {
@@ -69,13 +71,11 @@ impl FileObj {
6971 ranges
7072 }
7173
72- pub fn get_ranges ( & self , lines_changed_only : u8 ) -> Vec < RangeInclusive < u32 > > {
73- if lines_changed_only == 2 {
74- self . diff_chunks . to_vec ( )
75- } else if lines_changed_only == 1 {
76- self . added_ranges . to_vec ( )
77- } else {
78- Vec :: new ( )
74+ pub fn get_ranges ( & self , lines_changed_only : & LinesChangedOnly ) -> Vec < RangeInclusive < u32 > > {
75+ match lines_changed_only {
76+ LinesChangedOnly :: Diff => self . diff_chunks . to_vec ( ) ,
77+ LinesChangedOnly :: On => self . added_ranges . to_vec ( ) ,
78+ _ => Vec :: new ( ) ,
7979 }
8080 }
8181}
@@ -249,6 +249,7 @@ mod test {
249249 use std:: path:: PathBuf ;
250250
251251 use super :: { get_line_cols_from_offset, list_source_files, normalize_path, FileObj } ;
252+ use crate :: cli:: LinesChangedOnly ;
252253 use crate :: cli:: { get_arg_parser, parse_ignore} ;
253254 use crate :: common_fs:: is_file_in_list;
254255
@@ -406,7 +407,7 @@ mod test {
406407 #[ test]
407408 fn get_ranges_0 ( ) {
408409 let file_obj = FileObj :: new ( PathBuf :: from ( "tests/demo/demo.cpp" ) ) ;
409- let ranges = file_obj. get_ranges ( 0 ) ;
410+ let ranges = file_obj. get_ranges ( & LinesChangedOnly :: Off ) ;
410411 assert ! ( ranges. is_empty( ) ) ;
411412 }
412413
@@ -419,7 +420,7 @@ mod test {
419420 added_lines,
420421 diff_chunks. clone ( ) ,
421422 ) ;
422- let ranges = file_obj. get_ranges ( 2 ) ;
423+ let ranges = file_obj. get_ranges ( & LinesChangedOnly :: Diff ) ;
423424 assert_eq ! ( ranges, diff_chunks) ;
424425 }
425426
@@ -432,7 +433,7 @@ mod test {
432433 added_lines,
433434 diff_chunks,
434435 ) ;
435- let ranges = file_obj. get_ranges ( 1 ) ;
436+ let ranges = file_obj. get_ranges ( & LinesChangedOnly :: On ) ;
436437 assert_eq ! ( ranges, vec![ 4 ..=5 , 9 ..=9 ] ) ;
437438 }
438439}
0 commit comments