Files
gh-wasabeef-claude-code-coo…/commands/update-doc-string.md
2025-11-30 09:05:49 +08:00

307 lines
8.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 更新文檔字符串
系統地管理多語言的 docstring/注釋,維護高質量的文檔。
### 使用方法
```bash
# 自動檢測語言並執行
「為没有 docstring 的類和函數添加注釋,並更新不符合標準的注釋」
# 指定語言執行
/update-doc-string --lang python
「按照 PEP 257 規範更新 Python 文件的 docstring」
# 特定目錄的文檔整理
「為 src/components/ 下的函數添加 JSDoc」
```
### 選項
- `--lang <en|zh-tw>` : 文檔記述語言 (默認:從現有注釋自動判定,無則為 en)
- `--style <風格>` : 指定文檔風格 (有語言特定的默認值)
- `--marker <true|false>` : 是否添加 Claude 標記 (默認true)
### 基本示例
```bash
# 1. 分析目標文件 (自動檢測編程語言)
find . -type f \( -name "*.py" -o -name "*.js" -o -name "*.ts" -o -name "*.dart" -o -name "*.go" -o -name "*.rs" \) | grep -v test
「識別缺少 docstring 的元素 (注釋行數為 0 或少于 30 個字符)
# 2. 添加文檔 (自動判定語言)
「為識別的元素添加包含語言特定必要元素的 docstring」
# → 如果現有注釋中有中文則用中文,否則用英文
# 3. 添加文檔 (明確指定英文)
/update-doc-string --lang en
「Add docstrings with required elements to the identified elements」
# 4. 確認標記
「確認所有添加或更新的 docstring 都有 Claude 標記」
```
### 執行步骤
#### 1. 目標元素的優先級
1. 🔴 **最優先**: 没有 docstring/注釋的元素 (注釋行數為 0)
2. 🟡 **次優先**: 不符合標準的元素 (少于 30 個字符或缺少必要元素)
3. 🟢 **確認對象**: 没有 Claude 標記的現有注釋
**目標元素 (通用)**
- Class/類定義
- Function/函數和方法
- Module/模塊 (Python, Go)
- Enum/枚舉類型
- Interface/接口 (TypeScript, Go)
#### 2. 語言特定編寫規則
**Python (PEP 257)**
```python
# 中文版 (默認)
def calculate_total(items: List[Item]) -> float:
"""計算商品列表的總金额。(30-60 個字符)
將每個商品的價格和數量相乘,返回含税總额。
空列表時返回 0.0。(50-200 個字符)
Args:
items: 要計算的商品列表
Returns:
含税總金额
Generated by Claude 🤖
"""
# 英文版 (--lang en)
def calculate_total(items: List[Item]) -> float:
"""Calculate the total amount for a list of items. (30-60 chars)
Multiplies the price and quantity of each item and returns
the total with tax. Returns 0.0 for empty lists. (50-200 chars)
Args:
items: List of items to calculate
Returns:
Total amount with tax
Generated by Claude 🤖
"""
```
**JavaScript/TypeScript (JSDoc)**
```javascript
/**
* 顯示用戶個人資料的組件。(30-60 個字符)
*
* 顯示头像圖片、用戶名和狀態資訊,
* 點擊時跳轉到個人資料詳情页面。(50-200 個字符)
*
* @param {Object} props - 組件属性
* @param {string} props.userId - 用戶 ID
* @param {boolean} [props.showStatus=true] - 狀態顯示標誌
* @returns {JSX.Element} 渲染的組件
*
* @generated by Claude 🤖
*/
const UserProfile = ({ userId, showStatus = true }) => {
```
**Go**
```go
// CalculateTotal 計算商品列表的總金额。(30-60 個字符)
//
// 將每個商品的價格和數量相乘,返回含税總额。
// 空切片時返回 0.0。(50-200 個字符)
//
// Generated by Claude 🤖
func CalculateTotal(items []Item) float64 {
```
**Rust**
```rust
/// 計算商品列表的總金额。(30-60 個字符)
///
/// 將每個商品的價格和數量相乘,返回含税總额。
/// 空向量時返回 0.0。(50-200 個字符)
///
/// Generated by Claude 🤖
pub fn calculate_total(items: &[Item]) -> f64 {
```
**Dart (DartDoc)**
```dart
/// 顯示用戶個人資料的 Widget。(30-60 個字符)
///
/// 垂直排列头像圖片、用戶名和狀態資訊,
/// 點擊時跳轉到個人資料詳情页面。(50-200 個字符)
///
/// Generated by Claude 🤖
class UserProfileWidget extends StatelessWidget {
```
#### 3. 現有內容保留規則
1. **現有注釋符合標準時**: 保持原樣 (不新增)
- 標準30 個字符以上且包含必要元素 (概要、詳细、標記)
2. **現有注釋不符合標準時**: 完全替換 (不重復)
3. **没有現有注釋時**: 添加新注釋
**應保留的重要資訊**
- URL 和鏈接:`See also:``@see``參照:`
- TODO 注釋:`TODO:``FIXME:``XXX:` 格式
- 注意事項:`Note:``Warning:``注意:`
- 使用示例:`Example:``例:``# Examples`
- 現有的參數和返回值說明
### 語言特定設置
```yaml
# 語言特定默認設置
languages:
python:
style: "google" # google, numpy, sphinx
indent: 4
quotes: '"""'
javascript:
style: "jsdoc"
indent: 2
prefix: "/**"
suffix: "*/"
typescript:
style: "tsdoc"
indent: 2
prefix: "/**"
suffix: "*/"
go:
style: "godoc"
indent: 0
prefix: "//"
rust:
style: "rustdoc"
indent: 0
prefix: "///"
dart:
style: "dartdoc"
indent: 0
prefix: "///"
```
### 質量檢查清單
-**字符數**: 严格遵守概要 30-60 個字符、詳细 50-200 個字符
-**必要元素**: 必须包含概要、詳细說明、Claude 標記三個元素
-**完整性**: 記載角色、使用場景、注意事項
-**語言規範**: 遵循各語言的官方風格指南
-**異常**: 錯誤和異常的說明 (如適用)
-**準確性**: 分析實現,仅記載基于事實的描述
### 注意事項
**🔴 绝對禁止事項**
- ❌ 更改文檔注釋以外的代碼
- ❌ 推測實現细节 (仅記載事實)
- ❌ 违反語言規範的格式
- ❌ 刪除或更改現有的類型注解
- ❌ 與現有注釋重復
- ❌ 為測試文件添加不符合字符數標準的注釋
**執行和驗證**
```bash
# 記錄執行結果
ADDED_COMMENTS=0
UPDATED_COMMENTS=0
ERRORS=0
# 從現有注釋自動判定語言
# 檢測中文字符則為 zh-tw否則為 en
DOC_LANGUAGE="en" # 默認
if grep -r '[一-龥]' --include="*.py" --include="*.js" --include="*.ts" --include="*.dart" --include="*.go" --include="*.rs" . 2>/dev/null | head -n 1; then
DOC_LANGUAGE="zh-tw"
fi
# 自動檢測編程語言並執行靜態分析
if [ -f "*.py" ]; then
pylint --disable=all --enable=missing-docstring .
elif [ -f "*.js" ] || [ -f "*.ts" ]; then
eslint . --rule 'jsdoc/require-jsdoc: error'
elif [ -f "*.go" ]; then
golint ./...
elif [ -f "*.rs" ]; then
cargo doc --no-deps
elif [ -f "*.dart" ]; then
melos analyze
fi
if [ $? -ne 0 ]; then
echo "🔴 錯誤:靜態分析失败"
exit 1
fi
# 輸出執行摘要
echo "📊 執行結果:"
echo "- 文檔語言:$DOC_LANGUAGE"
echo "- 添加的注釋:$ADDED_COMMENTS"
echo "- 更新的注釋:$UPDATED_COMMENTS"
echo "- 錯誤數:$ERRORS"
```
### 執行成功標準
1. **完成判定**: 满足以下所有條件時成功
- 語言特定的靜態分析顯示 PASSED
- 錯誤數為 0
- 添加和更新的注釋都符合標準
2. **部分成功**: 以下情况
- 錯誤數少于 5 個
- 90% 以上符合標準
3. **失败**: 以下情况
- 靜態分析顯示 FAILED
- 錯誤數為 5 個或以上
### 與 Claude 配合
```bash
# 分析整個項目 (自動判定語言)
find . -type f \( -name "*.py" -o -name "*.js" -o -name "*.ts" \)
/update-doc-string
「按照語言特定的最佳實践更新這個項目的 docstring」
# → 如果現有注釋中有中文則用 ja否則用 en
# 明確指定英文文檔
/update-doc-string --lang en
"Update docstrings following language-specific best practices"
# 明確指定中文文檔
/update-doc-string --lang zh-tw
「按照語言特定的最佳實践更新這個項目的 docstring」
# 不带標記執行 (自動判定語言)
/update-doc-string --marker false
"Improve existing docstrings without adding Claude markers"
# 英文文檔,不带標記
/update-doc-string --lang en --marker false
"Improve existing docstrings without adding Claude markers"
```