mcpField
C
compat-review

compat-review

github.com/toss测试与质量11.4k218 次安装2 天前更新
代码仓库

关于 compat-review

用于审查 es-toolkit compat 层改动是否修复了与 Lodash 的实际差异。它根据 PR 声明或函数名构造对比测试,在改动前后运行并报告结果。

主要功能

  1. 01提取 PR 声明和目标函数
  2. 02创建与 Lodash 的对比测试
  3. 03覆盖声明案例及边界情况
  4. 04检查修复前后的行为
  5. 05生成验证报告

适用场景

  1. 01验证 compat 修复 PR
  2. 02将指定 compat 函数与 Lodash 对照
  3. 03发现边界案例中的回归

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/toss/es-toolkit --skill compat-review

安装后在 Claude Code 中输入/compat-review确认已加载。

详细介绍

兼容层审查

验证兼容性 PR 是否确实修复了 lodash 的不一致问题。

输入

$ARGUMENTS — PR 编号(例如 1234)或函数名称(例如 chunk)

工作流

1. 确定目标函数和 PR 声明

PR 编号:

gh pr view {number} --repo toss/es-toolkit --json title,body,files

从 PR 描述和差异中提取:

  • 正在修复的兼容函数
  • 贡献者声称的不一致之处(预期行为与实际行为)
  • 贡献者提供的测试示例

函数名称:阅读函数源码及其规范,了解当前行为。

2. 构建对比测试

在 src/compat/{category}/_compat-review-{fn}.spec.ts 创建一个临时 vitest 测试文件。

import { describe, expect, it } from 'vitest';
import { fn as compatFn } from 'es-toolkit/compat';
import { fn as lodashFn } from 'lodash';

包含两组测试用例:

A. 贡献者声称的示例 — 直接从 PR 描述或测试差异中提取。这些是 PR 声称要修复的用例。

B. 你生成的约 10 个额外边缘用例 — 根据函数签名和 lodash 已知的行为模式生成:

  • 空输入:[]、{}、''、0
  • 空值:null、undefined
  • 负数/零/浮点数:-1、0、1.5、NaN、Infinity
  • 类型强制转换:字符串形式的数字('3')、布尔值、混合类型
  • 边界情况:单元素数组、超长字符串、深度嵌套对象
  • 选择与特定函数相关的用例

每个测试:

it('description', () => {
  let lodashResult, compatResult;
  let lodashErr: any, compatErr: any;
  try {
    lodashResult = lodashFn(args);
  } catch (e) {
    lodashErr = e;
  }
  try {
    compatResult = compatFn(args);
  } catch (e) {
    compatErr = e;
  }

  if (lodashErr && compatErr) return; // both throw = consistent
  if (lodashErr || compatErr) {
    throw new Error(`Behavior mismatch: ${lodashErr ? 'lodash throws' : 'compat throws'}`);
  }
  expect(compatResult).toEqual(lodashResult);
});
3. 在 PR 更改前运行对比测试
yarn vitest run src/compat/{category}/_compat-review-{fn}.spec.ts

记录哪些测试失败——这些是在主分支上存在的真实不一致问题。

4. 应用 PR 更改并重新运行
gh pr diff {number} --repo toss/es-toolkit | git apply

再次运行相同的测试。确认:

  • 贡献者声称的示例现在都能通过
  • 额外的边缘用例仍能通过(没有回归)

测试后还原更改:

git checkout -- .
5. 清理

删除 _compat-review-*.spec.ts。

6. 报告
## {fn} — Compat Review

### PR Claim
{What the contributor says they're fixing}

### Verification (BEFORE fix)
| # | Input | lodash | compat | Match? | Source |
|---|-------|--------|--------|--------|--------|
| 1 | ...   | ...    | ...    | MISMATCH | PR example |
| 2 | ...   | ...    | ...    | MATCH    | Edge case |

### Verification (AFTER fix)
| # | Input | lodash | compat | Match? | Source |
|---|-------|--------|--------|--------|--------|

### Verdict
- [ ] PR claim is valid (inconsistency confirmed on main)
- [ ] Fix resolves the claimed inconsistency
- [ ] No regressions in edge cases
- [ ] Existing tests still pass

评论

支持 Markdown