dramaling-app/sop/scripts/maintenance/check_doc_quality.sh

131 lines
3.6 KiB
Bash

#!/bin/bash
# 文檔品質檢查腳本
echo "🔍 文檔品質檢查開始..."
echo "====================================="
# 檢查文檔完整性
echo "📄 1. 文檔完整性檢查"
echo "-------------------------------------"
# 必要文檔清單
required_docs=(
"docs/01_requirement/requirements.md"
"docs/01_requirement/system_structure_design.json"
"docs/04_technical/user-flow-specification.md"
"docs/04_technical/tech-stack-decision.md"
"docs/04_technical/api-specifications.md"
"docs/04_technical/database-schema.md"
"docs/02_design/ui-ux-guidelines.md"
"docs/02_design/business-logic-rules.md"
)
missing_docs=0
for doc in "${required_docs[@]}"; do
if [ -f "$doc" ]; then
echo "$doc"
else
echo "$doc (缺失)"
missing_docs=$((missing_docs + 1))
fi
done
echo "文檔完整性: $((${#required_docs[@]} - missing_docs))/${#required_docs[@]}"
echo ""
# 檢查文檔大小和內容
echo "📏 2. 文檔內容品質檢查"
echo "-------------------------------------"
for doc in "${required_docs[@]}"; do
if [ -f "$doc" ]; then
size=$(wc -c < "$doc")
lines=$(wc -l < "$doc")
words=$(wc -w < "$doc")
if [ $size -lt 1000 ]; then
echo "⚠️ $doc: 內容過少 (${size} bytes, ${lines} lines)"
elif [ $size -gt 100000 ]; then
echo "⚠️ $doc: 內容過多 (${size} bytes, ${lines} lines)"
else
echo "$doc: 內容適中 (${words} words, ${lines} lines)"
fi
fi
done
echo ""
# 檢查Markdown格式
echo "📝 3. Markdown格式檢查"
echo "-------------------------------------"
find docs/ -name "*.md" -type f | while read -r file; do
# 檢查標題結構
h1_count=$(grep -c "^# " "$file" 2>/dev/null || echo 0)
h2_count=$(grep -c "^## " "$file" 2>/dev/null || echo 0)
if [ "$h1_count" -eq 0 ]; then
echo "⚠️ $file: 缺少主標題 (H1)"
elif [ "$h1_count" -gt 1 ]; then
echo "⚠️ $file: 多個主標題 ($h1_count 個H1)"
else
echo "$file: 標題結構良好"
fi
done
echo ""
# 檢查TODO和FIXME
echo "📋 4. TODO和FIXME檢查"
echo "-------------------------------------"
todo_count=0
fixme_count=0
find docs/ -name "*.md" -type f | while read -r file; do
todos=$(grep -in "TODO\|FIXME" "$file" 2>/dev/null || true)
if [ -n "$todos" ]; then
echo "📌 $file:"
echo "$todos" | head -5
echo ""
fi
done
echo ""
# 檢查連結有效性
echo "🔗 5. 內部連結檢查"
echo "-------------------------------------"
find docs/ -name "*.md" -type f | while read -r file; do
# 檢查內部連結 [text](path)
grep -o '\[.*\](docs/[^)]*\|[^)]*\.md)' "$file" 2>/dev/null | while read -r link; do
# 提取路徑
path=$(echo "$link" | sed 's/.*(\([^)]*\)).*/\1/')
if [[ "$path" == docs/* ]] || [[ "$path" == *.md ]]; then
if [ ! -f "$path" ]; then
echo "$file: 無效連結 -> $path"
fi
fi
done
done
echo ""
# 生成總結
echo "📊 文檔品質總結"
echo "====================================="
total_docs=${#required_docs[@]}
existing_docs=$((total_docs - missing_docs))
completeness=$((existing_docs * 100 / total_docs))
echo "文檔完整度: $completeness% ($existing_docs/$total_docs)"
if [ $completeness -ge 90 ]; then
echo "✅ 品質評級: 優秀"
elif [ $completeness -ge 80 ]; then
echo "✅ 品質評級: 良好"
elif [ $completeness -ge 70 ]; then
echo "⚠️ 品質評級: 尚可"
else
echo "❌ 品質評級: 需要改進"
fi
echo "檢查完成時間: $(date)"