🔥 喷火兵
表面代码质量扫描仪 可维护性问题 因此,团队可以根据可观察到的信号而不是直觉来优先考虑重构。
建立在 包子 + oxc,专为快速重复跑步而设计。用于AI代理集成的仅JSON CLI输出。
安装
bun install
bun run build # → dist/firebat.jsBun行为在中配置 bunfig.toml 在项目的根。
快速开始
# Scan the entire project
firebat
# Scan specific files
firebat src/app.ts src/utils.ts
# Select detectors and output JSON
firebat --only waste,lintCLI参考
firebat [targets...] [options]
firebat scan [targets...] [options]命令
| 命令 | 描述 |
|---|---|
scan | 运行代码分析(默认命令) |
install | 在此项目中设置firebat配置文件 |
update | 将配置文件与最新模板同步 |
cache clean | 删除缓存的分析数据(.firebat/*.sqlite) |
扫描选项
| 标志 | 默认值 | 描述 | ||||
|---|---|---|---|---|---|---|
--min-size | auto | 重复检测的最小AST节点大小 | ||||
--max-forward-depth | 0 | 最大薄包装链深度 | ||||
| `--only | ||||||
| ` | all | 要运行的逗号分隔检测器 | ||||
| `--config | ||||||
| ` | .firebatrc.jsonc | 配置文件路径 | ||||
--log-level | info | 错误 | 警告 | 信息 | 调试 | 跟踪 |
--log-stack | off | 在日志输出中包含堆栈跟踪 |
探测器(28)
所有探测器默认运行。使用 --only 以选择子集。 如果 .firebatrc.jsonc 存在并且 --only 未指定,可以通过设置禁用探测器 features[""] 到 false.
代码质量
| 探测器 | 它发现了什么 |
|---|---|
| 完全重复 | 跨文件的相同AST子树 |
| 结构复制品 | 结构相似的代码(克隆类) |
| 浪费 | 死存储区——已分配但从未读取的变量,或在读取前被覆盖的变量 |
| 嵌套 | 深度嵌套会损害可读性,并带有重构建议 |
| 提前返回 | 受益于保护条款/提前返回的函数 |
| 转发 | 只转发呼叫的薄包装和长转发链 |
建筑
| 探测器 | 它发现了什么 |
|---|---|
| 桶 | 桶文件违规: export *、深度导入、索引文件丢失/无效、跨模块重新导出 |
| 未知证据 | 不安全 unknown/any 用法:类型断言,未经验证的未知,推断任何 |
| 依赖项 | 导入依赖周期和边缘提示 |
| 耦合 | 高耦合热点模块 |
| 嵌套 | 认知复杂性、深度嵌套、回调深度、复杂性密度 |
| 提前返回 | 否则可逆转,可折叠条件,保护条款机会 |
| 可折叠,如果 | 嵌套的if语句,可以折叠成单个条件 |
| 间接 | 瘦包装器、转发链、类型重映射、接口重写 |
| 可变寿命 | 长期存在的变量,范围缩小的机会 |
| 浪费 | 死存储、未使用的变量 |
| 副本 | 精确和结构代码重复 |
| 时间耦合 | 依赖订单的操作 |
| 巨型文件 | 文件超过可配置的行数阈值 |
| 误差流 | 不安全的错误处理模式 |
外部工具
| 探测器 | 工具 | 它发现了什么 |
|---|---|---|
| 棉绒 | oxlint | 棉绒错误和警告 |
| 格式 | oxfmt | 需要格式化的文件 |
| 类型检查 | tsgo | 使用代码帧键入错误和警告 |
配置
创建 .firebatrc.jsonc 在项目根目录中:
{
// Detectors to run (default: all)
"detectors": ["waste", "nesting", "lint"],
// Per-feature configuration
"features": {
"unknown-proof": {
"boundaryGlobs": ["src/adapters/**"]
},
"barrel": {
"ignoreGlobs": ["dist/**"]
}
}
}建筑
src/
adapters/ Entrypoints & composition root (CLI)
application/ Use-case orchestration (no direct I/O imports)
ports/ Interfaces for external I/O
infrastructure/ I/O implementations (SQLite, tsgo, oxlint, ast-grep)
engine/ Pure computation (AST parsing, CFG, hashing, detection)
features/ Pure analysis logic per detector依赖规则:
application/→ 取决于ports/只有(从来没有infrastructure/)infrastructure/→ 实现ports/adapters/→ 组装一切(组成根)engine/+features/→ 纯粹的,没有I/O依赖关系
发展
bun test # Run all tests
bun run build # Build to dist/
bun run deps # Check dependency rules许可证
私人
