让每一行新生成的代码,读起来像是原项目的作者自己写的。
生成代码前先建立"风格基准",再按基准约束输出——拒绝使用自己默认喜好覆盖项目已有约定。
如果用户提供了项目路径,立即运行扫描脚本:
python3 ~/.workbuddy/skills/code-style-consistency/scripts/scan_style.py <项目根目录>
脚本自动识别:
@/ 别名 vs 相对路径)如果用户没有提供项目路径,或需要补充机器无法识别的约定,参考 references/style-probe-questions.md 提问,最多问 5 个最重要的问题:
> 推荐优先确认的 5 项(快速最小集):
> 1. 组件写法(FC / Hooks / Class)
> 2. 样式方案(Tailwind / CSS Modules / styled-components)
> 3. 请求封装位置(src/api/ 还是直接 axios)
> 4. Props 类型定义方式(interface 还是 type)
> 5. Import 路径风格(@/ 还是 ../)
建立风格基准的最快途径:要求用户提供代表性参考文件。 参考 references/representative-code-guide.md 指导用户找到高价值参考文件(最频繁被引用的组件、最近修改的页面、API 层封装文件)。
在风格基准确定后,分析需求:
api/ 或 services/ 里的现有函数写法生成代码时,严格遵守风格基准。每写一个代码块,内心过一遍 references/pre-generation-checklist.md 的快速自检口诀:
看样式,看导入,看命名,看类型
看请求,看状态,看弹窗,看提示
看导出,看文件,看结构,再出去
强制约束规则(不可违背):
| 维度 | 约束 |
|---|---|
| ------ | ------ |
| UI 组件 | 只使用项目已安装的组件库,不引入新的 UI 库 |
| 样式方案 | 只使用项目已有的样式方案,不混用 |
| Import 路径 | 跟项目约定保持一致(别名 vs 相对路径) |
| 请求封装 | 调用项目封装好的 request 层,不直接使用 axios/fetch |
| 状态管理 | 使用项目现有 store 方案,不引入新的状态管理 |
| TypeScript | 严格程度跟项目 tsconfig 一致,不降低类型安全 |
| 命名 | 跟项目文件/函数/变量命名风格完全一致 |
| 注释 | 跟项目注释语言(中文/英文)和风格保持一致 |
用户说:"参考这个文件帮我实现 XXX"——这是最理想的情形。
直接问以下问题(不要超过 3 个,选最关键的):
> "为了让生成的代码和你的项目风格一致,我需要确认几个关键点:
> 1. 项目用什么 UI 组件库?(比如 Ant Design / MUI / Element Plus)
> 2. 样式方案是 Tailwind、CSS Modules 还是 styled-components?
> 3. 可以提供一个项目里类似功能的现有组件文件给我参考吗?"
// src/components/ProductCard/index.tsx)## 风格基准确认
**技术栈**:React 18 + TypeScript + Ant Design 5 + Tailwind CSS
**组件写法**:Function Component + Hooks(useState / useEffect / 自定义 hook)
**Props 定义**:`interface Props`(TypeScript strict 模式开启)
**样式方案**:Tailwind CSS,使用 `cn()` 合并条件类(tailwind-merge + clsx)
**Import 路径**:`@/` 别名(`@/components/`, `@/api/`, `@/hooks/`)
**请求封装**:`src/api/xxx.ts` → 调用 `src/utils/request.ts` 统一封装
**状态管理**:Zustand(全局)+ useState(本地)
**错误处理**:全局拦截器 + 业务层 `message.error()` 提示
**命名约定**:文件 PascalCase,函数 camelCase,API 函数前缀 get/create/update/delete
**注释语言**:中文注释为主
*以上基准来自:package.json + src/components/UserCard/index.tsx(参考文件)*
scripts/scan_style.py — 代码风格指纹自动扫描脚本(Step 1 首要工具)references/style-probe-questions.md — 风格探针问题清单(人工补充基准用)references/pre-generation-checklist.md — 代码输出前的一致性检查清单references/representative-code-guide.md — 如何找到项目最有代表性的参考文件> 实际使用中积累,格式:场景:经验要点
cn() 工具,很多项目引入了 tailwind-merge + clsx 封装的 cn(),不用这个就会破坏原有样式优先级逻辑antd,v4 某些组件从 @ant-design/icons 单独引入),混用会报错@/ 前缀,但无法确认别名是否在 tsconfig/vite.config 里实际配置了,修改前确认别名有效styles 对象 import 名不叫 styles,读文件时确认实际命名再使用共 1 个版本