summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBojan Durdevic <bojan88@gmail.com>2021-10-11 19:01:00 -0400
committerDavid Peter <sharkdp@users.noreply.github.com>2021-11-24 07:27:36 +0100
commitbc86c2918526d19ac397de9311bf4068a641772d (patch)
tree3416201db7ecafcedbff63ee3cc277e29941f31a
parentd2175d6382f797db21f345615dccd5cbb39f22bf (diff)
Support for line range minus syntax
-rw-r--r--src/line_range.rs31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/line_range.rs b/src/line_range.rs
index 1cd3a20d..8cf72095 100644
--- a/src/line_range.rs
+++ b/src/line_range.rs
@@ -47,12 +47,24 @@ impl LineRange {
}
2 => {
new_range.lower = line_numbers[0].parse()?;
+ let first_byte = line_numbers[1].bytes().next();
- new_range.upper = if line_numbers[1].bytes().next() == Some(b'+') {
+ new_range.upper = if first_byte == Some(b'+') {
let more_lines = &line_numbers[1][1..]
.parse()
.map_err(|_| "Invalid character after +")?;
new_range.lower + more_lines
+ } else if first_byte == Some(b'-') {
+ // this will prevent values like "-+5" even though "+5" is valid integer
+ if &line_numbers[1][1..].bytes().next() == &Some(b'+') {
+ return Err("Invalid character after -".into());
+ }
+ let less_lines = &line_numbers[1][1..]
+ .parse()
+ .map_err(|_| "Invalid character after -")?;
+ let prev_lower = new_range.lower;
+ new_range.lower = new_range.lower - less_lines;
+ prev_lower
} else {
line_numbers[1].parse()?
};
@@ -126,6 +138,23 @@ fn test_parse_plus_fail() {
assert!(range.is_err());
}
+#[test]
+fn test_parse_minus_success() {
+ let range = LineRange::from("40:-10").expect("Shouldn't fail on test!");
+ assert_eq!(30, range.lower);
+ assert_eq!(40, range.upper);
+}
+
+#[test]
+fn test_parse_minus_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