diff options
author | Dan Davison <dandavison7@gmail.com> | 2020-11-22 19:59:15 -0500 |
---|---|---|
committer | Dan Davison <dandavison7@gmail.com> | 2020-11-22 20:17:55 -0500 |
commit | f52464c1af557a5759566a988d2478ccb6e86d3e (patch) | |
tree | 70fc38ca7c8de1764db29279fc07f32d7116e92d /src/parse.rs | |
parent | 54f363db05f91dc83737bb45244ec00f0c2bbcf3 (diff) |
Refactor: parse file meta line
In preparation for #392
Diffstat (limited to 'src/parse.rs')
-rw-r--r-- | src/parse.rs | 83 |
1 files changed, 49 insertions, 34 deletions
diff --git a/src/parse.rs b/src/parse.rs index 9be8df51..05b0ceb5 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -19,11 +19,18 @@ pub fn get_file_extension_from_marker_line(line: &str) -> Option<&str> { .and_then(|file| file.split('.').last()) } -pub fn get_file_path_from_file_meta_line(line: &str, git_diff_name: bool) -> String { +#[derive(Debug, PartialEq)] +pub enum FileEvent { + Change, + Rename, + NoEvent, +} + +pub fn parse_file_meta_line(line: &str, git_diff_name: bool) -> (String, FileEvent) { match line { line if line.starts_with("--- ") || line.starts_with("+++ ") => { let offset = 4; - match &line[offset..] { + let file = match &line[offset..] { path if path == "/dev/null" => "/dev/null", path if git_diff_name && DIFF_PREFIXES.iter().any(|s| path.starts_with(s)) => { &path[2..] @@ -31,16 +38,17 @@ pub fn get_file_path_from_file_meta_line(line: &str, git_diff_name: bool) -> Str path if git_diff_name => &path, path => path.split('\t').next().unwrap_or(""), } + .to_string(); + (file, FileEvent::Change) } line if line.starts_with("rename from ") => { - &line[12..] // "rename from ".len() + (line[12..].to_string(), FileEvent::Rename) // "rename from ".len() } line if line.starts_with("rename to ") => { - &line[10..] // "rename to ".len() + (line[10..].to_string(), FileEvent::Rename) // "rename to ".len() } - _ => "", + _ => ("".to_string(), FileEvent::NoEvent), } - .to_string() } pub fn get_file_extension_from_file_meta_line_file_path(path: &str) -> Option<&str> { @@ -55,6 +63,7 @@ pub fn get_file_change_description_from_file_paths( minus_file: &str, plus_file: &str, comparing: bool, + file_event: &FileEvent, config: &Config, ) -> String { if comparing { @@ -92,7 +101,10 @@ pub fn get_file_change_description_from_file_paths( ), (minus_file, plus_file) => format!( "{}{} ⟶ {}", - format_label(&config.file_renamed_label), + format_label(match file_event { + FileEvent::Rename => &config.file_renamed_label, + _ => "", + }), format_file(minus_file), format_file(plus_file) ), @@ -224,74 +236,77 @@ mod tests { #[test] fn test_get_file_path_from_git_file_meta_line() { assert_eq!( - get_file_path_from_file_meta_line("--- /dev/null", true), - "/dev/null" + parse_file_meta_line("--- /dev/null", true), + ("/dev/null".to_string(), FileEvent::Change) ); for prefix in &DIFF_PREFIXES { assert_eq!( - get_file_path_from_file_meta_line(&format!("--- {}src/delta.rs", prefix), true), - "src/delta.rs" + parse_file_meta_line(&format!("--- {}src/delta.rs", prefix), true), + ("src/delta.rs".to_string(), FileEvent::Change) ); } assert_eq!( - get_file_path_from_file_meta_line("--- src/delta.rs", true), - "src/delta.rs" + parse_file_meta_line("--- src/delta.rs", true), + ("src/delta.rs".to_string(), FileEvent::Change) ); assert_eq!( - get_file_path_from_file_meta_line("+++ src/delta.rs", true), - "src/delta.rs" + parse_file_meta_line("+++ src/delta.rs", true), + ("src/delta.rs".to_string(), FileEvent::Change) ); } #[test] fn test_get_file_path_from_git_file_meta_line_containing_spaces() { assert_eq!( - get_file_path_from_file_meta_line("+++ a/my src/delta.rs", true), - "my src/delta.rs" + parse_file_meta_line("+++ a/my src/delta.rs", true), + ("my src/delta.rs".to_string(), FileEvent::Change) ); assert_eq!( - get_file_path_from_file_meta_line("+++ my src/delta.rs", true), - "my src/delta.rs" + parse_file_meta_line("+++ my src/delta.rs", true), + ("my src/delta.rs".to_string(), FileEvent::Change) ); assert_eq!( - get_file_path_from_file_meta_line("+++ a/src/my delta.rs", true), - "src/my delta.rs" + parse_file_meta_line("+++ a/src/my delta.rs", true), + ("src/my delta.rs".to_string(), FileEvent::Change) ); assert_eq!( - get_file_path_from_file_meta_line("+++ a/my src/my delta.rs", true), - "my src/my delta.rs" + parse_file_meta_line("+++ a/my src/my delta.rs", true), + ("my src/my delta.rs".to_string(), FileEvent::Change) ); assert_eq!( - get_file_path_from_file_meta_line("+++ b/my src/my enough/my delta.rs", true), - "my src/my enough/my delta.rs" + parse_file_meta_line("+++ b/my src/my enough/my delta.rs", true), + ( + "my src/my enough/my delta.rs".to_string(), + FileEvent::Change + ) ); } #[test] fn test_get_file_path_from_git_file_meta_line_rename() { assert_eq!( - get_file_path_from_file_meta_line("rename from nospace/file2.el", true), - "nospace/file2.el" + parse_file_meta_line("rename from nospace/file2.el", true), + ("nospace/file2.el".to_string(), FileEvent::Rename) ); } #[test] fn test_get_file_path_from_git_file_meta_line_rename_containing_spaces() { assert_eq!( - get_file_path_from_file_meta_line("rename from with space/file1.el", true), - "with space/file1.el" + parse_file_meta_line("rename from with space/file1.el", true), + ("with space/file1.el".to_string(), FileEvent::Rename) ); } #[test] - fn test_get_file_path_from_file_meta_line() { + fn test_parse_file_meta_line() { assert_eq!( - get_file_path_from_file_meta_line("--- src/delta.rs", false), - "src/delta.rs" + parse_file_meta_line("--- src/delta.rs", false), + ("src/delta.rs".to_string(), FileEvent::Change) ); assert_eq!( - get_file_path_from_file_meta_line("+++ src/delta.rs", false), - "src/delta.rs" + parse_file_meta_line("+++ src/delta.rs", false), + ("src/delta.rs".to_string(), FileEvent::Change) ); } |