87 lines
2.8 KiB
Text
87 lines
2.8 KiB
Text
|
|
#!/usr/bin/env nu
|
||
|
|
|
||
|
|
# Simplified Rule Validation Script for Rustelo Project
|
||
|
|
# Validates critical code changes against project constraints
|
||
|
|
|
||
|
|
def main [
|
||
|
|
--path: string = "." # Path to validate (default: current directory)
|
||
|
|
--fix # Apply automatic fixes where possible
|
||
|
|
--strict # Fail on warnings (not just errors)
|
||
|
|
] {
|
||
|
|
print "🔍 Validating Rustelo project rules..."
|
||
|
|
|
||
|
|
let violations = []
|
||
|
|
|
||
|
|
# Check critical violations with basic pattern matching
|
||
|
|
let violations = ($violations | append (check_basic_violations $path))
|
||
|
|
|
||
|
|
# Display results
|
||
|
|
if ($violations | is-empty) {
|
||
|
|
print "✅ All rule validations passed!"
|
||
|
|
return 0
|
||
|
|
} else {
|
||
|
|
print "❌ Rule violations found:"
|
||
|
|
for $violation in $violations {
|
||
|
|
print $" 🚫 ($violation.severity): ($violation.message)"
|
||
|
|
if ($violation.file?) {
|
||
|
|
print $" File: ($violation.file)"
|
||
|
|
}
|
||
|
|
if ($violation.fix?) {
|
||
|
|
print $" Fix: ($violation.fix)"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
let errors = ($violations | where severity == "ERROR")
|
||
|
|
if not ($errors | is-empty) {
|
||
|
|
return 1
|
||
|
|
} else if $strict {
|
||
|
|
return 1
|
||
|
|
} else {
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Basic validation checks
|
||
|
|
def check_basic_violations [path: string] {
|
||
|
|
let violations = []
|
||
|
|
|
||
|
|
# Check for Leptos router usage (most critical)
|
||
|
|
try {
|
||
|
|
if (has_command "rg") {
|
||
|
|
let leptos_check = (^rg -l "leptos_router" --type rust $path | lines)
|
||
|
|
if not ($leptos_check | is-empty) {
|
||
|
|
let violations = ($violations | append {
|
||
|
|
severity: "ERROR"
|
||
|
|
message: "Leptos router found - this project uses custom routing"
|
||
|
|
file: ($leptos_check | get 0? | default "unknown")
|
||
|
|
fix: "Remove leptos_router usage, use custom routing system"
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Check for unwrap() usage
|
||
|
|
if (has_command "rg") {
|
||
|
|
let unwrap_check = (^rg -l "unwrap()" --type rust $path | lines)
|
||
|
|
if not ($unwrap_check | is-empty) {
|
||
|
|
let violations = ($violations | append {
|
||
|
|
severity: "ERROR"
|
||
|
|
message: "unwrap() usage found - use proper error handling"
|
||
|
|
file: ($unwrap_check | get 0? | default "unknown")
|
||
|
|
fix: "Use ? operator or proper error handling"
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
$violations
|
||
|
|
} catch {
|
||
|
|
# If rg fails, return empty violations (don't block development)
|
||
|
|
print "⚠️ Warning: Could not run full validation (rg not available)"
|
||
|
|
[]
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# Helper to check if command exists
|
||
|
|
def has_command [cmd: string] {
|
||
|
|
which $cmd | is-not-empty
|
||
|
|
}
|