website-htmx-rustelo-code/scripts/rules/validate-rules.nu
2026-07-10 03:44:13 +01:00

87 lines
No EOL
2.8 KiB
Text
Executable file

#!/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
}