[package]
name = "codediff"
version = "0.0.1"
edition = "2024"
rust-version = "1.85"
description = "Fast, robust, syntax-aware code diffing using tree-sitter ASTs"
license = "AGPL-3.0-or-later"
repository = "https://github.com/ivankovic/codediff"
readme = "README.md"
keywords = ["diff", "ast", "tree-sitter", "cli", "git"]
categories = ["command-line-utilities", "development-tools", "text-processing"]
exclude = [
"research/**",
"src/bin/**",
"src/test/data/**",
]
[profile.release]
lto = "fat"
codegen-units = 1
[dependencies]
anyhow = "1.0.100"
clap = { version = "4.5.51", features = ["derive"] }
confy = "2.0.0"
crossbeam-channel = "0.5.15"
rayon = "1.10"
csv = "1.4.0"
git2 = { version = "0.20.3", optional = true }
indoc = "2.0.7"
infer = "0.19.0"
libc = "0.2"
num_cpus = "1.17.0"
rand = "0.8"
regex = "1.12.2"
rusqlite = { version = "0.37.0", features = ["bundled"] }
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0"
tempfile = "3.10.1"
futures = "0.3"
tokio = { version = "1.0", features = ["full"] }
tree-sitter = "0.25"
ratatui = { version = "0.26.3", features = ["serde", "macros"]}
crossterm = { version = "0.27.0", features = ["serde", "event-stream"]}
tree-sitter-bash = "0.25"
tree-sitter-c = "0.24"
tree-sitter-c-sharp = "0.23"
tree-sitter-cpp = "0.23"
tree-sitter-css = "0.25"
tree-sitter-go = "0.25"
tree-sitter-html = "0.23"
tree-sitter-java = "0.23"
tree-sitter-javascript = "0.25"
tree-sitter-json = "0.24"
tree-sitter-kotlin-ng = "1.1"
tree-sitter-lua = "0.2"
tree-sitter-php = "0.24"
tree-sitter-python = "0.25"
tree-sitter-r = "1.2"
tree-sitter-ruby = "0.23.1"
tree-sitter-rust = "0.24"
tree-sitter-scala = "0.24"
tree-sitter-swift = "0.7"
tree-sitter-typescript = "0.23"
tree-sitter-vim = "0.4"
tree-sitter-xml = "0.7.0"
tree-sitter-yaml = "0.7"
walkdir = "2"
metrohash = "1.0.7"
rustc-hash = "2.1"
tracing = "0.1.44"
tracing-subscriber = { version = "0.3.23", features = ["env-filter", "serde"]}
tracing-error = "0.2.1"
strum = { version = "0.28.0", features = ["derive"] }
signal-hook = "0.4.4"
syntect = { version = "5.2", features = ["default-fancy"] }
[dev-dependencies]
tempfile = "3.10.1"
insta = "1.38.0"
[features]
default = []
stats = ["dep:git2"]
[[bin]]
name = "commit_stats"
path = "src/bin/commit_stats.rs"
required-features = ["stats"]
[[bin]]
name = "materialize_test_diffs"
path = "src/bin/materialize_test_diffs.rs"
required-features = ["stats"]
[[bin]]
name = "benchmark_diff_pairs"
path = "src/bin/benchmark_diff_pairs.rs"
required-features = ["stats"]
[[bin]]
name = "file_stats"
path = "src/bin/file_stats.rs"
required-features = ["stats"]
[[bin]]
name = "sample_test_diffs"
path = "src/bin/sample_test_diffs.rs"
required-features = ["stats"]
[[bin]]
name = "sample_code_pairs"
path = "src/bin/sample_code_pairs.rs"
required-features = ["stats"]
[[bench]]
name = "hash_benchmark"
harness = false
[[bench]]
name = "optimal_iud_benchmark"
harness = false
[[bench]]
name = "diff_code_benchmark"
harness = false
[dev-dependencies.criterion]
version = "0.5"
features = ["html_reports"]