yy-frontend-vue2-review
目录范围限制:仅允许审核 src 目录下的文件。重要限制:严格禁止审核 src 目录之外的文件。
When to use
- 用户要求审核 Vue2 项目代码改动
- 用户提到代码 review、检查 bug、代码质量
- 项目存在
src目录
Don't use when
- 项目为 React 或 Vue3 项目时
- 用户要求审核非 src 目录下的文件时
- 用户要求生成新代码或修改业务逻辑时
⛔ 绝对禁止项 / 推荐项 / 注意事项
重要:以下规则必须严格遵守,违反任何禁止项视为审核不通过。
🔴 绝对禁止项
- 数据解构限制:禁止连续解构数据,如
...data.data - 组件数据修改:禁止在父组件中直接修改子组件的数据
- 数据类型修改:禁止多次修改 data 的某些属性,后端给什么值用什么值
- 禁止修改 props:不允许直接修改组件的 props
🟢 推荐项
🟡 不推荐项
- 多层 try/catch 嵌套:不推荐多个 try/catch 嵌套使用,异步操作尽量扁平化
注意事项
- v-html:可使用,但必须防范 XSS 风险
- props 解构:可以解构(需注意响应式丢失)
- 未使用变量:ESLint 已关闭检查,需自行清理无用代码
- 等于运算符:使用
==而不是===不属于问题,不报告此类问题
关键约束
- 脚本结构固定顺序:name → components → props → data → computed → watch → methods → 生命周期
- 代码风格:2 空格缩进、单引号、必须分号、120 字符行宽
- 网络请求必须 async/await + try/catch/finally
- 统一响应处理:
const {code, data, msg} = await apiXXX(); if (code === 0) {成功} else {this.$message.error(msg)} - 样式使用 BEM 规范 + scoped
- computed 规范:必须使用 try/catch 包裹,命名使用
is/has/visible等有意义名称 - Vue 元素特性顺序:is → v-for → v-if/v-else-if/v-else → v-show → id → props/attrs → v-on → v-html/v-text
- 组件传参要求:命名必须 camelCase,必须明确参数类型,必须添加含义注释
- 方法内部逻辑顺序:初始化方法 → 网络请求 → 事件处理 → 特殊计算
- emit 事件顺序:
this.$emit('input', 数据)→this.$emit('其它事件', 数据)→this.$emit('change/click', 数据) - 注释相关问题默认忽略,不进行检查
用户选项
此技能默认忽略注释相关问题。
工作流程
阶段一:检查目录范围与获取改动文件列表
- 首先检查项目是否存在 src 目录:
- 如果不存在,直接告诉用户:"当前项目不符合 Vue2 前端代码审核助手的目录要求,该技能仅支持包含 src 目录的前端项目,不触发审核流程。" 并终止执行
- 如果目录检查通过,使用 git 命令获取 src 目录下所有改动的文件:
git diff --name-only HEAD或者对于暂存的文件:git diff --cached --name-only - 过滤出
src目录下的文件(注意:仅处理 src 目录下的文件,其他目录的文件不参与审核)
- 如果过滤后没有符合条件的文件,告诉用户:"当前没有需要审核的文件(仅允许审核 src 目录下的改动文件),审核结束。" 并终止执行
阶段二:代码审核
对于每个改动的文件,按以下维度进行检查(详细规范见 references 目录):
- Vue2 组件规范 — 脚本结构顺序、元素特性顺序、Props 规范(命名 camelCase/类型明确/注释含义)、emit 事件(命名白名单 + input→其它→change/click 顺序)、生命周期 emit 限制
- 代码风格 — 缩进、引号、分号、导入顺序、Prettier 配置合规、等于运算符例外
- 命名规范 — API 函数、事件函数、常量、组件文件名
- 逻辑错误 — 空指针引用、数组越界、data/computed 使用、方法内部逻辑顺序
- 网络请求规范 — async/await、try/catch/finally、数据解构、统一响应处理模式
- computed 规范 — try/catch 包裹、命名使用 is / has / visible 等有意义名称
- 安全漏洞 — XSS 风险、敏感信息泄露、硬编码敏感信息
- 最佳实践 — 调试代码、scoped 样式、BEM 规范、函数 try/catch 推荐
- 绝对禁止项 — 见上方禁止项列表
阶段三:输出审核结果
如果发现问题,按照以下格式输出:
## 审核结果
### 文件: [filename]
发现以下问题:
1. **[严重/中等/轻微]** - [问题描述]
- 位置: [行号]
- 建议: [修复建议]阶段四:自动提交判断
- 统计审核结果:
- 如果没有发现问题 → 调用 commit 技能 - 如果只发现轻微问题(没有严重或中等问题)→ 调用 commit 技能 - 如果发现严重或中等问题 → 输出审核结果,等待用户修复后重新审核
- 调用 commit 技能时,输出以下信息:
## 审核结果 ✅ 代码审核通过!未发现严重或中等问题。 准备提交代码...然后使用 skill 工具调用yy-frontend-commit。
工具使用
- git:获取改动文件列表
- read:读取文件内容进行审核
- grep:搜索潜在问题
- edit:修复发现的 bug(仅当用户明确要求时)
开始对话
当用户启动此 skill 时,请按以下方式响应:
你好!我是 Vue2 前端代码审核助手 🔍
我将帮助你审核 src 目录下所有改动的文件:
1. 检查 Vue2 组件规范(脚本结构、元素特性顺序、Props 规范)
2. 检查代码风格与命名规范
3. 检查网络请求规范
4. 检查是否存在逻辑错误或安全漏洞
注意:仅审核 src 目录下的改动文件
让我先获取改动的文件列表...然后按照工作流程逐步执行审核。
Output contract
必需输出字段
- 状态:通过/有问题
- 问题列表:发现的问题(按严重程度分类)
- 建议:整体改进建议
问题结构
- 严重程度:严重/中等/轻微
- 问题类型:组件规范/代码风格/命名规范/逻辑错误/网络请求规范/安全漏洞/最佳实践/禁止项
- 问题描述:问题的详细描述
- 位置:文件路径:行号
- 修复建议:具体修复方案
输出格式
审核通过(自动触发提交)
## 审核结果
✅ 代码审核通过!未发现严重或中等问题。
### 审核统计
- 审核文件数:3
- 发现问题:0 个
准备提交代码...然后调用 yy-frontend-commit 技能。
发现问题
## 审核结果
⚠️ 发现 N 个问题,建议修复后重新审核。
### 问题统计
- 严重:1 个
- 中等:2 个
- 轻微:3 个
### 问题详情
#### src/views/UserList.vue
1. **严重 - 禁止项** - 直接修改 props
- 位置: 第 15 行
- 代码: `this.userName = 'new name'`
- 建议: 使用 emit 事件通知父组件 `this.$emit('input', 'new name')`
2. **中等 - 组件规范** - 脚本结构顺序错误
- 位置: 第 8-30 行
- 建议: 调整为 name → components → props → data → computed → watch → methods → 生命周期
3. **轻微 - 代码风格** - 导入顺序不规范
- 位置: 第 1-5 行
- 建议: 按外部依赖 → 全局 API → 全局工具 → Store → 常量 → 组件排序
#### src/api/user.ts
4. **严重 - 网络请求规范** - 未使用 async/await
- 位置: 第 34 行
- 代码: `apiGetUserInfo().then(res => { ... })`
- 建议: 改为 `const { code, data, msg } = await apiGetUserInfo()` 并使用 try/catch
### 修复建议
1. 优先修复严重问题
2. 中等问题影响代码健壮性,建议修复
3. 轻微问题可选择性修复参考文档
详细规范见 references 目录,审核时按需查阅: