diff --git a/Cargo.lock b/Cargo.lock
index b0e14dbe7..794b75ed0 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -20,15 +20,6 @@ dependencies = [
"winapi",
]
-[[package]]
-name = "archery"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a8da9bc4c4053ee067669762bcaeea6e241841295a2b6c948312dad6ef4cc02"
-dependencies = [
- "static_assertions",
-]
-
[[package]]
name = "atty"
version = "0.2.14"
@@ -204,7 +195,6 @@ dependencies = [
"radix-heap",
"rayon",
"regex",
- "rpds",
"rustc-hash",
"strsim",
"term_size",
@@ -535,15 +525,6 @@ version = "0.6.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64"
-[[package]]
-name = "rpds"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "054e417ded02a19ae192c8c89412eaec7d1c2cdd826aa412565761d86ca6315e"
-dependencies = [
- "archery",
-]
-
[[package]]
name = "rustc-hash"
version = "1.1.0"
@@ -579,12 +560,6 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
-[[package]]
-name = "static_assertions"
-version = "1.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
-
[[package]]
name = "strsim"
version = "0.10.0"
diff --git a/Cargo.toml b/Cargo.toml
index 8eebd7322..b3db13bf4 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -42,7 +42,6 @@ walkdir = "2.3.2"
terminal_size = "0.2.1"
const_format = "0.2.22"
owo-colors = "3.3.0"
-rpds = "0.10.0"
wu-diff = "0.1.2"
rayon = "1.5.2"
tree_magic_mini = "3.0.3"
@@ -65,6 +64,7 @@ version_check = "0.9.4"
#
# https://doc.rust-lang.org/cargo/reference/profiles.html#release
debug = false
+lto = "thin"
[[bin]]
name = "difft"
diff --git a/src/diff/dijkstra.rs b/src/diff/dijkstra.rs
index a8a388331..f9313c12f 100644
--- a/src/diff/dijkstra.rs
+++ b/src/diff/dijkstra.rs
@@ -44,8 +44,8 @@ fn shortest_vertex_path<'a, 'b>(
let (edge, next) = neighbour;
let distance_to_next = distance + edge.cost();
- let found_shorter_route = match &*next.predecessor.borrow() {
- Some((prev_shortest, _)) => distance_to_next < *prev_shortest,
+ let found_shorter_route = match next.predecessor.get() {
+ Some((prev_shortest, _)) => distance_to_next < prev_shortest,
None => true,
};
@@ -74,7 +74,7 @@ fn shortest_vertex_path<'a, 'b>(
let mut vertex_route: Vec<&'b Vertex<'a, 'b>> = vec![];
while let Some((_, node)) = current {
vertex_route.push(node);
- current = *node.predecessor.borrow();
+ current = node.predecessor.get();
}
vertex_route.reverse();
@@ -91,7 +91,7 @@ fn shortest_path_with_edges<'a, 'b>(
for vertex in route.iter().skip(1) {
let edge = edge_between(prev, vertex);
- res.push((edge, prev.clone()));
+ res.push((edge, *prev));
cost += edge.cost();
prev = vertex;
diff --git a/src/diff/graph.rs b/src/diff/graph.rs
index db00be25c..23f9c3063 100644
--- a/src/diff/graph.rs
+++ b/src/diff/graph.rs
@@ -1,10 +1,9 @@
//! A graph representation for computing tree diffs.
use bumpalo::Bump;
-use rpds::Stack;
use rustc_hash::FxHashMap;
use std::{
- cell::RefCell,
+ cell::{Cell, RefCell},
cmp::min,
fmt,
hash::{Hash, Hasher},
@@ -12,7 +11,10 @@ use std::{
use strsim::normalized_levenshtein;
use crate::{
- diff::changes::{insert_deep_unchanged, ChangeKind, ChangeMap},
+ diff::{
+ changes::{insert_deep_unchanged, ChangeKind, ChangeMap},
+ stack::Stack,
+ },
parse::syntax::{AtomKind, Syntax, SyntaxId},
};
use Edge::*;
@@ -48,7 +50,7 @@ use Edge::*;
#[derive(Debug, Clone)]
pub struct Vertex<'a, 'b> {
pub neighbours: RefCell