SemanticDiff è una soluzione pensata per gli sviluppatori che desiderano analizzare velocemente le differenze tra diverse versioni del medesimo codice. Disponibile sia sotto forma di plugin per Visual Studio Code che come software standalone, è in grado di nascondere le modifiche irrilevanti, identifica gli spostamenti a carico del codice e comprende il funzionamento di eventuali refactoring.
SemanticDiff e diif semantico
Sono supportati più di 9 tra linguaggi di programmazione (Go, Java, Python..), linguaggi di sviluppo per il Web (JavaScript, CSS..) e formati di interscambio per i dati (JSON).
Per tutti è possibile effettuare operazioni di code diff, in sostanza la rappresentazione visuale dei cambiamenti subiti da un codice tra due o più release di un software. Si tratta di una funzionalità generalmente presente nelle applicazioni per il controllo di versione come Git.
Nel caso di SemanticDiff parliamo appunto di diff semantico. Per spiegare questo concetto basta riferirsi al fatto che la maggior parte dei diff tool trattano i sorgenti come se fossero dei file di testo. Mostrando quindi una rappresentazione basata su un confronto effettuato linea per linea. Il problema di tale approccio risiede nel fatto che in questo modo si tiene conto anche di elementi spesso irrilevanti. Come per esempio un'interruzione di riga o uno spazio bianco aggiuntivo.
Il diff semantico, chiamato anche diff strutturale, funziona invece in modo diverso perché si basa sulla comprensione delle modifiche effettuate. In questo modo non vengono mostrate inutilmente decine di linee, ma soltanto quelle che hanno subito cambiamenti determinanti per il software. Non viene quindi fornita una rappresentazione letterale delle differenze ma una loro astrazione. Il diff semantico lavora quindi come una sorta di compilatore, o un interprete. I codici da confrontare vengono convertiti in AST (Abstract Syntax Tree) per poi restituire la rappresentazione desiderata.
Come funziona SemanticDiff
SemanticDiff è un diff tool che funziona indipendentemente dal linguaggi analizzato. Basandosi appunto sul diff semantico può distinguere tra cambiamenti rilevanti e irrilevanti. Quelli irrilevanti, come per esempio l'inserimento o la rimozione di uno spazio bianco così come l'aggiunta di una parentesi non necessaria, vengono nascosti. Quelli rilevanti vengono invece analizzati in modo approfondito per evidenziare funzioni rinominate, porzioni di codice spostate e tutto quello che può essere determinante per il coding.