代码质量扫描工具

Firebat是一款代码质量扫描工具,用于发现可维护性问题,帮助团队基于可观察信号而非直觉优先进行重构。

  • by zipbul
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 zipbul/firebat

使用说明

🔥 火蝠

表面代码质量扫描仪 可维护性问题 因此,团队可以根据可观察到的信号而不是直觉来优先考虑重构。

建立在 包子 + oxc,专为快速重复跑步而设计。用于AI代理集成的仅JSON CLI输出。

安装

bun install
bun run build          # → dist/firebat.js

Bun行为在中配置 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,nesting

CLI参考

firebat [targets...] [options]
firebat scan [targets...] [options]

命令

命令 描述
scan 运行代码分析(默认命令)
install 在此项目中设置firebat配置文件
update 将配置文件与最新模板同步
cache clean 删除缓存的分析数据(.firebat/*.sqlite)

扫描选项

标志 默认值 描述
--min-size <n|auto> auto 重复检测的最小AST节点大小
--max-forward-depth <n> 0 最大薄包装链深度
--only <list> all 要运行的逗号分隔检测器
--config <path> .firebatrc.jsonc 配置文件路径
--log-level <level> info 错误
--log-stack off 在日志输出中包含堆栈跟踪

探测器(12)

大多数探测器默认运行(barrel 选择加入)。使用 --only 以选择子集。 如果 .firebatrc.jsonc 存在并且 --only 未指定,可以通过设置禁用探测器 features["<detector>"] 到 false.

代码质量

探测器 它发现了什么
完全重复 跨文件的相同AST子树
结构复制品 结构相似的代码(克隆类)
浪费 死存储区——已分配但从未读取的变量,或在读取前被覆盖的变量
嵌套 预算超限信号超过嵌套深度、认知复杂性、回调深度、链深度和函数长度
提前返回 受益于保护条款/提前返回的函数
转发 只转发呼叫的薄包装和长转发链

建筑学

探测器 它发现了什么
桶 桶文件违规: export *、深度导入、索引文件丢失/无效、跨模块重新导出
未知证据 不安全 unknown/any 用法:类型断言,未经验证的未知,推断任何
依赖项 导入依赖周期和边缘提示
嵌套 嵌套深度、认知复杂性、回调深度、链深度、函数长度预算超标
提前返回 否则可逆转,可折叠条件,保护条款机会
可折叠,如果 嵌套的if语句,可以折叠成单个条件
间接 瘦包装器、转发链、类型重映射、接口重写
可变寿命 长期存在的变量,范围缩小的机会
浪费 死存储、未使用的变量
副本 精确和结构代码重复
时间耦合 依赖订单的操作
巨型文件 超出行预算的文件(默认1000; maxLines 为了覆盖, false 禁用)
误差流 不安全的错误处理模式

配置

创建 .firebatrc.jsonc 在项目根目录中:

{
  // 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)
  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

许可证

私人