Spaces:
Running
Running
| """diff_checker.py — Genera e valida diff tra versioni di file.""" | |
| import difflib, re | |
| from pathlib import Path | |
| def generate_diff(original:str,modified:str,filename:str="file")->dict: | |
| a=original.splitlines(keepends=True); b=modified.splitlines(keepends=True) | |
| lines=list(difflib.unified_diff(a,b,fromfile=f"a/{filename}",tofile=f"b/{filename}",lineterm="")) | |
| diff="\n".join(lines) | |
| added=sum(1 for l in lines if l.startswith("+") and not l.startswith("+++")) | |
| removed=sum(1 for l in lines if l.startswith("-") and not l.startswith("---")) | |
| return {"diff":diff,"added":added,"removed":removed,"has_changes":len(lines)>0} | |
| def validate_python(code:str)->dict: | |
| import ast | |
| try: ast.parse(code); return {"valid":True,"errors":[]} | |
| except SyntaxError as e: return {"valid":False,"errors":[f"L{e.lineno}: {e.msg}"]} | |
| def file_diff(path_a:str,path_b:str)->dict: | |
| try: return generate_diff(Path(path_a).read_text(encoding="utf-8"),Path(path_b).read_text(encoding="utf-8"),Path(path_a).name) | |
| except Exception as e: return {"error":str(e),"diff":""} |