mirror of
				https://github.com/sharkdp/bat.git
				synced 2025-10-29 22:24:35 +00:00 
			
		
		
		
	Support for line range plus syntax
This commit is contained in:
		
				
					committed by
					
						 David Peter
						David Peter
					
				
			
			
				
	
			
			
			
						parent
						
							b3247d9364
						
					
				
				
					commit
					0748783404
				
			| @@ -95,7 +95,8 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> { | ||||
|                      '--highlight-line 40' highlights line 40\n  \ | ||||
|                      '--highlight-line 30:40' highlights lines 30 to 40\n  \ | ||||
|                      '--highlight-line :40' highlights lines 1 to 40\n  \ | ||||
|                      '--highlight-line 40:' highlights lines 40 to the end of the file", | ||||
|                      '--highlight-line 40:' highlights lines 40 to the end of the file\n  \ | ||||
|                      '--highlight-line 30:+10' highlights lines 30 to 40", | ||||
|                 ), | ||||
|         ) | ||||
|         .arg( | ||||
| @@ -423,7 +424,8 @@ pub fn build_app(interactive_output: bool) -> ClapApp<'static, 'static> { | ||||
|                      '--line-range 30:40' prints lines 30 to 40\n  \ | ||||
|                      '--line-range :40' prints lines 1 to 40\n  \ | ||||
|                      '--line-range 40:' prints lines 40 to the end of the file\n  \ | ||||
|                      '--line-range 40' only prints line 40", | ||||
|                      '--line-range 40' only prints line 40\n  \ | ||||
|                      '--line-range 30:+10' prints lines 30 to 40", | ||||
|                 ), | ||||
|         ) | ||||
|         .arg( | ||||
|   | ||||
| @@ -47,7 +47,16 @@ impl LineRange { | ||||
|             } | ||||
|             2 => { | ||||
|                 new_range.lower = line_numbers[0].parse()?; | ||||
|                 new_range.upper = line_numbers[1].parse()?; | ||||
|  | ||||
|                 new_range.upper = if line_numbers[1].bytes().next().unwrap() == b'+' { | ||||
|                     let more_lines = &line_numbers[1][1..] | ||||
|                         .parse() | ||||
|                         .map_err(|_| "Invalid line number after +")?; | ||||
|                     new_range.lower + more_lines | ||||
|                 } else { | ||||
|                     line_numbers[1].parse()? | ||||
|                 }; | ||||
|  | ||||
|                 Ok(new_range) | ||||
|             } | ||||
|             _ => Err( | ||||
| @@ -100,6 +109,23 @@ fn test_parse_fail() { | ||||
|     assert!(range.is_err()); | ||||
| } | ||||
|  | ||||
| #[test] | ||||
| fn test_parse_plus() { | ||||
|     let range = LineRange::from("40:+10").expect("Shouldn't fail on test!"); | ||||
|     assert_eq!(40, range.lower); | ||||
|     assert_eq!(50, range.upper); | ||||
| } | ||||
|  | ||||
| #[test] | ||||
| fn test_parse_plus_fail() { | ||||
|     let range = LineRange::from("40:+z"); | ||||
|     assert!(range.is_err()); | ||||
|     let range = LineRange::from("40:+-10"); | ||||
|     assert!(range.is_err()); | ||||
|     let range = LineRange::from("40:+"); | ||||
|     assert!(range.is_err()); | ||||
| } | ||||
|  | ||||
| #[derive(Copy, Clone, Debug, PartialEq)] | ||||
| pub enum RangeCheckResult { | ||||
|     // Within one of the given ranges | ||||
|   | ||||
		Reference in New Issue
	
	Block a user