From fc146ad5101334cb316f905657e79fe5e4fe7876 Mon Sep 17 00:00:00 2001 From: Amaan Qureshi Date: Sat, 25 May 2024 22:50:26 -0400 Subject: [PATCH] refactor: remove difference dependency --- Cargo.lock | 14 +++++++------- Cargo.toml | 2 +- cli/Cargo.toml | 2 +- cli/src/test.rs | 33 ++++++++++++++++++++------------- 4 files changed, 29 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9ebda504..eed2790a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -432,12 +432,6 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" -[[package]] -name = "difference" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198" - [[package]] name = "dirs" version = "5.0.1" @@ -1198,6 +1192,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "similar" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa42c91313f1d05da9b26f267f931cf178d4aba455b4c4622dd7355eb80c6640" + [[package]] name = "slice-group-by" version = "0.3.1" @@ -1395,7 +1395,6 @@ dependencies = [ "clap", "ctor", "ctrlc", - "difference", "dirs", "filetime", "glob", @@ -1415,6 +1414,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", + "similar", "smallbitvec", "tempfile", "tiny_http", diff --git a/Cargo.toml b/Cargo.toml index 83818835..13a0c541 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -51,7 +51,6 @@ clap = { version = "4.5.4", features = [ ] } ctor = "0.2.8" ctrlc = { version = "3.4.4", features = ["termination"] } -difference = "2.0.0" dirs = "5.0.1" filetime = "0.2.23" fs4 = "0.8.3" @@ -75,6 +74,7 @@ semver = "1.0.23" serde = { version = "1.0.202", features = ["derive"] } serde_derive = "1.0.197" serde_json = { version = "1.0.117", features = ["preserve_order"] } +similar = "2.5.0" smallbitvec = "2.5.3" tempfile = "3.10.1" thiserror = "1.0.61" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 55424666..ded90199 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -29,7 +29,6 @@ anstyle.workspace = true anyhow.workspace = true clap.workspace = true ctrlc.workspace = true -difference.workspace = true dirs.workspace = true filetime.workspace = true glob.workspace = true @@ -47,6 +46,7 @@ semver.workspace = true serde.workspace = true serde_derive.workspace = true serde_json.workspace = true +similar.workspace = true smallbitvec.workspace = true tiny_http.workspace = true walkdir.workspace = true diff --git a/cli/src/test.rs b/cli/src/test.rs index c0a00f4b..19d10f07 100644 --- a/cli/src/test.rs +++ b/cli/src/test.rs @@ -9,13 +9,13 @@ use std::{ use anstyle::{AnsiColor, Color, Style}; use anyhow::{anyhow, Context, Result}; -use difference::{Changeset, Difference}; use indoc::indoc; use lazy_static::lazy_static; use regex::{ bytes::{Regex as ByteRegex, RegexBuilder as ByteRegexBuilder}, Regex, }; +use similar::{ChangeTag, TextDiff}; use tree_sitter::{format_sexp, Language, LogType, Parser, Query}; use walkdir::WalkDir; @@ -276,32 +276,39 @@ pub fn print_diff_key() { } pub fn print_diff(actual: &str, expected: &str, use_color: bool) { - let changeset = Changeset::new(actual, expected, "\n"); - for diff in &changeset.diffs { - match diff { - Difference::Same(part) => { + let diff = TextDiff::from_lines(actual, expected); + for diff in diff.iter_all_changes() { + match diff.tag() { + ChangeTag::Equal => { if use_color { - print!("{part}{}", changeset.split); + print!("{diff}"); } else { - print!("correct:\n{part}{}", changeset.split); + print!(" {diff}"); } } - Difference::Add(part) => { + ChangeTag::Insert => { if use_color { - println!("{}{}", paint(Some(AnsiColor::Green), part), changeset.split); + print!("{}", paint(Some(AnsiColor::Green), diff.as_str().unwrap())); } else { - print!("expected:\n{part}{}", changeset.split); + print!("+{diff}"); + } + if diff.missing_newline() { + println!(); } } - Difference::Rem(part) => { + ChangeTag::Delete => { if use_color { - println!("{}{}", paint(Some(AnsiColor::Red), part), changeset.split); + print!("{}", paint(Some(AnsiColor::Red), diff.as_str().unwrap())); } else { - print!("unexpected:\n{part}{}", changeset.split); + print!("-{diff}"); + } + if diff.missing_newline() { + println!(); } } } } + println!(); }