billybox1926-jpg/Crate-Feature-Auditor-Visualizer

GitHub: billybox1926-jpg/Crate-Feature-Auditor-Visualizer

Cargo Feature Lens 是一个 Cargo 子命令,通过解析依赖与 feature 图来审计 Rust 项目中 feature 的使用情况,帮助开发者发现冲突、冗余和未使用的 feature 配置。

Stars: 1 | Forks: 2

# Cargo Feature Lens ![Rust](https://img.shields.io/badge/rust-1.70%2B-orange) ![License](https://img.shields.io/badge/license-Apache--2.0-blue) **Crate Feature 审计与可视化工具** `cargo-feature-lens` 是一个用于审计 Cargo feature 使用情况的 Cargo 子命令。它会构建解析后的依赖与 feature 图,报告与 feature 相关的发现,并可以导出图谱视图以供审查或编写文档。 该工具使用 `cargo metadata`、manifest 解析、已配置的规则以及保守的 Rust 源码扫描。它不会编译目标项目。 ## 范围与限制 Cargo Feature Lens 是一个审计辅助工具,不能替代 Cargo、`cargo check` 或特定项目的审查。它将 `cargo metadata` 视为已解析包和已启用 feature 的真实来源,然后为 feature 来源、基于规则的发现和简单的源码引用添加轻量级分析。 各项发现属于审查信号。它们可以突出显示有风险或冗余的 feature 选择,但并不能自动证明某个 feature 应该被移除。源码扫描刻意保持保守,并且该工具不会评估生成的代码、构建脚本、宏或每一个可能的 `cfg` 表达式。 ## 演示 运行内置的冲突 fixture 以查看简短、可复现的审计报告: ``` cargo run -- feature-lens --manifest-path tests/fixtures/conflict-reqwest/Cargo.toml --check --fail-on warning ``` 示例输出(已缩减): ``` Feature Footprint Report ──────────────────────── ✓ 2 total features active across 2 crates ⚠ 3 findings detected Finding summary: 3 visible findings severity: info 0, warning 2, error 1 kind: Unused 2, Conflict 1 ┌─ reqwest (0.0.0) │ active features: native-tls, rustls-tls │ ✖ Conflict: TLS backends are mutually exclusive. Choose exactly one (native-tls, rustls-tls, or default-tls). ``` 自上而下阅读:摘要是适合 CI 的分类筛查,随后的 crate 部分准确展示了是哪个 feature 集合触发了每条建议性发现。它通过专注于 feature 来源和基于规则的审计提示(而非构建正确性证明),对 Cargo 的原生工具形成了补充。 ## 报告内容 - 当前启用的 crate feature 以及 feature 激活的来源。 - 未使用的 feature 候选项,包括对简单 `#[cfg(feature = "...")]` 和 `cfg!(feature = "...")` 用法的源码感知检查。 - 不同依赖路径上重复的 feature 激活。 - 来自内置和本地规则的冲突、臃肿及禁用默认 feature 的发现。 - 通过 `--check` 和严重性阈值实现适合 CI 的通过/失败结果。 ## 输出格式 报告可以渲染为以下格式: - 终端文本 - Markdown - JSON - Graphviz DOT - Mermaid ## 从源码安装 ``` git clone https://github.com/billybox1926-jpg/Crate-Feature-Auditor-Visualizer.git cd Crate-Feature-Auditor-Visualizer cargo install --path . ``` 要求 Rust 1.70 或更高版本。 ## 快速开始 分析当前的 Cargo 包或工作区: ``` cargo feature-lens ``` 分析指定的 manifest: ``` cargo feature-lens --manifest-path Cargo.toml cargo feature-lens --manifest-path path/to/workspace/Cargo.toml ``` 生成报告文件: ``` cargo feature-lens --format markdown --output report.md cargo feature-lens --format json --output report.json ``` 导出图谱: ``` cargo feature-lens --format dot --output graph.dot cargo feature-lens --format mermaid --output graph.md ``` 聚焦或过滤结果: ``` cargo feature-lens --unused cargo feature-lens --bloat cargo feature-lens --min-severity warning cargo feature-lens --check --fail-on error cargo feature-lens --manifest-path Cargo.toml --crate serde ``` 分析来自 crates.io 的 crate: ``` cargo feature-lens --remote --crate tokio cargo feature-lens --remote --crate serde --crate-version 1 ``` ## 本地规则 在工作目录中添加可选的 `feature-lens.toml` 文件,以定义特定于项目的冲突、臃肿或默认 feature 指导原则。本地规则是对 `docs/suggestions.json` 中内置规则数据库的补充。 ## CI 用法 结合 `--check` 和 `--fail-on` 将建议性发现转化为 CI 拦截条件: ``` cargo feature-lens --check --fail-on warning ``` 当你希望报告隐藏较低严重性的发现,同时保留完整的分析行为以供更严格的运行使用时,请使用 `--min-severity`。 ## 更多文档 - [用户指南](docs/guide.md) - [架构](docs/architecture.md) - [贡献指南](docs/CONTRIBUTING.md) ## 许可证 基于 Apache License, Version 2.0 授权。详见 [LICENSE](LICENSE)。
标签:可视化界面, 通知系统