yy-lint
执行代码 lint 检查,包括检测 lint 脚本、验证 Node 版本、执行 lint 检查并尝试自动修复报错。支持自定义命令。
功能特性
- 支持自定义命令:优先使用用户明确指定的命令
- 自动检测
package.json中的lint:fix或lint脚本 - 命令优先级:用户指定命令 >
lint:fix>lint - 验证 Node.js 版本是否满足项目
.nvmrc要求 - 执行 lint 进行代码风格和类型检查
- 仅修复报错(error),不修复警告(warning)
- exit code 为 0 时直接跳过日志读取,节省 token
使用方式
默认方式
直接调用 /yy-lint,自动检测并执行 lint:fix 或 lint 命令。
指定命令
调用 /yy-lint <command>,使用指定的命令执行:
/yy-lint npm run eslint:fix/yy-lint npm run type-check/yy-lint pnpm run lint
工作流程
阶段一:确定要执行的命令
优先级顺序(从高到低):
- 用户明确指定的命令
package.json中的lint:fix脚本package.json中的lint脚本
执行逻辑:
- 检查用户是否提供了自定义命令参数
- 如果有,直接使用该命令,跳过步骤 2-3,进入阶段二
- 检查项目根目录下是否存在
package.json文件
- 如果存在,读取 package.json 中的 scripts 字段
- 检查是否定义了
lint:fix或lint命令(优先lint:fix)
情况 1:用户指定了自定义命令
- 使用用户指定的命令
- 进入阶段二
情况 2:package.json 不存在或无 lint 相关脚本
- 显示提示信息,跳过 lint 检查
- 结束执行
情况 3:存在 lint 相关脚本
- 记录要执行的命令(
npm run lint:fix或npm run lint) - 进入阶段二
阶段二:验证 Node 版本
- 检查项目根目录下是否存在
.nvmrc文件 - 如果存在,读取文件内容获取要求的 Node.js 版本
- 使用
node --version获取当前 Node.js 版本 - 比较版本是否满足要求
情况 1:.nvmrc 不存在或无法读取
- 继续执行 lint 检查
情况 2:Node 版本满足要求
- 继续执行阶段三
情况 3:Node 版本不满足要求
- 显示警告信息(包含当前版本和要求版本)
- 跳过 lint 检查,结束执行
阶段三:执行命令检查
执行阶段一确定的命令(可能是用户指定的自定义命令或自动检测到的 lint 命令)。
关键行为:
- 执行 lint 命令并捕获 exit code
- ⚠️ 重要:在捕获到 exit code 值之前,绝对不要读取 lint 命令的输出内容 - 必须先获取 exit code,再根据结果决定后续操作 - 这是为了避免在 lint 通过时浪费 token 读取无用的成功日志
- 如果 exit code 为 0:
- 检测通过,显示成功消息 - 不要读取命令输出日志,直接结束执行
- 如果 exit code 非 0:
- 显示错误信息 - 仅修复报错(error),不修复警告(warning) - 报告修复结果 - 结束执行
错误修复原则
重要:只修复报错(error),不修复警告(warning)。
修复 lint 报错时必须正面解决问题,不得回避:
- 不能随意给变量添加
any类型声明来绕过类型检查——这只是掩盖了潜在的类型错误 - 不能删除未开发完毕的功能代码来消除报错——这会破坏用户的工作进度
- 应当理解报错的实际含义,针对根本问题进行修复
警告(warning)不修复的原因:
- 警告通常为建议性提示,不影响代码功能
- 自动修复警告可能引入不必要的修改
- 保留警告供开发人员人工评估是否需要调整
Token 优化策略
执行 lint 命令后的处理逻辑:
if (exitCode === 0) {
// 检测通过,无需读取日志
console.log('✓ 代码质量检查通过!');
return;
} else {
// 检测失败,需要读取日志进行分析
console.log('✗ 检测失败,读取错误日志...');
const output = readCommandOutput();
// ... 处理错误
}原因: exit code 为 0 表示检测通过,读取大量成功日志纯属浪费 token。
并行任务时的例外
若当前有多个任务正在并行执行(多个子任务同时修改文件),不要在此期间执行 lint。
原因:lint 命令可能会自动修改本地代码(格式化等),若某个并行任务正在写入文件,可能导致文件内容异常或冲突。
等所有并行任务完成后,再统一执行一次 lint。
禁止主动执行的命令
- 除 lint 相关命令(
npm run lint:fix或npm run lint)外的package.json中定义的其他命令 - 编译命令、构建命令、部署命令
- 任何自动执行的测试命令
- 除
node --version外的其他npx命令
输出示例
使用自定义命令成功示例
🔧 执行 Lint 检查...
使用用户指定的命令: npm run eslint:fix
✓ Node.js 版本满足要求 (v22.18.0 >= v22.18.0)
执行 lint 检查...
✓ npm run eslint:fix 执行成功,代码质量检查通过!成功示例(自动检测)
🔧 执行 Lint 检查...
检查 lint 脚本可用性...
✓ 发现 lint 脚本: lint:fix
✓ Node.js 版本满足要求 (v22.18.0 >= v22.18.0)
执行 lint 检查...
✓ npm run lint:fix 执行成功,代码质量检查通过!无 lint 脚本示例
🔧 执行 Lint 检查...
检查 lint 脚本可用性...
ℹ 未发现 lint 脚本,跳过 lint 检查Node 版本不满足要求示例
🔧 执行 Lint 检查...
检查 lint 脚本可用性...
✓ 发现 lint 脚本: lint
⚠️ Node.js 版本 (v18.17.0) 低于项目要求 (v20.15.0),跳过 lint 检查lint 错误示例
🔧 执行 Lint 检查...
检查 lint 脚本可用性...
✓ 发现 lint 脚本: lint:fix
✓ Node.js 版本满足要求
执行 lint 检查...
✗ npm run lint:fix 发现错误
[显示报错信息(不含警告)]
尝试自动修复报错...
[修复过程和结果]