BadBeta/archdo
GitHub: BadBeta/archdo
Elixir 架构质量检查器,通过 186 条规则覆盖边界、OTP、模块质量、测试与编译分析,辅助发现结构性问题与 LLM 冗余。
Stars: 0 | Forks: 0
# Archdo
Elixir 的架构质量检查器。捕捉 Credo(风格)、Dialyzer(类型)和 Sobelow(安全)遗漏的问题:结构性问题、SOLID 违规、OTP 反模式、边界约束、某些 LLM 代码冗余等。
**186 条规则**,覆盖 12 个类别。每个发现都包含 `why`、排序后的修复建议,以及结构化上下文。
## LLM 冗余检测
规则 6.33 检测五种典型的 LLM 生成的不必要冗长代码模式:`@doc` 标注在私有函数上、平凡的委托包装器(`defp foo(x), do: Bar.foo(x)`)、冗余的布尔比较(`== true`)、空文档字符串、单步管道(`x |> foo()`)。配合规则 6.34(死私有函数)、4.27(未使用的别名)、6.38(恒等变换)和 6.40(冗长的 ok/error 解包),Archdo 可以系统性地发现并移除代码库中的 AI 生成冗余。
## 检查内容
| 类别 | 规则数 | 示例 |
|------|--------|------|
| **边界** | 31 | 依赖方向、上下文封装、循环依赖、喋喋不休的边界、未验证的参数、编译期跨边界调用检测、内部模块泄露、Repo 绕过、幽灵依赖、未使用的别名 |
| **模块质量** | 42 | 复杂度、内聚性、扇出、Martin 指标、错误处理(7 条规则)、递归(4 条规则)、存根检测、**LLM 冗余检测**、死私有函数、恒等变换、防御性 nil 返回、冗长的 ok 解包、单元子句 with、常量表达式、不可达子句、冗余 guard 重检、长参数列表、嵌套控制流、布尔失明 |
| **OTP 纪律** | 41 | 阻塞回调、未监督进程、GenServer 反模式、重启不匹配、陈旧 PID、死锁检测、顺序化替代并行、回调膨胀 |
| **测试** | 23 | 未使用 Mox 配合行为、覆盖缺口、测试命名、异步资格判定、弱断言、仅测试的公共函数、过度 Mock、空 describe 块、缺失错误路径测试、未测试模块 |
| **编译分析** | 20 | 死代码、传递性死代码、爆炸半径、未使用的导入、弱依赖、API 表面权重、函数循环(Tarjan 强连通分量)、协议完备性、变更风险、循环上下文依赖、孤儿模块 |
| **事件溯源** | 8 | 聚合纯度、投影隔离、事件不可变性、命令/事件命名 |
| **NIF 安全** | 4 | 导致 Panic 的 Rust 模式、调度器误用、缺少行为包装 |
| **状态机** | 3 | 不可达状态、终端状态完整性、隐式布尔状态 |
| **组合** | 2 | 深层 `use` 链、过度命名空间深度 |
## 依赖
- **Jason** — JSON 编码,用于 MCP 和输出格式
- **JSV** — JSON Schema 验证,在 MCP 边界进行工具输入验证
## 快速开始
### 作为 Mix 依赖
```
# mix.exs
def deps do
[{:archdo, github: "BadBeta/archdo", only: [:dev, :test], runtime: false}]
end
```
```
mix archdo # scan lib/
mix archdo --format compact # one-line-per-finding
mix archdo --paths lib/my_app/accounts # scan specific paths
mix archdo --only 4.17,6.12 # run specific rules
mix archdo --boundaries # cross-module dependency analysis
mix archdo --functions # function-level graph analysis
mix archdo --compiled # compiled beam analysis (dead code, blast radius, API checks)
mix archdo --coverage # test coverage gap matrix
mix archdo --metrics # Martin package metrics matrix
```
### 无需安装即可扫描任意项目
你也可以从 Archdo 项目中扫描外部项目:
```
cd /path/to/archdo
mix archdo --paths /path/to/other_project/lib --format compact
```
## 与 Claude Code 配合使用(推荐)
Archdo 在与 Claude Code 和 [Elixir 技能](https://github.com/BadBeta/Elixir_skill) 的**双层评审**中效果最佳:
1. **第一层 — Archdo** 机械地查找结构性问题(快速、全面)
2. **第二层 — Elixir 技能** 提供领域判断,确认发现是否为真实问题或有意的折衷
### 安装设置
**步骤 1:安装 Elixir 技能**(为 Claude Code 提供深入的 Elixir 知识):
```
cd ~/.claude/skills
git clone https://github.com/BadBeta/Elixir_skill.git elixir
```
**步骤 2:克隆 Archdo**(或将其添加为项目依赖):
```
git clone https://github.com/BadBeta/archdo.git ~/Projects/Archdo
cd ~/Projects/Archdo && mix deps.get
```
**步骤 3:使用它。** 让 Claude Code 审查任意 Elixir 项目:
Claude 将:
1. 运行 `mix archdo --paths /path/to/my_project/lib` 进行结构性分析
2. 加载 Elixir 技能及相关子技能(OTP、架构、测试、错误处理),用领域知识评估每个发现
3. 展示问题并附带判断哪些重要以及如何以惯用方式修复
Elixir 技能的子技能包含实现第二层所需的专业知识:OTP 进程模式、架构决策框架、Ecto 约定、错误处理惯用法等。审查时请始终使用 `/elixir` 以确保加载该技能。
### MCP 服务器(可选,用于更深层集成)
对于希望将 Archdo 作为 MCP 工具的项目:
```
// .mcp.json in your project root
{
"mcpServers": {
"archdo": {
"command": "mix",
"args": ["archdo.mcp"]
}
}
}
```
这暴露了 5 个工具:`archdo_deep_review`、`archdo_analyze_paths`、`archdo_analyze_file`、`archdo_list_rules`、`archdo_explain_rule`。工具输入会通过 JSV 对照其 JSON Schema 定义进行验证。
## 输出格式
| 格式 | 用途 |
|------|------|
| `text` | 终端审查 — 分组、带颜色编码、完整解释 |
| `compact` | grep/CI — 每条发现一行 |
| `json` | 仪表板、CI 集成 |
| `llm` | NDJSON,带 Markdown,供 LLM 消费 |
## 基线/冻结
接受现有违规并仅标记新增问题:
```
mix archdo --freeze # save baseline
git add .archdo_baseline.exs
mix archdo # only new violations shown
mix archdo --freeze-stats # track progress
```
## 文档
- **[GUIDE.md](GUIDE.md)** — 完整用户指南
- **[ARCHITECTURE_RULES.md](ARCHITECTURE_RULES.md)** — 所有规则文档
- **[DESIGN.md](DESIGN.md)** — 设计哲学与架构
## 许可证
MIT。
标签:Elixir, LLM代码检测, OTP, SEO工具, 代码规范, 依赖管理, 函数式编程, 架构检查, 模块质量, 死代码检测, 测试架构, 结构化修复建议, 编译期分析, 边界检查, 错误基检测, 静态代码分析