Files
Yuu-Box/yuubox/analyzer.py
aguitauwu 5a4b5b83dd pos nomas
2026-02-16 11:41:18 -06:00

60 lines
2.2 KiB
Python

import re
from typing import Dict, Any, Optional
class ErrorAnalyzer:
"""Analyzes execution errors"""
def analyze(self, stderr: str, language: str, code: str) -> Dict[str, Any]:
if language == "python":
return self._analyze_python(stderr)
elif language in ["javascript", "js", "node"]:
return self._analyze_javascript(stderr)
elif language == "rust":
return self._analyze_rust(stderr)
else:
return self._generic_analysis(stderr)
def _analyze_python(self, stderr: str) -> Dict[str, Any]:
lines = stderr.split("\n")
for i, line in enumerate(lines):
if "Traceback" in line:
last_line = lines[-1] if lines[-1].strip() else lines[-2]
match = re.match(r"(\w+Error): (.+)", last_line)
if match:
line_match = re.search(r'line (\d+)', stderr)
return {
"type": match.group(1),
"message": match.group(2),
"line": int(line_match.group(1)) if line_match else None,
"stack_trace": stderr,
}
return self._generic_analysis(stderr)
def _analyze_javascript(self, stderr: str) -> Dict[str, Any]:
match = re.search(r"(\w+Error): (.+)", stderr)
if match:
return {
"type": match.group(1),
"message": match.group(2),
"stack_trace": stderr,
}
return self._generic_analysis(stderr)
def _analyze_rust(self, stderr: str) -> Dict[str, Any]:
if "error[E" in stderr:
match = re.search(r"error\[E\d+\]: (.+)", stderr)
if match:
return {
"type": "CompilerError",
"message": match.group(1),
"stack_trace": stderr,
}
return self._generic_analysis(stderr)
def _generic_analysis(self, stderr: str) -> Dict[str, Any]:
return {
"type": "ExecutionError",
"message": stderr[:300].strip(),
"stack_trace": stderr,
}