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


**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)。
标签:可视化界面, 通知系统