branchdiff 0.63.0

Terminal UI showing unified diff of current branch vs its base
Documentation
[package]
name = "branchdiff"
version = "0.63.0"
edition = "2024"
rust-version = "1.91"
description = "Terminal UI showing unified diff of current branch vs its base"
license = "MIT OR Apache-2.0"
repository = "https://github.com/michaeldhopkins/branchdiff"
homepage = "https://github.com/michaeldhopkins/branchdiff"
keywords = ["git", "diff", "tui", "terminal"]
categories = ["command-line-utilities", "development-tools"]

[dependencies]
ratatui = "0.30"
crossterm = "0.28"
notify = "7"
notify-debouncer-mini = "0.5"
clap = { version = "4", features = ["derive"] }
anyhow = "1"
similar = { version = "2", features = ["inline"] }
imara-diff = "0.1"
arboard = "2"
rayon = "1.10"
ignore = "0.4"
tempfile = "3"
syntect = { version = "5", default-features = false, features = ["default-fancy"] }
two-face = { version = "0.4", default-features = false, features = ["syntect-fancy"] }
unicode-width = "0.2"

# Image diff support
ratatui-image = { version = "10", default-features = false, features = ["crossterm"] }
image = { version = "0.25", default-features = false, features = [
    "png", "jpeg", "gif", "webp", "bmp", "ico", "tiff",
    "avif",
    "qoi",
] }
resvg = "0.45"
base64 = "0.22.1"

[target.'cfg(unix)'.dependencies]
libc = "0.2"

[dev-dependencies]
proptest = "1.5"
assert_cmd = "2"
predicates = "3"
criterion = { version = "0.5", features = ["html_reports"] }

# TUI integration testing
portable-pty = "0.8"
vt100 = "0.15"
insta = "1.40"

# Asset generation (man pages, shell completions)
clap_mangen = "0.2"
clap_complete = "4"

[[bench]]
name = "performance"
harness = false

[lints.clippy]
# Enforce enums over boolean state flags
struct-excessive-bools = "deny"
fn-params-excessive-bools = "deny"

# Catch boolean patterns that could benefit from enums
match_bool = "warn"
bool_to_int_with_if = "warn"

# Complexity limits to catch functions that need refactoring
cognitive-complexity = "warn"
too-many-lines = "warn"

# Already-default lints we want to keep enforced (tightened to deny)
collapsible-if = "deny"
too-many-arguments = "deny"

# Encourage idiomatic patterns
needless-range-loop = "deny"
extend_with_drain = "deny"

# Profiling profile: optimized but with debug symbols
[profile.profiling]
inherits = "release"
debug = true

# The profile that 'dist' will build with
[profile.dist]
inherits = "release"
lto = "thin"