Files
hakorune/tools/parallel-refactor-nyash.sh
Moe Charm fb2d8e37d5 🎉 Phase 11.8/12.7: MIR Core-13 完全実装 + 糖衣構文ドキュメント更新
主要な変更:
- MIR Core-13命令セット確定(Load/Store削除の革命的設計)
  - Const, BinOp, Compare(値・計算)
  - Jump, Branch, Return, Phi(制御)
  - Call, BoxCall, ExternCall(呼び出し)
  - TypeOp, Safepoint, Barrier(メタ)
- Phase 12.7糖衣構文ドキュメント整理(超圧縮重視、可逆変換保証)
- MIRビルダーのモジュール分割完了
- vtableテストスイート拡充
- AI協調開発ツール追加(並列リファクタリング支援)

詳細:
- src/mir/instruction_introspection.rs: core13_instruction_names()追加
- MIRビルダー分割: decls.rs, exprs_*.rs, fields.rs
- plugin_loader_v2: errors.rs, host_bridge.rs分離
- 論文用データ: mir13-final.md作成

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-04 11:34:15 +09:00

153 lines
4.7 KiB
Bash
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.

#!/usr/bin/env bash
set -euo pipefail
# === Nyash特化版並列リファクタリング自動化 ===
# ChatGPT5のアイデアをNyashプロジェクト用にカスタマイズ
# === 設定 ===
TARGET_DIR="${1:-src}"
FILE_GLOB="${2:-'*.rs'}"
JOBS="${JOBS:-4}" # 控えめな並列数
BUILD_CMD="cargo build --release -j32" # Nyash標準ビルド
TEST_CMD="cargo test --lib" # 基本的なユニットテスト
FMT_CMD="cargo fmt" # Rustフォーマッタ
# Codex非同期実行通知機能付き
CODEX_CMD="./tools/codex-async-notify.sh"
# === 準備 ===
WORK_DIR="refactor-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$WORK_DIR"/{plans,logs,results}
cd "$WORK_DIR"
# 対象ファイル列挙(大きいファイル優先)
find "../$TARGET_DIR" -name "$FILE_GLOB" -type f -exec wc -l {} + |
sort -rn |
awk '$1 > 500 {print $2}' > target_files.txt # 500行以上のファイルのみ
echo "🎯 Target files: $(wc -l < target_files.txt)"
echo "📁 Work directory: $WORK_DIR"
# === Phase 1: 並列提案生成Codex利用===
echo "🚀 Phase 1: Generating refactoring proposals..."
# 各ファイルに対してCodexタスクを生成
i=0
while IFS= read -r file; do
((i++))
basename_file=$(basename "$file")
# タスク定義
if [[ "$file" == *"mir/"* ]]; then
# MIR関連は特別扱い
task="Refactor $file to support MIR-13 instruction set. Remove legacy instructions and unify with BoxCall/TypeOp"
elif [[ "$file" == *"vm"* ]]; then
# VM関連
task="Refactor $file: split into smaller modules if >1000 lines, improve readability"
else
# 一般的なリファクタリング
task="Refactor $file: extract functions/modules if >1000 lines, improve maintainability"
fi
# 非同期でCodex実行
echo "[$i] Starting: $basename_file"
$CODEX_CMD "$task" > "logs/codex-$i-$basename_file.log" 2>&1
# タスク記録
echo "$i|$file|$task" >> task_list.txt
# 少し間隔を空けるAPI制限対策
sleep 2
done < target_files.txt
echo "⏳ Waiting for all Codex tasks to complete..."
echo " Monitor: tail -f logs/codex-*.log"
# === Phase 2: 結果収集・検証(手動トリガー)===
cat > apply_results.sh << 'EOF'
#!/bin/bash
# Phase 2: 各提案を検証・適用
echo "🔍 Phase 2: Applying and verifying changes..."
# 現在のブランチを記録
ORIGINAL_BRANCH=$(git branch --show-current)
# 各Codex結果を処理
for log in logs/codex-*.log; do
[[ -e "$log" ]] || continue
# ログから情報抽出
task_id=$(basename "$log" | sed 's/codex-\([0-9]*\)-.*/\1/')
file_info=$(grep "^$task_id|" task_list.txt)
target_file=$(echo "$file_info" | cut -d'|' -f2)
echo "==> Processing: $target_file"
# 新しいブランチ作成
branch_name="refactor/$task_id-$(basename "$target_file" .rs)"
git checkout -b "$branch_name" "$ORIGINAL_BRANCH" 2>/dev/null || {
git checkout "$branch_name"
git reset --hard "$ORIGINAL_BRANCH"
}
# ここで手動で変更を適用する必要がある
echo " ⚠️ Please apply changes from: $log"
echo " Press Enter when done..."
read -r
# フォーマット
cargo fmt -- "$target_file" 2>/dev/null || true
# ビルドテスト
if cargo build --release -j32 >/dev/null 2>&1; then
echo " ✅ Build passed"
# 簡単なテスト
if cargo test --lib --quiet 2>/dev/null; then
echo " ✅ Tests passed"
# コミット
git add -A
git commit -m "refactor: $(basename "$target_file") - reduce complexity and improve structure" \
-m "- Applied MIR-13 instruction set changes" \
-m "- Extracted modules/functions as needed" \
-m "- Maintained API compatibility"
echo " ✅ Committed to branch: $branch_name"
else
echo " ❌ Tests failed - reverting"
git reset --hard
git checkout "$ORIGINAL_BRANCH"
git branch -D "$branch_name" 2>/dev/null
fi
else
echo " ❌ Build failed - reverting"
git reset --hard
git checkout "$ORIGINAL_BRANCH"
git branch -D "$branch_name" 2>/dev/null
fi
done
# 元のブランチに戻る
git checkout "$ORIGINAL_BRANCH"
echo "✅ Phase 2 complete!"
echo "📊 Results:"
git branch --list 'refactor/*' | wc -l | xargs echo " Successful refactors:"
echo " Review with: git branch --list 'refactor/*'"
EOF
chmod +x apply_results.sh
echo ""
echo "✅ Phase 1 complete! Codex tasks submitted."
echo ""
echo "📋 Next steps:"
echo " 1. Wait for Codex notifications in tmux"
echo " 2. Run: ./apply_results.sh"
echo " 3. Review and merge branches"
echo ""
echo "💡 Tips:"
echo " - Check logs: ls -la logs/"
echo " - Monitor tmux: tmux attach -t claude"