prvng_core/scripts/batch-refactor.sh
Jesús Pérez 316622a78f
merge(refactor/lazy-loading): ADR-025 lazy-loading complete
557 files merged. Conflicts resolved:
  - CHANGELOG.md: took refactor/lazy-loading (session changelog)
  - versions.ncl: took refactor/lazy-loading (adds typedialog entries)
2026-04-17 23:09:56 +01:00

118 lines
3.8 KiB
Bash

#!/bin/bash
# Batch refactor try-catch to Result pattern
# Usage: ./batch-refactor.sh [files...]
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
BACKUP_DIR="$PROJECT_ROOT/.backups/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"
echo "🔧 Batch Refactoring: try-catch → Result Pattern"
echo "════════════════════════════════════════════════════"
echo ""
# Function to refactor a single file
refactor_file() {
local file="$1"
local filename=$(basename "$file")
if [ ! -f "$file" ]; then
echo "❌ File not found: $file"
return 1
fi
echo "📄 Processing: $filename"
# Create backup
cp "$file" "$BACKUP_DIR/$filename.bak"
echo " ✓ Backup created"
# Pattern 1: Add result.nu import if not present
if ! grep -q "use.*result.nu" "$file"; then
# Find the first 'use' or 'def' or 'export' line
line_num=$(grep -n "^use\|^def\|^export" "$file" | head -1 | cut -d: -f1)
if [ -n "$line_num" ]; then
sed -i.tmp "${line_num}i\\
use lib_provisioning/result.nu *
" "$file" 2>/dev/null || true
rm -f "$file.tmp"
echo " ✓ Added result.nu import"
fi
fi
# Pattern 2: bash-check: try { bash -c ... | complete } catch { {exit_code: 1, stderr: $err} }
# Simple pattern: try { bash -c ... | complete } catch {|err| {exit_code: 1, stderr: $err} }
if grep -q 'try.*bash.*complete.*catch' "$file"; then
# Count occurrences
count=$(grep -c 'try.*bash.*complete.*catch' "$file" || echo 0)
echo " ⚠️ Found $count bash-check patterns (manual review needed)"
fi
# Pattern 3: bash-or: try { bash ... } catch { null/fallback }
if grep -q 'try.*{$' "$file" && grep -q '} catch.*{$' "$file"; then
count=$(grep -c 'try.*bash' "$file" || echo 0)
if [ $count -gt 0 ]; then
echo " ⚠️ Found $count potential bash operations in try blocks"
fi
fi
# Pattern 4: json-read: try { open ... | from json } catch { ... }
if grep -q 'try.*open.*from json' "$file"; then
count=$(grep -c 'open.*from json' "$file" || echo 0)
echo " ⚠️ Found $count JSON operations (use json-read helper)"
fi
# Verify syntax
if nu --check "$file" 2>/dev/null; then
echo " ✓ Syntax check passed"
else
echo " ⚠️ Syntax check failed - review required"
cp "$BACKUP_DIR/$filename.bak" "$file"
return 1
fi
echo " ✅ Ready for manual review"
echo ""
}
# Main execution
if [ $# -eq 0 ]; then
echo "No files specified. Analyzing all .nu files..."
echo ""
# Find files with try-catch
files=$(find "$PROJECT_ROOT/provisioning/core/nulib" -name "*.nu" -exec grep -l "try\s*{" {} \; | head -20)
echo "Top 20 files with try-catch blocks:"
echo "$files" | nl
echo ""
echo "Usage: $0 [files...]"
echo "Example: $0 lib_provisioning/deploy.nu lib_provisioning/config/accessor.nu"
exit 0
fi
# Process specified files
for file in "$@"; do
if [ ! -f "$file" ]; then
# Try relative to project root
file="$PROJECT_ROOT/$file"
fi
if [ -f "$file" ]; then
refactor_file "$file" || true
fi
done
echo "════════════════════════════════════════════════════"
echo "✅ Refactoring complete!"
echo ""
echo "📋 Next steps:"
echo "1. Review changes: git diff"
echo "2. For each file, apply manual refactoring following the pattern"
echo "3. Commit with: git add . && git commit -m 'refactor: eliminate try-catch'"
echo ""
echo "📁 Backups stored in: $BACKUP_DIR"
echo ""