summaryrefslogtreecommitdiffstats
path: root/src/parse.rs
diff options
context:
space:
mode:
authorDan Davison <dandavison7@gmail.com>2020-11-22 19:59:15 -0500
committerDan Davison <dandavison7@gmail.com>2020-11-22 20:17:55 -0500
commitf52464c1af557a5759566a988d2478ccb6e86d3e (patch)
tree70fc38ca7c8de1764db29279fc07f32d7116e92d /src/parse.rs
parent54f363db05f91dc83737bb45244ec00f0c2bbcf3 (diff)
Refactor: parse file meta line
In preparation for #392
Diffstat (limited to 'src/parse.rs')
-rw-r--r--src/parse.rs83
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)
);
}