fallow:392⭐的 Rust 代码分析工具,专治 TypeScript 项目的陈年旧账
项目概览
| 属性 | 详情 |
|---|---|
| 名称 | fallow |
| GitHub | fallow-rs/fallow |
| Stars | 392 ⭐ |
| 语言 | Rust |
| 许可证 | MIT |
| 定位 | TypeScript/JavaScript 代码质量分析工具 |
为什么需要 fallow?
前端项目随着业务发展,代码库往往会积累各种”技术债”:
- 僵尸代码:函数和变量定义了却从未使用,文件越堆越大
- 复制粘贴:同样的逻辑散落在十几个文件里,一改就漏
- 循环依赖:模块 A 依赖 B,B 又依赖 A,编译时提心吊胆
- 复杂度爆炸:单个函数几百行,接手的人不敢动
传统的 ESLint 能发现语法问题,但对这类”架构级”问题无能为力。fallow 的目标就是填补这个空白。
核心功能
1. 未使用代码检测
扫描整个项目的导出和引用关系,找出那些”存在但没人用”的代码:
fallow --unused
输出示例:
⚠️ Unused exports found:
- src/utils/helpers.ts: formatDate()
- src/components/LegacyButton.tsx (entire file)
- src/api/types.ts: UserResponse interface
2. 重复代码识别
不只是简单的字符串对比,fallow 会分析代码的语义结构,发现那些”改了变量名但逻辑一样”的复制粘贴:
fallow --duplicates
3. 循环依赖检测
可视化展示模块间的依赖关系,帮你定位循环引用的源头:
fallow --circular
4. 复杂度热点分析
基于圈复杂度和认知复杂度,找出最需要重构的函数:
fallow --complexity
为什么选择 Rust?
fallow 用 Rust 编写,相比同类 JavaScript 工具有明显性能优势:
| 场景 | fallow (Rust) | 传统 JS 工具 |
|---|---|---|
| 10万行代码项目 | ~2秒 | ~15秒 |
| 100万行代码项目 | ~20秒 | 数分钟或内存溢出 |
| 内存占用 | ~100MB | ~500MB+ |
对于大型 monorepo,这种性能差异直接决定了工具是否可用。
使用方式
安装
# 通过 npm 安装(预编译二进制)
npm install -g fallow
# 或通过 cargo 从源码编译
cargo install fallow
基础用法
# 扫描整个项目
fallow
# 只检查特定目录
fallow src/components
# 输出 JSON 格式供 CI 使用
fallow --format json > report.json
# 忽略测试文件
fallow --ignore "**/*.test.ts"
CI 集成
在 GitHub Actions 中使用:
- name: Check code quality
run: |
npx fallow --unused --fail-on-found
项目状态
| 指标 | 数据 |
|---|---|
| Stars | 392 |
| Forks | 10 |
| 创建时间 | 2026年3月 |
| 最后更新 | 2026年4月(活跃开发中) |
| 主要依赖 | OXC(Rust 编写的 JavaScript 编译器) |
同类工具对比
| 工具 | 语言 | 未使用代码 | 重复代码 | 循环依赖 | 性能 |
|---|---|---|---|---|---|
| fallow | Rust | ✅ | ✅ | ✅ | 极高 |
| Knip | TypeScript | ✅ | ❌ | ❌ | 中等 |
| jscpd | JavaScript | ❌ | ✅ | ❌ | 中等 |
| Madge | JavaScript | ❌ | ❌ | ✅ | 较慢 |
fallow 的优势在于”一站式”解决所有代码质量问题,且性能足够处理大型项目。
注意事项
- 项目较新(2026年3月创建),API 可能变化
- 某些功能还在开发中(如 Vue/Svelte 单文件组件支持)
- 需要 Node.js 18+ 运行环境
总结
如果你正在维护一个历史较长的 TypeScript 项目,或者想在新项目启动时就建立代码质量门槛,fallow 值得一试。它的 Rust 内核提供了同类工具难以匹敌的性能,而功能覆盖面也足够应对大多数代码清理场景。
相关链接
- GitHub: https://github.com/fallow-rs/fallow
- 许可证: MIT