@@ -2,7 +2,7 @@ use std::env;
22use std:: fs;
33use std:: process;
44
5- use exhash:: format_lnhash ;
5+ use exhash:: lnhashview ;
66
77fn usage ( ) {
88 eprintln ! (
@@ -73,42 +73,24 @@ fn main() {
7373 return ;
7474 }
7575
76- let ( start_line, end_line) = match ( start, end) {
77- ( None , None ) => ( 1 , lines. len ( ) ) ,
78- ( Some ( s) , None ) => ( s, s) ,
79- ( Some ( s) , Some ( e) ) => ( s, e) ,
76+ // When only start is given, CLI shows just that one line
77+ let ( start, end) = match ( start, end) {
78+ ( Some ( s) , None ) => ( Some ( s) , Some ( s) ) ,
8079 ( None , Some ( _) ) => {
8180 eprintln ! ( "error: end_line requires start_line" ) ;
8281 process:: exit ( 2 ) ;
8382 }
83+ other => other,
8484 } ;
8585
86- if start_line == 0 {
87- eprintln ! ( "error: start_line is 1-based (must be >= 1)" ) ;
88- process:: exit ( 2 ) ;
89- }
90-
91- if end_line < start_line {
92- eprintln ! ( "error: end_line must be >= start_line" ) ;
93- process:: exit ( 2 ) ;
94- }
95-
96- if end_line > lines. len ( ) {
97- eprintln ! (
98- "error: end_line {end_line} is beyond EOF (file has {} line(s))" ,
99- lines. len( )
100- ) ;
101- process:: exit ( 2 ) ;
102- }
103-
104- for ( idx, line) in lines
105- . iter ( )
106- . enumerate ( )
107- . skip ( start_line - 1 )
108- . take ( end_line - start_line + 1 )
109- {
110- let lineno = idx + 1 ;
111- let lnh = format_lnhash ( lineno, line) ;
112- println ! ( "{lnh} {line}" ) ;
86+ let result = match lnhashview ( & lines, start, end) {
87+ Ok ( r) => r,
88+ Err ( e) => {
89+ eprintln ! ( "error: {e}" ) ;
90+ process:: exit ( 2 ) ;
91+ }
92+ } ;
93+ for line in result {
94+ println ! ( "{line}" ) ;
11395 }
11496}
0 commit comments