@@ -30,13 +30,19 @@ impl LineRange {
3030 }
3131
3232 let line_numbers: Vec<&str> = range_raw.split(':').collect();
33− if line_numbers.len() == 2 {
34− new_range.lower = line_numbers[0].parse()?;
35− new_range.upper = line_numbers[1].parse()?;
36− return Ok(new_range);
33+ match line_numbers.len() {
34+ 1 => {
35+ new_range.lower = line_numbers[0].parse()?;
36+ new_range.upper = new_range.lower;
37+ Ok(new_range)
38+ },
39+ 2 => {
40+ new_range.lower = line_numbers[0].parse()?;
41+ new_range.upper = line_numbers[1].parse()?;
42+ Ok(new_range)
43+ },
44+ _ => Err("expected at most single ':' character".into()),
3745 }
38−
39− Err("expected single ':' character".into())
4046 }
4147
4248 pub fn is_inside(&self, line: usize) -> bool {
@@ -65,6 +71,13 @@ fn test_parse_partial_max() {
6571 assert_eq!(usize::max_value(), range.upper);
6672}
6773
74+#[test]
75+fn test_parse_single() {
76+ let range = LineRange::from("40").expect("Shouldn't fail on test!");
77+ assert_eq!(40, range.lower);
78+ assert_eq!(40, range.upper);
79+}
80+
6881#[test]
6982fn test_parse_fail() {
7083 let range = LineRange::from("40:50:80");
@@ -73,8 +86,6 @@ fn test_parse_fail() {
7386 assert!(range.is_err());
7487 let range = LineRange::from(":40:");
7588 assert!(range.is_err());
76− let range = LineRange::from("40");
77− assert!(range.is_err());
7889}
7990
8091#[derive(Copy, Clone, Debug, PartialEq)]