name: writing-docs description: > 擅长编写代码、API和项目的高质量文档。在生成文档字符串、创建README文件、编写API文档、添加代码注释或制作任何技术文档时自动调用。提供特定语言的模板和最佳实践,以实现有效的文档编写。 allowed-tools: 读取,写入,编辑,全局搜索,文本搜索
编写文档技能
你是一个擅长编写软件项目清晰、全面且有用文档的专家。
此技能何时激活
此技能在以下情况下自动调用:
- 用户要求“为此函数/类/模块编写文档”
- 用户想要创建或更新README
- 用户需要JSDoc、文档字符串或代码注释
- 用户请求API文档
- 用户想要特定文件或代码库的文档
文档编写原则
核心原则
-
清晰胜于巧妙
- 使用简单直接的语言
- 尽可能避免行话
- 首次使用时定义技术术语
-
展示而不仅仅是告诉
- 包括工作代码示例
- 展示常见用例
- 显示预期输出
-
结构化扫描
- 使用清晰的标题
- 保持段落简短
- 使用列表显示多个项目
- 突出重要信息
-
为受众写作
- 考虑读者的专业水平
- 提供适当的上下文
- 需要时链接到先决条件
语言特定模板
JavaScript/TypeScript (JSDoc)
/**
* 函数所做的简短描述。
*
* 如果需要,提供更长的描述。解释目的、行为,
* 以及有关函数如何工作的任何重要细节。
*
* @param {string} name - 用户的显示名称
* @param {Object} options - 配置选项
* @param {boolean} [options.verbose=false] - 启用详细输出
* @param {number} [options.timeout=5000] - 毫秒为单位的超时
* @returns {Promise<User>} 创建的用户对象
* @throws {ValidationError} 当名称为空或无效时
* @throws {TimeoutError} 当操作超时时
*
* @example
* // 基本用法
* const user = await createUser('John Doe');
*
* @example
* // 带选项
* const user = await createUser('Jane', {
* verbose: true,
* timeout: 10000
* });
*
* @see {@link User} 用户对象结构
* @since 1.2.0
*/
Python (Google风格文档字符串)
def create_user(name: str, **options) -> User:
"""使用给定的名称创建一个新用户。
如果需要,提供更长的描述。解释目的、行为,
以及有关函数如何工作的任何重要细节。
参数:
name: 用户的显示名称。必须非空。
**options: 可选关键字参数。
verbose (bool): 启用详细输出。默认为False。
timeout (int): 毫秒为单位的超时。默认为5000。
返回:
User: 已创建的用户对象,字段已填充。
引发:
ValidationError: 当名称为空或无效时。
TimeoutError: 当操作超时时。
示例:
基本用法::
user = create_user('John Doe')
带选项::
user = create_user('Jane', verbose=True, timeout=10000)
注意:
用户在调用 `user.save()` 之前不会被持久化。
另请参阅:
User: 用户对象类。
"""
Go
// CreateUser 创建一个新用户。
//
// CreateUser 验证名称,用默认值初始化User结构,并返回新用户的指针。用户在调用Save()之前不会被持久化
// 到数据库。
//
// 参数:
// - name: 用户的显示名称。必须是非空字符串。
// - opts: 可选配置。见UserOptions了解可用选项。
//
// 返回创建的User指针和遇到的任何错误。
//
// 示例:
//
// user, err := CreateUser("John Doe", nil)
// if err != nil {
// log.Fatal(err)
// }
//
// 错误:
// - ErrEmptyName: 当名称为空时返回
// - ErrInvalidName: 当名称包含无效字符时返回
func CreateUser(name string, opts *UserOptions) (*User, error) {
Rust
/// 使用给定的名称创建一个新用户。
///
/// 这个函数验证名称,用默认值初始化User结构,并返回新用户。用户在调用[`User::save`]之前不会被持久化到
/// 数据库。
///
/// # 参数
///
/// * `name` - 用户的显示名称。必须非空。
/// * `options` - 可选配置设置。
///
/// # 返回
///
/// 成功时返回 `Ok(User)`,如果验证失败则返回错误。
///
/// # 错误
///
/// * [`UserError::EmptyName`] - 如果 `name` 为空。
/// * [`UserError::InvalidName`] - 如果 `name` 包含无效字符。
///
/// # 示例
///
/// 基本用法:
///
/// ```
/// let user = create_user("John Doe", None)?;
/// ```
///
/// 带选项:
///
/// ```
/// let opts = UserOptions { verbose: true, ..Default::default() };
/// let user = create_user("Jane", Some(opts))?;
/// ```
///
/// # 恐慌
///
/// 此函数在正常情况下不会引发恐慌。
README模板
# 项目名称
这个项目的作用和存在的原因的简要描述。
## 特性
- 特性1: 简要描述
- 特性2: 简要描述
- 特性3: 简要描述
## 安装
### 先决条件
- 需求1 (版本X.X+)
- 需求2
### 通过[包管理器]安装
\`\`\`bash
npm install 项目名称
# 或
pip install 项目名称
\`\`\`
### 从源代码安装
\`\`\`bash
git clone https://github.com/user/项目名称
cd 项目名称
npm install
\`\`\`
## 快速开始
\`\`\`javascript
import { Project } from '项目名称';
const project = new Project();
project.doSomething();
\`\`\`
## 使用方法
### 基本示例
\`\`\`javascript
// 代码示例及注释
\`\`\`
### 高级用法
\`\`\`javascript
// 更复杂的示例
\`\`\`
## API参考
### `functionName(param1, param2)`
函数描述。
**参数:**
- `param1` (类型): 描述
- `param2` (类型, 可选): 描述。默认值:`value`
**返回:** 类型 - 描述
**示例:**
\`\`\`javascript
const result = functionName('value', { option: true });
\`\`\`
## 配置
| 选项 | 类型 | 默认值 | 描述 |
|--------|------|---------|-------------|
| `option1` | 字符串 | `"default"` | 描述 |
| `option2` | 数字 | `10` | 描述 |
## 贡献
1. Fork仓库
2. 创建你的功能分支(`git checkout -b feature/amazing`)
3. 提交你的更改(`git commit -m 'Add amazing feature'`)
4. 推送到分支(`git push origin feature/amazing`)
5. 打开Pull Request
## 许可证
[许可证类型] - 详见[LICENSE](LICENSE)。
写作指南
函数文档
始终包括:
- 简短描述(第一行)
- 参数描述及类型
- 返回值描述
- 可能的错误/异常
- 至少一个示例
在相关时包括:
- 副作用
- 性能考虑
- 线程安全说明
- 弃用通知
- 相关函数的链接
类文档
始终包括:
- 类的目的和责任
- 构造函数文档
- 公共方法文档
- 重要属性
在相关时包括:
- 继承关系
- 接口实现
- 状态管理说明
- 生命周期信息
模块/文件文档
始终包括:
- 模块目的
- 主要导出
- 使用概览
在相关时包括:
- 依赖关系
- 配置要求
- 架构说明
常见模式
记录选项对象
/**
* @typedef {Object} CreateUserOptions
* @property {boolean} [verbose=false] - 启用详细日志记录
* @property {number} [timeout=5000] - 操作超时时间,单位为毫秒
* @property {string} [role='user'] - 初始用户角色
*/
/**
* 使用指定的选项创建用户。
* @param {string} name - 用户名
* @param {CreateUserOptions} [options] - 配置选项
*/
记录回调
/**
* @callback UserCallback
* @param {Error|null} error - 如果操作失败,则为错误
* @param {User} user - 如果成功,则为用户对象
*/
/**
* 异步获取用户。
* @param {string} id - 用户ID
* @param {UserCallback} callback - 用结果调用
*/
记录泛型
/**
* 泛型结果包装器。
* @template T - 成功值的类型
* @template E - 错误值的类型
*/
interface Result<T, E> {
/** 操作是否成功 */
success: boolean;
/** 如果成功,则为成功值 */
value?: T;
/** 如果失败,则为错误值 */
error?: E;
}
质量清单
在最终确定文档之前,请验证:
- [ ] 第一行是一个清晰、简洁的摘要
- [ ] 所有参数都已用类型记录
- [ ] 返回值已记录
- [ ] 错误/异常已记录
- [ ] 至少包括一个工作示例
- [ ] 示例代码经过测试且正确
- [ ] 语言清晰,语法正确
- [ ] 格式与代码库风格一致
- [ ] 包括相关文档的链接
- [ ] 边缘情况和限制已注明
集成
此技能与以下技能一起工作:
- analyzing-docs 技能,用于确定需要哪些文档
- managing-docs 技能,用于组织文档结构
- docs-analyzer 代理,用于全面的文档项目