Fallow 编辑器集成教程:如何用 VS Code、Zed 与 Neovim 实现 LSP 实时死代码诊断
【免费下载链接】fallowCodebase intelligence for TypeScript and JavaScript. Free static analysis of code and styles: unused code, duplication, circular deps, complexity hotspots, architecture boundaries, design-system drift. Optional paid runtime layer (Fallow Runtime): hot-path review and cold-path deletion evidence from real production traffic.项目地址: https://gitcode.com/gh_mirrors/fa/fallow
Fallow 编辑器集成的核心只有一条:fallow-lsp语言服务器。它是 Fallow 的 LSP 协议端点,负责把 TypeScript/JavaScript 项目里的未使用代码、重复代码、循环依赖、复杂度热点等发现,以编辑器诊断的形式实时推到你的屏幕上。无论你用 VS Code、Zed 还是 Neovim,接入的其实是同一个服务——这也是本教程最省心的地方:配置一次思路,三个编辑器通吃。
三大编辑器集成的共同原理
Fallow 对编辑器的态度是"薄客户端":分析逻辑全部留在fallow-lsp二进制里,编辑器端只做协议转发。三个集成共同支持的能力:
- ✅实时诊断:未使用文件/导出/类型/依赖、未解析导入、重复导出、循环依赖、代码重复
- ✅Hover 悬停信息:导出是否被使用、重复块所在位置
- ✅Quick Fix 快速修复:一键删除未使用导出和文件
- ✅Code Lens:在导出声明上方显示引用计数(视编辑器而定)
💡 想深入理解诊断发布、文档版本防过期等机制,可阅读官方 LSP 内部文档:docs/reference/lsp-internals.md
VS Code:一条命令安装 Fallow 扩展
VS Code 扩展是三个集成中功能最全的,推荐首选。
一键安装步骤
在扩展面板搜索 "Fallow",或命令行执行:
code --install-extension fallow-rs.fallow-vscode扩展会自动查找并自动下载fallow-lsp与fallowCLI 二进制(查找顺序:配置项 → 项目node_modules/.bin→PATH→ 扩展存储 → 自动下载),通常零配置即可开工。
你会得到什么
| 能力 | 说明 |
|---|---|
| 实时诊断 | 未使用代码、重复代码波浪线直接显示在编辑器 |
| Code Lens | 每个导出上方显示引用次数,点击跳转 Peek References |
| 侧边树视图 | 按问题类型浏览未使用代码,按"克隆家族"浏览重复代码 |
| Health 健康视图 | 项目 0–100 健康分与等级,复杂度热点候选 |
| 状态栏 | 总问题数 + 重复率 + 健康分(如health: B (82)) |
| 自动修复 | 一条命令移除未使用导出与依赖,支持 Dry Run 预览 |
| 审计判定 | Fallow: Audit Changed Files在状态栏给出 pass/warn/fail |
快速降噪技巧:静音特定诊断
重复代码诊断可能跨很多行,淹没 TypeScript/ESLint 的信息。Fallow 提供四种本地静音方式,其中最快的两种:
- 右键任意 Fallow 波浪线 → Quick Fix →"Mute Fallow 某类 findings in this workspace"
- 给命令
fallow.toggleMuteDuplicates绑一个快捷键,一键静音
静音只是本地视图过滤,不会改变项目配置,CI 和fallow dead-code仍会报告全部发现。完整设置表见 editors/vscode/README.md。
Zed:用原生扩展接入 fallow-lsp
Zed 扩展故意做得很薄:它只负责启动现成的fallow-lsp,不重复实现任何分析逻辑。
最快接入方法
- 在 Zed 中执行
zed: install extension,选择Fallow - 确保
fallow-lsp可被找到:扩展按以下顺序解析二进制——lsp.fallow.binary.path→ 工作区node_modules/.bin/fallow-lsp→PATH→ 已签名的托管下载 - 若 Zed 以 Restricted Mode 打开项目,先信任工作区(受限模式会整体屏蔽语言服务器)
如果你定制过language_servers列表,记得保留fallow:
{ "languages": { "TypeScript": { "language_servers": ["fallow", "..."] } } }想给团队统一一套更安静的编辑器基线,可以在.zed/settings.json里用mutedCategories提交精确的诊断码(如unused-export),这样静音状态随仓库走、全员一致。修改initializationOptions后,记得在命令面板执行editor: restart language server使其生效。
⚠️ 完整的 Health/Security 项目级报告请在 Zed 终端里用
npx fallow health等 CLI 命令运行——当前 Zed 扩展 API 不提供侧边树贡献点,这是当前 API 下的最佳对齐方案,详见 editors/zed/README.md。
Neovim:最小化 Fallow 语言服务器配置
Neovim 集成同样"刻意很薄"。两步上手:
第 1 步:全局安装,让fallow-lsp出现在 PATH
npm install -g fallow fallow-lsp --version # 确认 Neovim 能看到第 2 步:在 Neovim 配置中挂上语言服务器
vim.lsp.config("fallow", { cmd = { "fallow-lsp" }, filetypes = { "javascript", "typescript", "javascriptreact", "typescriptreact" }, root_markers = { ".fallowrc.json", "package.json", ".git" }, }) vim.lsp.enable("fallow")可选地在init_options.issueTypes中只列出要关掉的类型(如["circular-dependencies"] = false),其余默认全开。若fallow-lsp不在 PATH,把cmd指向绝对路径即可。
验证是否生效:打开一个 TS/JS 项目,执行:lua vim.print(vim.lsp.get_clients({ name = "fallow" }))。完整说明见 editors/nvim/README.md。
LSP 诊断实战:这些细节能帮你少踩坑
诊断什么时候刷新?
Neovim 等拉取式客户端走 LSP 3.17 pull 模型,保存时刷新。首次分析在服务挂接时启动,所以新打开的缓冲区可能在首轮分析完成(或下次保存)后才出现发现——这不是 bug。
静音 ≠ 关闭规则
所有编辑器里,"静音"都只影响编辑器内显示。真正的开关在 Fallow 项目配置(.fallowrc.json等)和服务端issueTypes初始化选项。想全局关掉某类问题,改项目配置;只想自己眼前清净,用编辑器侧静音。
安全候选诊断默认是关的
security-sink与security-client-server-leak两条诊断默认off,且以 information 级别发布——它们是待验证的候选,不是确认的漏洞。需要时在.fallowrc.json的rules里设为"warn"即可。
常见问题速查
| 问题 | 解答 |
|---|---|
| 装好扩展但没反应? | 确认fallow-lsp二进制可解析;VS Code 可开Fallow: Show Output Channel排查 |
| 改了初始化选项没生效 | initialize只读一次,改后必须重启语言服务器 |
| 退出码 1 是不是报错? | 不是。0 和 1 都表示运行成功(1 = 有发现),2 才是真正的错误 |
| 想用完整项目报告 | 编辑器内以诊断为主,完整 Health/Security 报告用fallowCLI 运行 |
延伸阅读
- VS Code 扩展完整功能与设置:editors/vscode/README.md
- Zed 扩展说明与配置:editors/zed/README.md、editors/zed/extension.toml
- Neovim 配置指南:editors/nvim/README.md
- LSP 协议行为与诊断不变式:docs/reference/lsp-internals.md
- 项目总览与 CLI 命令表:README.md
三条命令、一份 LSP 服务,你的编辑器从此自带"死代码雷达"。建议从 VS Code 起步体验全功能,再按同一套issueTypes/mutedCategories思路迁移到 Zed 和 Neovim——配置心智完全一致,迁移成本趋近于零。
【免费下载链接】fallowCodebase intelligence for TypeScript and JavaScript. Free static analysis of code and styles: unused code, duplication, circular deps, complexity hotspots, architecture boundaries, design-system drift. Optional paid runtime layer (Fallow Runtime): hot-path review and cold-path deletion evidence from real production traffic.项目地址: https://gitcode.com/gh_mirrors/fa/fallow
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考