关于 find-mismatch
这是一个代码审查技能,使用 fallow 静态分析和检查清单查找仓库中的运行时错误。它聚焦功能故障,不处理风格、性能、文档或测试建议。
主要功能
- 01运行 fallow 静态分析
- 02按 Git 状态筛选发现项
- 03自动修复符合条件的暂存项
- 04检查跨边界契约
- 05排查异步、逻辑和语言特定错误
- 06按指定格式报告发现项
适用场景
- 01审查暂存的 JavaScript 或 TypeScript 修改
- 02发现 API 参数或返回字段不匹配
- 03检查空值访问和异步错误
- 04生成结构化的运行时错误报告
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ utarn/ engineer-skills --skill find-mismatch安装后在 Claude Code 中输入/find-mismatch确认已加载。
附带文件agents/openai.yaml
详细介绍
查找不匹配项
使用 fallow 运行静态分析,并修复其指出的问题。逐一检查每个文件。只关注运行时故障/错误并修复。不要报告风格、格式、性能建议、文档/测试或“考虑使用 X”。
1. 流程
- JS/TS(预检查):运行静态分析。
- 检查是否已安装:
fallow --version。 - 如果缺失,则全局安装:
npm install -g fallow。 - 执行审计:
fallow audit --format json --quiet。 - 根据 git 状态筛选结果:
git diff --staged --name-only。 - 如果已暂存:自动应用安全修复,然后重新运行审计进行验证。
- 如果未暂存:仅报告(不做修改)。
- 检查是否已安装:
- 审查清单:将清单应用于所有更改。
- 报告:使用指定模板整理发现的问题。
2. 清单类别
1. 跨边界契约
- 调用不匹配:检查 RPC、HTTP、IPC、事件名称/主题是否与接收方一致。
- 参数名称/类型:
userId与user_id、字符串与数字、扁平与包装形式。 - 返回类型:字段访问(
result.field)必须与返回签名一致。
2. 序列化与反序列化
- 大小写:数据库/后端中的
snake_case与 JSON/前端中的camelCase。 - 可选字段:接收方需要的字段在生产方是否为可选。
- 枚举/判别字段:判别字段(
type、kind)和变体是否匹配。 - Base64:是否发生重复编码。
3. 逻辑错误
- 重复计数:在循环/分支中和外部都递增计数器。
- 差一错误:索引、分页边界(
page <= total与page < total)。 - 条件:冗余/无效标记、不可达语句、变量遮蔽。
4. 属性与方法访问
- 空值解引用:方法调用或数组索引访问(
items[0].name)前未进行空值/长度检查。 - 可选链:过早停止检查(例如,
user?.address.street在address为 null 时仍会崩溃)。 - This 上下文:类中的回调绑定。
5. 异步与并发
- 竞态条件:共享可变状态、未协调的并行文件系统访问。
- 缺少
await:忽略 Promise,导致错误被静默处理。 - 泄漏:错误路径中未关闭文件/数据库/网络连接。
6. CSS 与样式
- HSL 变量:Tailwind v4 中原始 HSL 分量(
0 0% 100%)会失效,应使用函数格式(hsl(0 0% 100%)),与 v3 不同。 - 内联主题:循环引用、选择器不匹配(class 与 data-theme)。
7. 占位代码与存根代码
- 未使用的声明/文件/依赖、TODO 注释、空 catch 块。
3. 特定语言的陷阱
- Python:虚构的库方法(pandas、numpy、requests)、同步/asyncio 混淆、可变默认参数(
def f(x=[]))、静默的缩进丢失。 - JS/TS:后端(Node)与前端(Browser)API 混用、滥用
any、仅类型导入不匹配、桶文件误报(导出但未在生产中使用,却在测试/库中使用)。 - C++:原始指针与智能指针混用、缺少标准库头文件
#include、未初始化变量、缓冲区溢出。 - Rust:过度复杂化借用检查器生命周期、对
None/Err使用unwrap()、在.await让出执行期间持有锁。 - Java / .NET:虚构的注解/属性、LINQ N+1 查询、Entity Framework 模型快照偏差/缺少迁移(检查
Entities/下的模型更改是否对应Migrations/)。 - Go:WaitGroup/Channel 死锁、JSON 中未导出的结构体字段、在循环中 defer、并发访问 map。
- PHP:宽松类型比较(
==与===)、数组与对象访问混用、键未定义。
4. Fallow 发现项映射与修复
| Fallow 类型 | 检查清单类别 | 自动修复操作 |
|---|---|---|
unused_exports | 占位符与存根 | 移除 export(如果在本地使用),或移除整个声明。 |
unused_files | 占位符与存根 | 删除文件(先检查动态导入)。 |
unused_dependencies | 占位符与存根 | 从 package.json 中移除依赖。 |
circular_dependencies | 跨边界 | 交由人工审查(会导致初始化错误)。 |
complexity/duplication | 逻辑错误 | 交由人工审查。 |
5. 输出格式
包含 ## Review Summary 标题(仅限 JS/TS 项目):
## Review Summary
- **Manual review bugs found**: N
- **Fallow auto-fixed**: N findings (staged files only)
- **Fallow non-auto-fixable**: N findings
- **Fallow verdict**: pass / fail
格式化单项发现(为 Fallow 来源的错误添加 [fallow] 标签):
## Bug #1
- **File**: <path>:<line>
- **Category**: <category>
- **What's wrong**: <description>
- **Runtime effect**: <effect>
- **Fix**: <code>
评论
支持 Markdown