[package]
name = "debtmap"
version = "0.20.0"
edition = "2024"
rust-version = "1.89"
authors = ["Glen Baker <iepathos@gmail.com>"]
description = "Code complexity and technical debt analyzer"
license = "MIT"
repository = "https://github.com/iepathos/debtmap"
homepage = "https://iepathos.github.io/debtmap/"
documentation = "https://docs.rs/debtmap"
readme = "README.md"
keywords = ["code-analysis", "technical-debt", "complexity", "static-analysis"]
categories = ["development-tools", "command-line-utilities"]

[package.metadata.docs.rs]
# Build with all features for comprehensive documentation
all-features = true
# Use nightly for better doc features
rustdoc-args = ["--cfg", "docsrs"]
# Show multiple platform targets
targets = ["x86_64-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-pc-windows-msvc"]

[package.metadata.llvm-cov]
# Exclude test files and directories from coverage
ignore-filename-regex = [
    "tests/.*",
    ".*_test\\.rs",
    ".*_tests\\.rs",
    ".*/tests/.*",
    ".*/test/.*",
    "benches/.*",
    ".*/bench/.*",
    ".*/benchmark/.*"
]

[lib]
name = "debtmap"
path = "src/lib.rs"

[[bin]]
name = "debtmap"
path = "src/main.rs"

[dependencies]
# AST Parsing
syn = { version = "2.0", features = ["full", "visit", "extra-traits"] }
proc-macro2 = { version = "1.0", features = ["span-locations"] }

# Tree-sitter for JS/TS/Python parsing
tree-sitter = "0.23"
tree-sitter-javascript = "0.23"
tree-sitter-typescript = "0.23"
tree-sitter-python = "0.23"
tree-sitter-go = "0.23"

# CLI
clap = { version = "4.6", features = ["derive", "env"] }

# Serialization
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
serde_yaml = "0.9"
toml = "0.9"

# Functional data structures
im = { version = "15.1", features = ["serde"] }

# Coverage parsing
lcov = "0.8"
rustc-demangle = "0.1"

# Parallel processing
rayon = "1.10"
dashmap = "6.1"
crossbeam = "0.8"
parking_lot = "0.12"

# Hashing for duplication detection
sha2 = "0.10"
xxhash-rust = { version = "0.8", features = ["xxh64"] }

# Binary serialization for caching
postcard = { version = "1.1", default-features = false, features = ["alloc"] }

# Additional dependencies
quote = "1.0"
glob = "0.3"
regex = "1.10"
which = "8.0"

# Error handling
anyhow = "1.0.102"  # minimum for From<&str> impl
thiserror = "2.0"

# Effect composition and validation
stillwater = { version = "1.0", features = ["async", "serde"] }
premortem = "0.6.1"
tokio = { version = "1.51", features = ["rt", "rt-multi-thread"] }

# File system
walkdir = "2.5"
ignore = "0.4.25"

# Output formatting
colored = "3.0"
comfy-table = "7.1"

# Progress feedback
indicatif = { version = "0.18", features = ["rayon"] }

# TUI framework
ratatui = "0.30"
crossterm = "0.29"
# instability is a transitive dep of ratatui; minimum 0.3.7 for trait item support
instability = "0.3.7"
# time is a transitive dep of ratatui-widgets; minimum 0.3.37 for Month::length
time = "0.3.37"
# libc is a transitive dep; minimum 0.2 for modern Rust compatibility
libc = "0.2"
unicode-width = "0.2"
num_cpus = "1.16"
arboard = "3.5"  # Clipboard access (cross-platform); 3.5+ uses objc2 without libc 0.1
fuzzy-matcher = "0.3"  # Fuzzy search for results explorer

# Date/time
chrono = { version = "0.4.44", features = ["serde"] }  # minimum for stable error types

# Path handling
pathdiff = "0.2"
once_cell = "1.21.4"
dirs = "6.0"

# Logging and tracing
log = "0.4"
env_logger = "0.11"
tracing = "0.1.40"
tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }

# Git operations
git2 = { version = "0.21", features = ["vendored-openssl"] }
# Use vendored OpenSSL consistently so builds do not depend on runner packages.
openssl-sys = { version = "0.9.113", features = ["vendored"] }

# Graph algorithms for taint analysis
petgraph = "0.8.1"  # minimum for stable node_indices API
lazy_static = "1.5.0"
html-escape = "0.2.13"
tui-scrollview = "0.6.3"

[dev-dependencies]
# Testing
proptest = "1.11"
pretty_assertions = "1.4"
tempfile = "3.27"
criterion = "0.8"
trybuild = "1.0"
assert_cmd = "2.2"

# Test data
indoc = "2.0"


[profile.release]
opt-level = 3
lto = true
codegen-units = 1
strip = true

[profile.dev]
opt-level = 0
debug = true
split-debuginfo = "unpacked"  # Faster linking on macOS
incremental = true            # Enable incremental compilation

[profile.dev.package."*"]
opt-level = 3                 # Optimize dependencies in dev mode

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

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

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

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

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

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

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

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

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

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

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

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