diff options
author | Dan Davison <dandavison7@gmail.com> | 2020-07-05 23:24:38 -0400 |
---|---|---|
committer | Dan Davison <dandavison7@gmail.com> | 2020-07-05 23:26:52 -0400 |
commit | ee9de2c4cd53dfff7aa7910c3e19132de540eb2b (patch) | |
tree | 1cf57bb86d5897753f7065faba16af9ce64e982c /src/parse.rs | |
parent | 1c8d1d0b0a0cee3338b97f14aa32746e48e932a7 (diff) |
Simplify regex
Diffstat (limited to 'src/parse.rs')
-rw-r--r-- | src/parse.rs | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/parse.rs b/src/parse.rs index 182b5da3..23e79b6b 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -90,15 +90,14 @@ pub fn get_file_change_description_from_file_paths( } lazy_static! { - static ref HUNK_METADATA_REGEXP: Regex = - Regex::new(r"@+ (?P<lns>[^@]+)@+(?P<cf>.*\s?)").unwrap(); + static ref HUNK_HEADER_REGEX: Regex = Regex::new(r"@+ ([^@]+)@+(.*\s?)").unwrap(); } // Parse unified diff hunk header format. See // https://www.gnu.org/software/diffutils/manual/html_node/Detailed-Unified.html // https://www.artima.com/weblogs/viewpost.jsp?thread=164293 lazy_static! { - static ref FILE_COORDINATES_REGEXP: Regex = Regex::new( + static ref HUNK_HEADER_FILE_COORDINATE_REGEX: Regex = Regex::new( r"(?x) [-+] (\d+) # 1. Hunk start line number @@ -113,10 +112,11 @@ lazy_static! { /// Given input like /// "@@ -74,15 +74,14 @@ pub fn delta(" /// Return " pub fn delta(" and a vector of (line_number, hunk_length) tuples. -pub fn parse_hunk_metadata(line: &str) -> (&str, Vec<(usize, usize)>) { - let caps = HUNK_METADATA_REGEXP.captures(line).unwrap(); - let line_numbers_and_hunk_lengths = FILE_COORDINATES_REGEXP - .captures_iter(caps.name("lns").unwrap().as_str()) +pub fn parse_hunk_metadata(line: &str) -> (String, Vec<(usize, usize)>) { + let caps = HUNK_HEADER_REGEX.captures(line).unwrap(); + let file_coordinates = &caps[1]; + let line_numbers_and_hunk_lengths = HUNK_HEADER_FILE_COORDINATE_REGEX + .captures_iter(file_coordinates) .map(|caps| { ( caps[1].parse::<usize>().unwrap(), @@ -129,8 +129,8 @@ pub fn parse_hunk_metadata(line: &str) -> (&str, Vec<(usize, usize)>) { ) }) .collect(); - let code_fragment = caps.name("cf").unwrap().as_str(); - return (code_fragment, line_numbers_and_hunk_lengths); + let code_fragment = &caps[2]; + return (code_fragment.to_string(), line_numbers_and_hunk_lengths); } /// Attempt to parse input as a file path and return extension as a &str. |