关于 find-mismatch
find-mismatch 是用于检查项目运行时错误的代码审查技能,结合 JS/TS 的 Fallow 静态分析与多语言人工检查清单,并按模板报告问题。
主要功能
- 01JS/TS 的 Fallow 审计
- 02区分暂存与未暂存改动
- 03检查跨边界接口契约
- 04多语言运行时错误清单
- 05按模板输出问题报告
适用场景
- 01审查暂存的 JS/TS 改动并应用安全修复
- 02检查未暂存改动且不修改文件
- 03排查序列化或异步处理错误
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ utarn/ review-skill --skill find-mismatch安装后在 Claude Code 中输入/find-mismatch确认已加载。
详细介绍
查找不匹配
逐一检查每个文件。仅关注运行时故障/错误。不要报告风格、格式、性能建议、文档/测试或“考虑使用 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. 序列化与反序列化
- 大小写:DB/后端中的
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,导致错误未被发现。 - 泄漏:错误路径中未关闭文件/DB/网络连接。
6. CSS 与样式
- HSL 变量:使用原始 HSL 分量(
0 0% 100%)而非函数格式(hsl(0 0% 100%)),在 Tailwind v4 中会失效(与 v3 不同)。 - 内联主题:循环引用、选择器不匹配(class 与 data-theme)。
7. 占位符与存根代码
- 未使用的声明/文件/依赖、TODO 注释、空 catch 块。
3. 特定语言的陷阱
- Python:虚构的库方法(pandas、numpy、requests)、同步/asyncio 混淆、可变默认参数(
def f(x=[]))、静默丢失缩进。 - JS/TS:后端(Node)与前端(Browser)API 混用、滥用
any、仅类型导入不匹配、barrel 文件误报(已导出但未在生产环境中使用,却在测试/库中使用)。 - 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