Support for line range plus syntax

This commit is contained in:
Bojan Durdevic authored and David Peter committed 2021-08-23 19:55:41 +02:00
1 parent b3247d9364
commit 0748783404
4 files changed
+36 -3

No files matched your search

+27 -1
View File
@@ -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