File size: 1,055 Bytes
09e30f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
"""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":""}