[package]
name = "rvpm"
version = "3.32.2"
edition = "2024"
description = "Fast Neovim plugin manager with pre-compiled loader and merge optimization"
license = "MIT"
repository = "https://github.com/yukimemi/rvpm"
homepage = "https://github.com/yukimemi/rvpm"
readme = "README.md"
keywords = ["neovim", "plugin-manager", "vim", "lazy-loading"]
categories = ["command-line-utilities", "development-tools"]

[dependencies]
# CLI & UI
clap = { version = "4.6", features = ["derive"] }
clap_complete = "4.6"
ratatui = "0.30"
crossterm = { version = "0.29", features = ["events"] }
indicatif = "0.18"
dialoguer = { version = "0.12", features = ["fuzzy-select"] }
# AI preview の per-section ラベル ([EXISTING] / [FRESH] / [MERGED]) を色分け
# するためのターミナル style ヘルパ。dialoguer からも transitive に入っている
# が、直接依存として明示しておく。
console = "0.16"
anyhow = "1.0"

# Async & Process
tokio = { version = "1.51", features = ["full"] }
# `async fn` を持つ trait を `dyn` 互換にするため (rvpm doctor の VersionResolver
# は本番 SystemResolver / テスト MockResolver を Box<dyn> で差し替える)。
async-trait = "0.1"

# Template & Config
tera = "1.20"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
regex = "1"
toml = "1.1"
toml_edit = "0.25"

# CLI subprocess discovery (`claude` / `gemini` / `codex` on PATH for AI add #93).
which = "8"

# Self-update (`rvpm self-update`, daily auto-check banner) — #125
# default-features = false で `reqwest` を rustls 経由に固定する (rvpm 全体の
# TLS pin と整合)。 `archive-zip` / `archive-tar` / `compression-flate2` で
# GitHub release artifact (linux .tar.gz / windows .zip) を解凍可能にする。
self_update = { version = "0.42", default-features = false, features = [
    "rustls",
    "compression-flate2",
    "archive-tar",
    "archive-zip",
    # Windows の GitHub release `.zip` artifact は deflate 圧縮されているので、
    # `archive-zip` だけだと展開時にエラーになる (CodeRabbit PR #126 指摘)。
    "compression-zip-deflate",
] }
# Version 比較 (current `Cargo.toml` の version vs. 取得した `tag_name`)。
semver = "1"
# `[options] update_check_interval = "24h"` 等のパース。
humantime = "2"

# Markdown rendering (for store TUI README preview).
# `highlight-code` brings in syntect + ansi-to-tui (~4 MB of syntax / theme
# data) but is the only way to make fenced code blocks readable — without it
# they render as plain prose indistinguishable from text paragraphs.
tui-markdown = { version = "0.3", features = ["highlight-code"] }
# post-wrap row count の計算用 (store TUI の README scroll clamp)。
unicode-width = "0.2"
# 外部 renderer (mdcat / glow 等) の stdout ANSI を ratatui Text に変換するため。
# tui-markdown[highlight-code] 経由で transitively 入っているが、直接依存として
# 明示しておくと将来 tui-markdown を差し替えても壊れない。
ansi-to-tui = "8"
# `[options.store.readme_command]` で spawn する外部プロセスのタイムアウト。
wait-timeout = "0.2"
# 外部 renderer に `{file_path}` を渡す場合の一時ファイル作成。
tempfile = "3"

# HTTP client (for store)
# default-features = false to pin TLS backend to `rustls` (avoid native-tls /
# OpenSSL transitively). Re-add the non-TLS pieces of reqwest's default feature
# set (`http2`, `charset`, `system-proxy`) so behavior matches 0.12 defaults.
reqwest = { version = "0.13", default-features = false, features = [
    "blocking",
    "json",
    "query",
    "rustls",
    "http2",
    "charset",
    "system-proxy",
] }
open = "5"

# File System & Path
dirs = "6.0"
walkdir = "2.5"

# Git (in-process, no fork)
gix = { version = "0.83", default-features = false, features = [
    "sha1",
    "blocking-network-client",
    "blocking-http-transport-reqwest-rust-tls",
    "worktree-mutation",
    "status",
    "dirwalk",
    "revision",
] }

[dev-dependencies]
tempfile = "3.27"
