mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-06-12 11:13:11 +08:00
docs(zh-CN): add Chinese translation of SKILL-DEVELOPMENT-GUIDE (#2200)
* docs(zh-CN): add Chinese translation of SKILL-DEVELOPMENT-GUIDE Translate the comprehensive Skill Development Guide to Chinese, enabling Chinese-speaking contributors to learn how to create effective ECC skills. * fix(docs): correct all relative links in zh-CN translation Fix CONTRIBUTING.md link to zh-CN local copy, and skills links to point to repo-root skills/ directory instead of non-existent docs/skills/. --------- Co-authored-by: lege962 <1515808962@qq.com> Co-authored-by: legeZZZ <277193585+legeZZZ@users.noreply.github.com>
This commit is contained in:
919
docs/zh-CN/SKILL-DEVELOPMENT-GUIDE.md
Normal file
919
docs/zh-CN/SKILL-DEVELOPMENT-GUIDE.md
Normal file
@@ -0,0 +1,919 @@
|
||||
# Skill 开发指南
|
||||
|
||||
一份为 Everything Claude Code (ECC) 创建有效 Skill 的全面指南。
|
||||
|
||||
## 目录
|
||||
|
||||
- [什么是 Skill?](#什么是-skill)
|
||||
- [Skill 架构](#skill-架构)
|
||||
- [创建你的第一个 Skill](#创建你的第一个-skill)
|
||||
- [Skill 分类](#skill-分类)
|
||||
- [编写有效的 Skill 内容](#编写有效的-skill-内容)
|
||||
- [最佳实践](#最佳实践)
|
||||
- [常见模式](#常见模式)
|
||||
- [测试你的 Skill](#测试你的-skill)
|
||||
- [提交你的 Skill](#提交你的-skill)
|
||||
- [示例集锦](#示例集锦)
|
||||
|
||||
---
|
||||
|
||||
## 什么是 Skill?
|
||||
|
||||
Skill 是 **知识模块**,Claude Code 根据上下文自动加载。它们提供:
|
||||
|
||||
- **领域专业知识**:框架模式、语言习惯用法、最佳实践
|
||||
- **工作流定义**:常见任务的分步流程
|
||||
- **参考资料**:代码片段、检查清单、决策树
|
||||
- **上下文注入**:当特定条件满足时激活
|
||||
|
||||
与 **Agent**(专业子助手)或 **Command**(用户触发的操作)不同,Skill 是被动知识,Claude Code 在相关时自动引用。
|
||||
|
||||
### Skill 何时激活
|
||||
|
||||
Skill 在以下情况激活:
|
||||
- 用户任务与 Skill 的领域匹配
|
||||
- Claude Code 检测到相关上下文
|
||||
- 某个命令引用了该 Skill
|
||||
- 某个 Agent 需要领域知识
|
||||
|
||||
### Skill vs Agent vs Command
|
||||
|
||||
| 组件 | 用途 | 激活方式 |
|
||||
|-----------|---------|------------|
|
||||
| **Skill** | 知识库 | 基于上下文(自动) |
|
||||
| **Agent** | 任务执行器 | 显式委派 |
|
||||
| **Command** | 用户操作 | 用户调用(`/command`) |
|
||||
| **Hook** | 自动化 | 事件触发 |
|
||||
| **Rule** | 始终生效的指南 | 始终激活 |
|
||||
|
||||
---
|
||||
|
||||
## Skill 架构
|
||||
|
||||
### 文件结构
|
||||
|
||||
```
|
||||
skills/
|
||||
└── your-skill-name/
|
||||
├── SKILL.md # 必需:Skill 主定义文件
|
||||
├── examples/ # 可选:代码示例
|
||||
│ ├── basic.ts
|
||||
│ └── advanced.ts
|
||||
└── references/ # 可选:外部参考
|
||||
└── links.md
|
||||
```
|
||||
|
||||
### SKILL.md 格式
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: skill-name
|
||||
description: 在 Skill 列表中显示的简要描述,用于自动激活匹配
|
||||
origin: ECC
|
||||
---
|
||||
|
||||
# Skill 标题
|
||||
|
||||
简要概述此 Skill 涵盖的内容。
|
||||
|
||||
## 何时激活
|
||||
|
||||
描述 Claude 应在什么场景下使用此 Skill。
|
||||
|
||||
## 核心概念
|
||||
|
||||
主要模式和指南。
|
||||
|
||||
## 代码示例
|
||||
|
||||
\`\`\`typescript
|
||||
// 实用、经过测试的示例
|
||||
\`\`\`
|
||||
|
||||
## 反模式
|
||||
|
||||
用具体示例展示不应该做的事。
|
||||
|
||||
## 最佳实践
|
||||
|
||||
- 可操作的指南
|
||||
- 该做的和不该做的
|
||||
|
||||
## 相关 Skill
|
||||
|
||||
链接到互补的 Skill。
|
||||
```
|
||||
|
||||
### YAML Frontmatter 字段
|
||||
|
||||
| 字段 | 必需 | 描述 |
|
||||
|-------|----------|-------------|
|
||||
| `name` | 是 | 小写、连字符连接的标识符(如 `react-patterns`) |
|
||||
| `description` | 是 | 单行描述,用于 Skill 列表和自动激活 |
|
||||
| `origin` | 否 | 来源标识符(如 `ECC`、`community`、项目名) |
|
||||
| `tags` | 否 | 分类标签数组 |
|
||||
| `version` | 否 | Skill 版本号,用于跟踪更新 |
|
||||
|
||||
---
|
||||
|
||||
## 创建你的第一个 Skill
|
||||
|
||||
### 第1步:选择焦点
|
||||
|
||||
好的 Skill 是 **聚焦且可操作的**:
|
||||
|
||||
| 通过:好的焦点 | 不通过:太宽泛 |
|
||||
|---------------|--------------|
|
||||
| `react-hook-patterns` | `react` |
|
||||
| `postgresql-indexing` | `databases` |
|
||||
| `pytest-fixtures` | `python-testing` |
|
||||
| `nextjs-app-router` | `nextjs` |
|
||||
|
||||
### 第2步:创建目录
|
||||
|
||||
```bash
|
||||
mkdir -p skills/your-skill-name
|
||||
```
|
||||
|
||||
### 第3步:编写 SKILL.md
|
||||
|
||||
以下是一个最小模板:
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: your-skill-name
|
||||
description: 简要描述何时使用此 Skill
|
||||
---
|
||||
|
||||
# 你的 Skill 标题
|
||||
|
||||
简要概述(1-2句话)。
|
||||
|
||||
## 何时激活
|
||||
|
||||
- 场景1
|
||||
- 场景2
|
||||
- 场景3
|
||||
|
||||
## 核心概念
|
||||
|
||||
### 概念1
|
||||
|
||||
带示例的解释。
|
||||
|
||||
### 概念2
|
||||
|
||||
带代码的另一种模式。
|
||||
|
||||
## 代码示例
|
||||
|
||||
\`\`\`typescript
|
||||
// 实用示例
|
||||
\`\`\`
|
||||
|
||||
## 最佳实践
|
||||
|
||||
- 做这个
|
||||
- 避免那个
|
||||
|
||||
## 相关 Skill
|
||||
|
||||
- `related-skill-1`
|
||||
- `related-skill-2`
|
||||
```
|
||||
|
||||
### 第4步:添加内容
|
||||
|
||||
编写 Claude 可以 **立即使用** 的内容:
|
||||
|
||||
- 通过:可直接复制粘贴的代码示例
|
||||
- 通过:清晰的决策树
|
||||
- 通过:用于验证的检查清单
|
||||
- 不通过:没有示例的模糊解释
|
||||
- 不通过:没有可操作指导的长篇叙述
|
||||
|
||||
---
|
||||
|
||||
## Skill 分类
|
||||
|
||||
### 语言标准
|
||||
|
||||
聚焦于习惯用法、命名约定和语言特定模式。
|
||||
|
||||
**示例:** `python-patterns`、`golang-patterns`、`typescript-standards`
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: python-patterns
|
||||
description: Python 习惯用法、最佳实践和模式,用于编写清晰、地道的代码。
|
||||
---
|
||||
|
||||
# Python 模式
|
||||
|
||||
## 何时激活
|
||||
|
||||
- 编写 Python 代码
|
||||
- 重构 Python 模块
|
||||
- Python 代码审查
|
||||
|
||||
## 核心概念
|
||||
|
||||
### 上下文管理器
|
||||
|
||||
\`\`\`python
|
||||
# 始终使用上下文管理器管理资源
|
||||
with open('file.txt') as f:
|
||||
content = f.read()
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
### 框架模式
|
||||
|
||||
聚焦于框架特定约定、常见模式和反模式。
|
||||
|
||||
**示例:** `django-patterns`、`nextjs-patterns`、`springboot-patterns`
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: django-patterns
|
||||
description: Django 模型、视图、URL 和模板的最佳实践。
|
||||
---
|
||||
|
||||
# Django 模式
|
||||
|
||||
## 何时激活
|
||||
|
||||
- 构建 Django 应用
|
||||
- 创建模型和视图
|
||||
- Django URL 配置
|
||||
```
|
||||
|
||||
### 工作流 Skill
|
||||
|
||||
定义常见开发任务的分步流程。
|
||||
|
||||
**示例:** `tdd-workflow`、`code-review-workflow`、`deployment-checklist`
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: code-review-workflow
|
||||
description: 确保质量和安全的系统化代码审查流程。
|
||||
---
|
||||
|
||||
# 代码审查工作流
|
||||
|
||||
## 步骤
|
||||
|
||||
1. **理解上下文** - 阅读 PR 描述和关联 Issue
|
||||
2. **检查测试** - 验证测试覆盖率和质量
|
||||
3. **审查逻辑** - 分析实现的正确性
|
||||
4. **检查安全** - 查找漏洞
|
||||
5. **验证风格** - 确保代码遵循约定
|
||||
```
|
||||
|
||||
### 领域知识
|
||||
|
||||
特定领域的专业知识(安全、性能等)。
|
||||
|
||||
**示例:** `security-review`、`performance-optimization`、`api-design`
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: api-design
|
||||
description: REST 和 GraphQL API 设计模式、版本控制和最佳实践。
|
||||
---
|
||||
|
||||
# API 设计模式
|
||||
|
||||
## RESTful 约定
|
||||
|
||||
| 方法 | 端点 | 用途 |
|
||||
|--------|----------|---------|
|
||||
| GET | /resources | 列表全部 |
|
||||
| GET | /resources/:id | 获取单个 |
|
||||
| POST | /resources | 创建 |
|
||||
```
|
||||
|
||||
### 工具集成
|
||||
|
||||
使用特定工具、库或服务的指导。
|
||||
|
||||
**示例:** `supabase-patterns`、`docker-patterns`、`mcp-server-patterns`
|
||||
|
||||
---
|
||||
|
||||
## 编写有效的 Skill 内容
|
||||
|
||||
### 1. 从"何时激活"开始
|
||||
|
||||
这一节对于自动激活 **至关重要**。要具体:
|
||||
|
||||
```markdown
|
||||
## 何时激活
|
||||
|
||||
- 创建新的 React 组件
|
||||
- 重构现有组件
|
||||
- 调试 React 状态问题
|
||||
- 审查 React 代码的最佳实践
|
||||
```
|
||||
|
||||
### 2. 使用"展示,而非说教"
|
||||
|
||||
差:
|
||||
```markdown
|
||||
## 错误处理
|
||||
|
||||
在异步函数中始终正确处理错误。
|
||||
```
|
||||
|
||||
好:
|
||||
```markdown
|
||||
## 错误处理
|
||||
|
||||
\`\`\`typescript
|
||||
async function fetchData(url: string) {
|
||||
try {
|
||||
const response = await fetch(url)
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(\`HTTP \${response.status}: \${response.statusText}\`)
|
||||
}
|
||||
|
||||
return await response.json()
|
||||
} catch (error) {
|
||||
console.error('获取失败:', error)
|
||||
throw new Error('获取数据失败')
|
||||
}
|
||||
}
|
||||
\`\`\`
|
||||
|
||||
### 要点
|
||||
|
||||
- 解析前先检查 \`response.ok\`
|
||||
- 记录错误以便调试
|
||||
- 重新抛出错时使用用户友好的消息
|
||||
```
|
||||
|
||||
### 3. 包含反模式
|
||||
|
||||
展示不应该做什么:
|
||||
|
||||
```markdown
|
||||
## 反模式
|
||||
|
||||
### 失败:直接修改状态
|
||||
|
||||
\`\`\`typescript
|
||||
// 绝不要这样做
|
||||
user.name = 'New Name'
|
||||
items.push(newItem)
|
||||
\`\`\`
|
||||
|
||||
### 通过:不可变更新
|
||||
|
||||
\`\`\`typescript
|
||||
// 始终这样做
|
||||
const updatedUser = { ...user, name: 'New Name' }
|
||||
const updatedItems = [...items, newItem]
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
### 4. 提供检查清单
|
||||
|
||||
检查清单具有可操作性,易于遵循:
|
||||
|
||||
```markdown
|
||||
## 部署前检查清单
|
||||
|
||||
- [ ] 所有测试通过
|
||||
- [ ] 生产代码中无 console.log
|
||||
- [ ] 环境变量已文档化
|
||||
- [ ] 无硬编码的密钥
|
||||
- [ ] 错误处理完整
|
||||
- [ ] 输入验证到位
|
||||
```
|
||||
|
||||
### 5. 使用决策树
|
||||
|
||||
用于复杂决策:
|
||||
|
||||
```markdown
|
||||
## 选择正确方案
|
||||
|
||||
\`\`\`
|
||||
需要获取数据?
|
||||
├── 单次请求 → 直接使用 fetch
|
||||
├── 多个独立请求 → Promise.all()
|
||||
├── 多个依赖请求 → 依次 await
|
||||
└── 带缓存 → 使用 SWR 或 React Query
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 最佳实践
|
||||
|
||||
### 应该做
|
||||
|
||||
| 实践 | 示例 |
|
||||
|----------|---------|
|
||||
| **具体明确** | "对传递给子组件的事件处理函数使用 `useCallback`" |
|
||||
| **展示示例** | 包含可复制粘贴的代码 |
|
||||
| **解释为什么** | "不可变性防止了 React 状态中的意外副作用" |
|
||||
| **链接相关 Skill** | "另见:`react-performance`" |
|
||||
| **保持聚焦** | 一个 Skill = 一个领域/概念 |
|
||||
| **使用章节** | 清晰的标题便于快速浏览 |
|
||||
|
||||
### 不应该做
|
||||
|
||||
| 实践 | 为什么不好 |
|
||||
|----------|--------------|
|
||||
| **模糊不清** | "写好代码"——不可操作 |
|
||||
| **长篇叙述** | 难以解析,代码更好 |
|
||||
| **覆盖过广** | "Python、Django 和 Flask 模式"——太宽泛 |
|
||||
| **跳过示例** | 没有实践的理论用处不大 |
|
||||
| **忽略反模式** | 学会不该做什么也很有价值 |
|
||||
|
||||
### 内容指南
|
||||
|
||||
1. **长度**:通常 200-500 行,最多 800 行
|
||||
2. **代码块**:包含语言标识符
|
||||
3. **标题**:使用 `##` 和 `###` 层级结构
|
||||
4. **列表**:无序用 `-`,有序用 `1.`
|
||||
5. **表格**:用于对比和参考
|
||||
|
||||
---
|
||||
|
||||
## 常见模式
|
||||
|
||||
### 模式1:标准 Skill
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: language-standards
|
||||
description: [语言]的编码标准和最佳实践。
|
||||
---
|
||||
|
||||
# [语言] 编码标准
|
||||
|
||||
## 何时激活
|
||||
|
||||
- 编写 [语言] 代码
|
||||
- 代码审查
|
||||
- 设置代码检查工具
|
||||
|
||||
## 命名约定
|
||||
|
||||
| 元素 | 约定 | 示例 |
|
||||
|---------|------------|---------|
|
||||
| 变量 | camelCase | userName |
|
||||
| 常量 | SCREAMING_SNAKE | MAX_RETRY |
|
||||
| 函数 | camelCase | fetchUser |
|
||||
| 类 | PascalCase | UserService |
|
||||
|
||||
## 代码示例
|
||||
|
||||
[包含实用示例]
|
||||
|
||||
## 代码检查设置
|
||||
|
||||
[包含配置]
|
||||
|
||||
## 相关 Skill
|
||||
|
||||
- `language-testing`
|
||||
- `language-security`
|
||||
```
|
||||
|
||||
### 模式2:工作流 Skill
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: task-workflow
|
||||
description: [任务]的分步工作流。
|
||||
---
|
||||
|
||||
# [任务] 工作流
|
||||
|
||||
## 何时激活
|
||||
|
||||
- [触发条件1]
|
||||
- [触发条件2]
|
||||
|
||||
## 前置条件
|
||||
|
||||
- [要求1]
|
||||
- [要求2]
|
||||
|
||||
## 步骤
|
||||
|
||||
### 步骤1:[名称]
|
||||
|
||||
[描述]
|
||||
|
||||
\`\`\`bash
|
||||
[命令]
|
||||
\`\`\`
|
||||
|
||||
### 步骤2:[名称]
|
||||
|
||||
[描述]
|
||||
|
||||
## 验证
|
||||
|
||||
- [ ] [检查1]
|
||||
- [ ] [检查2]
|
||||
|
||||
## 故障排除
|
||||
|
||||
| 问题 | 解决方案 |
|
||||
|---------|----------|
|
||||
| [问题] | [修复] |
|
||||
```
|
||||
|
||||
### 模式3:参考 Skill
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: api-reference
|
||||
description: [API/库]的快速参考。
|
||||
---
|
||||
|
||||
# [API/库] 参考
|
||||
|
||||
## 何时激活
|
||||
|
||||
- 使用 [API/库]
|
||||
- 查阅 [API/库] 语法
|
||||
|
||||
## 常见操作
|
||||
|
||||
### 操作1
|
||||
|
||||
\`\`\`typescript
|
||||
// 基本用法
|
||||
\`\`\`
|
||||
|
||||
### 操作2
|
||||
|
||||
\`\`\`typescript
|
||||
// 高级用法
|
||||
\`\`\`
|
||||
|
||||
## 配置
|
||||
|
||||
[包含配置示例]
|
||||
|
||||
## 错误处理
|
||||
|
||||
[包含错误模式]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 测试你的 Skill
|
||||
|
||||
### 本地测试
|
||||
|
||||
1. **复制到 Claude Code skills 目录**:
|
||||
```bash
|
||||
cp -r skills/your-skill-name ~/.claude/skills/
|
||||
```
|
||||
|
||||
2. **用 Claude Code 测试**:
|
||||
```
|
||||
你:"我需要 [应该触发你的 Skill 的任务]"
|
||||
|
||||
Claude 应该引用你的 Skill 的模式。
|
||||
```
|
||||
|
||||
3. **验证激活**:
|
||||
- 让 Claude 解释你的 Skill 中的一个概念
|
||||
- 检查它是否使用了你的示例和模式
|
||||
- 确保它遵循了你的指南
|
||||
|
||||
### 验证检查清单
|
||||
|
||||
- [ ] **YAML frontmatter 有效** - 无语法错误
|
||||
- [ ] **名称遵循约定** - 小写字母加连字符
|
||||
- [ ] **描述清晰** - 告诉何时使用
|
||||
- [ ] **示例有效** - 代码可以编译和运行
|
||||
- [ ] **链接有效** - 相关 Skill 存在
|
||||
- [ ] **无敏感数据** - 无 API 密钥、令牌、路径
|
||||
|
||||
### 代码示例测试
|
||||
|
||||
测试所有代码示例:
|
||||
|
||||
```bash
|
||||
# 从仓库根目录
|
||||
npx tsc --noEmit skills/your-skill-name/examples/*.ts
|
||||
|
||||
# 或从 Skill 目录内部
|
||||
npx tsc --noEmit examples/*.ts
|
||||
|
||||
# 从仓库根目录
|
||||
python -m py_compile skills/your-skill-name/examples/*.py
|
||||
|
||||
# 或从 Skill 目录内部
|
||||
python -m py_compile examples/*.py
|
||||
|
||||
# 从仓库根目录
|
||||
go build ./skills/your-skill-name/examples/...
|
||||
|
||||
# 或从 Skill 目录内部
|
||||
go build ./examples/...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 提交你的 Skill
|
||||
|
||||
### 1. Fork 并 Clone
|
||||
|
||||
```bash
|
||||
gh repo fork affaan-m/everything-claude-code --clone
|
||||
cd everything-claude-code
|
||||
```
|
||||
|
||||
### 2. 创建分支
|
||||
|
||||
```bash
|
||||
git checkout -b feat/skill-your-skill-name
|
||||
```
|
||||
|
||||
### 3. 添加你的 Skill
|
||||
|
||||
```bash
|
||||
mkdir -p skills/your-skill-name
|
||||
# 创建 SKILL.md
|
||||
```
|
||||
|
||||
### 4. 验证
|
||||
|
||||
```bash
|
||||
# 检查 YAML frontmatter
|
||||
head -10 skills/your-skill-name/SKILL.md
|
||||
|
||||
# 验证结构
|
||||
ls -la skills/your-skill-name/
|
||||
|
||||
# 如果有测试,运行测试
|
||||
npm test
|
||||
```
|
||||
|
||||
### 5. 提交并推送
|
||||
|
||||
```bash
|
||||
git add skills/your-skill-name/
|
||||
git commit -m "feat(skills): add your-skill-name skill"
|
||||
git push -u origin feat/skill-your-skill-name
|
||||
```
|
||||
|
||||
### 6. 创建 Pull Request
|
||||
|
||||
使用此 PR 模板:
|
||||
|
||||
```markdown
|
||||
## Summary
|
||||
|
||||
简要描述 Skill 及其价值。
|
||||
|
||||
## Skill Type
|
||||
|
||||
- [ ] 语言标准
|
||||
- [ ] 框架模式
|
||||
- [ ] 工作流
|
||||
- [ ] 领域知识
|
||||
- [ ] 工具集成
|
||||
|
||||
## Testing
|
||||
|
||||
我是如何在本地测试此 Skill 的。
|
||||
|
||||
## Checklist
|
||||
|
||||
- [ ] YAML frontmatter 有效
|
||||
- [ ] 代码示例已测试
|
||||
- [ ] 遵循 Skill 编写指南
|
||||
- [ ] 无敏感数据
|
||||
- [ ] 激活触发器清晰
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 示例集锦
|
||||
|
||||
### 示例1:语言标准
|
||||
|
||||
**文件:** `skills/rust-patterns/SKILL.md`
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: rust-patterns
|
||||
description: Rust 习惯用法、所有权模式和最佳实践,用于编写安全、地道的代码。
|
||||
origin: ECC
|
||||
---
|
||||
|
||||
# Rust 模式
|
||||
|
||||
## 何时激活
|
||||
|
||||
- 编写 Rust 代码
|
||||
- 处理所有权和借用
|
||||
- 使用 Result/Option 进行错误处理
|
||||
- 实现 trait
|
||||
|
||||
## 所有权模式
|
||||
|
||||
### 借用规则
|
||||
|
||||
\`\`\`rust
|
||||
// 通过:正确:当不需要所有权时使用借用
|
||||
fn process_data(data: &str) -> usize {
|
||||
data.len()
|
||||
}
|
||||
|
||||
// 通过:正确:当需要修改或消耗时获取所有权
|
||||
fn consume_data(data: Vec<u8>) -> String {
|
||||
String::from_utf8(data).unwrap()
|
||||
}
|
||||
\`\`\`
|
||||
|
||||
## 错误处理
|
||||
|
||||
### Result 模式
|
||||
|
||||
\`\`\`rust
|
||||
use thiserror::Error;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
pub enum AppError {
|
||||
#[error("IO 错误: {0}")]
|
||||
Io(#[from] std::io::Error),
|
||||
|
||||
#[error("解析错误: {0}")]
|
||||
Parse(#[from] std::num::ParseIntError),
|
||||
}
|
||||
|
||||
pub type AppResult<T> = Result<T, AppError>;
|
||||
\`\`\`
|
||||
|
||||
## 相关 Skill
|
||||
|
||||
- `rust-testing`
|
||||
- `rust-security`
|
||||
```
|
||||
|
||||
### 示例2:框架模式
|
||||
|
||||
**文件:** `skills/fastapi-patterns/SKILL.md`
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: fastapi-patterns
|
||||
description: FastAPI 路由、依赖注入、验证和异步操作的模式。
|
||||
origin: ECC
|
||||
---
|
||||
|
||||
# FastAPI 模式
|
||||
|
||||
## 何时激活
|
||||
|
||||
- 构建 FastAPI 应用
|
||||
- 创建 API 端点
|
||||
- 实现依赖注入
|
||||
- 处理异步数据库操作
|
||||
|
||||
## 项目结构
|
||||
|
||||
\`\`\`
|
||||
app/
|
||||
├── main.py # FastAPI 应用入口
|
||||
├── routers/ # 路由处理器
|
||||
│ ├── users.py
|
||||
│ └── items.py
|
||||
├── models/ # Pydantic 模型
|
||||
│ ├── user.py
|
||||
│ └── item.py
|
||||
├── services/ # 业务逻辑
|
||||
│ └── user_service.py
|
||||
└── dependencies.py # 共享依赖
|
||||
\`\`\`
|
||||
|
||||
## 依赖注入
|
||||
|
||||
\`\`\`python
|
||||
from fastapi import Depends
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
async def get_db() -> AsyncSession:
|
||||
async with AsyncSessionLocal() as session:
|
||||
yield session
|
||||
|
||||
@router.get("/users/{user_id}")
|
||||
async def get_user(
|
||||
user_id: int,
|
||||
db: AsyncSession = Depends(get_db)
|
||||
):
|
||||
# 使用 db session
|
||||
pass
|
||||
\`\`\`
|
||||
|
||||
## 相关 Skill
|
||||
|
||||
- `python-patterns`
|
||||
- `pydantic-validation`
|
||||
```
|
||||
|
||||
### 示例3:工作流 Skill
|
||||
|
||||
**文件:** `skills/refactoring-workflow/SKILL.md`
|
||||
|
||||
```markdown
|
||||
---
|
||||
name: refactoring-workflow
|
||||
description: 在不改变行为的前提下改善代码质量的系统化重构工作流。
|
||||
origin: ECC
|
||||
---
|
||||
|
||||
# 重构工作流
|
||||
|
||||
## 何时激活
|
||||
|
||||
- 改善代码结构
|
||||
- 减少技术债务
|
||||
- 简化复杂代码
|
||||
- 提取可复用组件
|
||||
|
||||
## 前置条件
|
||||
|
||||
- 所有测试通过
|
||||
- Git 工作目录干净
|
||||
- 已创建功能分支
|
||||
|
||||
## 工作流步骤
|
||||
|
||||
### 步骤1:确定重构目标
|
||||
|
||||
- 查找代码坏味道(长方法、重复代码、大类)
|
||||
- 检查目标区域的测试覆盖率
|
||||
- 记录当前行为
|
||||
|
||||
### 步骤2:确保测试存在
|
||||
|
||||
\`\`\`bash
|
||||
# 运行测试验证当前行为
|
||||
npm test
|
||||
|
||||
# 检查目标文件的覆盖率
|
||||
npm run test:coverage
|
||||
\`\`\`
|
||||
|
||||
### 步骤3:小步修改
|
||||
|
||||
- 一次只做一项重构
|
||||
- 每次修改后运行测试
|
||||
- 频繁提交
|
||||
|
||||
### 步骤4:验证行为未变
|
||||
|
||||
\`\`\`bash
|
||||
# 运行完整测试套件
|
||||
npm test
|
||||
|
||||
# 运行 E2E 测试
|
||||
npm run test:e2e
|
||||
\`\`\`
|
||||
|
||||
## 常见重构
|
||||
|
||||
| 坏味道 | 重构方法 |
|
||||
|-------|-------------|
|
||||
| 长方法 | 提取方法 |
|
||||
| 重复代码 | 提取为共享函数 |
|
||||
| 大类 | 提取类 |
|
||||
| 长参数列表 | 引入参数对象 |
|
||||
|
||||
## 检查清单
|
||||
|
||||
- [ ] 目标代码有测试覆盖
|
||||
- [ ] 进行了小步、聚焦的修改
|
||||
- [ ] 每次修改后测试通过
|
||||
- [ ] 行为未改变
|
||||
- [ ] 使用清晰的消息提交
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 其他资源
|
||||
|
||||
- [CONTRIBUTING.md](CONTRIBUTING.md) - 通用贡献指南
|
||||
- [project-guidelines-template](../examples/project-guidelines-template.md) - 项目专属 Skill 模板
|
||||
- [coding-standards](../../skills/coding-standards/SKILL.md) - 标准 Skill 示例
|
||||
- [tdd-workflow](../../skills/tdd-workflow/SKILL.md) - 工作流 Skill 示例
|
||||
- [security-review](../../skills/security-review/SKILL.md) - 领域知识 Skill 示例
|
||||
|
||||
---
|
||||
|
||||
**记住**:好的 Skill 是聚焦的、可操作的、立即可用的。写你自己也想用的 Skill。
|
||||
Reference in New Issue
Block a user