[package]
name = "omni-dev"
version = "0.22.0"
edition = "2021"
authors = ["John Ky <newhoggy@gmail.com>"]
license = "BSD-3-Clause"
description = "A powerful Git commit message analysis and amendment toolkit"
repository = "https://github.com/rust-works/omni-dev"
homepage = "https://github.com/rust-works/omni-dev"
documentation = "https://docs.rs/omni-dev"
readme = "README.md"
keywords = ["git", "commit", "conventional-commits", "development", "cli"]
categories = ["development-tools", "command-line-utilities"]
rust-version = "1.80.0"

[dependencies]
clap = { version = "4.6", features = ["derive", "color"] }
git2 = "0.20"
serde = { version = "1.0", features = ["derive"] }
serde_yaml = "0.9"
ssh2-config = "0.7"
yaml-rust-davvid = "0.6"
serde_json = "1.0"
termcolor = "1.1"
anyhow = "1.0"
chrono = { version = "0.4", features = ["serde"] }
tempfile = "3.27"
reqwest = { version = "0.13", features = ["json"] }
tokio = { version = "1.50", features = ["full"] }
thiserror = "2.0"
regex = "1.12.3"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] }
dirs = "6.0.0"
globset = "0.4"
crossterm = "0.29"
url = "2.5.8"
base64 = "0.22"
futures = "0.3"

[dev-dependencies]
tempfile = "3.27"
insta = "1.47"
proptest = "1"
wiremock = "0.6"

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

[[bin]]
name = "omni-dev"
path = "src/main.rs"
required-features = []

[lints.rust]
unsafe_code = "deny"

[lints.clippy]
# Lint groups (priority -1 so individual overrides win)
all      = { level = "warn", priority = -1 }
pedantic = { level = "warn", priority = -1 }
nursery  = { level = "warn", priority = -1 }

# ── Pedantic: too noisy / low signal ─────────────────────────────────
must_use_candidate      = "allow"
module_name_repetitions = "allow"

# ── Pedantic: documentation (defer to follow-up) ────────────────────
missing_errors_doc      = "allow"
missing_panics_doc      = "allow"
doc_markdown            = "allow"

# ── Pedantic: public API stability ───────────────────────────────────
unused_self             = "allow"  # removing &self is an API change
unnecessary_wraps       = "allow"  # removing Result is an API change
needless_pass_by_value  = "allow"  # changing to &T is an API change
ref_option              = "allow"  # changing &Option<T> to Option<&T> is an API change

# ── Pedantic: stylistic ─────────────────────────────────────────────
if_not_else             = "allow"
similar_names           = "allow"
too_many_lines          = "allow"  # covered by STYLE-0017
format_push_string      = "allow"  # write! alternative requires unwrap
unused_async            = "allow"  # some async fns are async for API consistency
items_after_statements  = "allow"  # sometimes clearer to declare near use
struct_field_names      = "allow"  # naming convention matches domain
struct_excessive_bools  = "allow"  # config structs use bool flags

# ── Pedantic: numeric casts ─────────────────────────────────────────
cast_precision_loss      = "allow"  # token/char counts within safe ranges
cast_possible_truncation = "allow"
cast_possible_wrap       = "allow"
cast_sign_loss           = "allow"

# ── Pedantic: file system ───────────────────────────────────────────
case_sensitive_file_extension_comparisons = "allow"  # risky auto-fix

# ── Restriction: panicking operations (STYLE-0003) ────────────────────
unwrap_used  = "warn"
expect_used  = "warn"

# ── Nursery ──────────────────────────────────────────────────────────
option_if_let_else           = "allow"  # often less readable than if-let
redundant_pub_crate          = "allow"  # conflicts with STYLE-0005
missing_const_for_fn         = "allow"
or_fun_call                  = "allow"  # false positives
significant_drop_tightening  = "allow"  # often produces wrong suggestions
