[package]
name = "scoop-uv"
version = "0.14.1"
edition = "2024"
rust-version = "1.85"
authors = ["Hanyul <pignuante@gmail.com>"]
description = "Scoop up your Python envs — pyenv-style workflow powered by uv"
license = "MIT OR Apache-2.0"
repository = "https://github.com/ai-screams/scoop-uv"
homepage = "https://ai-screams.github.io/scoop-uv/"
documentation = "https://docs.rs/scoop-uv"
readme = "README.md"
keywords = ["python", "virtualenv", "uv", "pyenv", "environment"]
categories = ["command-line-utilities", "development-tools"]
# 화이트리스트: crates.io 배포에 필요한 파일만 포함
include = [
    "src/**/*.rs",
    "Cargo.toml",
    "/LICENSE-*",
    "/README.md",
    "/rust-toolchain.toml",
    "locales/**/*.yml",
]

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

[dependencies]
# CLI
clap = { version = "4.6", features = ["derive", "env", "string", "wrap_help"] }
clap_complete = "4.6"

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

# Error handling
thiserror = "2.0"
color-eyre = "0.6"

# Logging
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }

# Terminal UI
owo-colors = "4.0"
indicatif = "0.18"
dialoguer = "0.12"

# Utilities
dirs = "6.0"
which = "8.0.2"
regex = "1.11"
once_cell = "1.21"
chrono = { version = "0.4", features = ["serde", "std", "clock"], default-features = false }
walkdir = "2.5"
# Atomic file writes (tempfile + rename) for metadata touch updates so a
# crash mid-write can't truncate `.scoop-metadata.json` to garbage.
tempfile = "3.27"

# i18n
rust-i18n = "4"
sys-locale = "0.3"
toml = { version = "1.1.2", features = ["parse"] }
rayon = "1.12.0"

# Man pages — generated at runtime by `scoop man [DIR]`. clap_mangen consumes
# the same `clap::Command` tree used by the CLI, so the man pages stay in sync
# with `--help` automatically.
clap_mangen = "0.3"

[features]
# Default = none — keep `cargo build` and `cargo test` lean by default.
default = []
# Opt-in feature gating slow / environment-coupled integration tests so
# `make test-integration*` and the Docker matrix CI workflow can include
# them while CI on every commit doesn't. Tests should mark themselves
# with `#[cfg(feature = "integration-test")]`.
integration-test = []

[dev-dependencies]
assert_cmd = "2.2"
predicates = "3.1"
serial_test = "3.2"
proptest = "1.11"
insta = { version = "1.47", features = ["yaml"] }
rstest = "0.26"
serde_yaml = "0.9"
# Benchmark runner. html_reports gives a `target/criterion/report/index.html`
# overview that's useful when comparing baselines locally.
criterion = { version = "0.7", features = ["html_reports"] }

# Benchmarks live in benches/. Each [[bench]] entry compiles to its own
# binary, so a broken bench only fails one target — useful during regressions.
[[bench]]
name = "parsing"
harness = false

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

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

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