Skip to content

Structural Diffs

Wilfred Hughes edited this page Jul 5, 2021 · 12 revisions

Tree Diffs

Most tree diff implementations focus on XML, and there's a great overview of techniques in this blog post.

A Jane Street intern built a tree differ using an A* algorithm. This compares two s-expressions and builds a minimal new one with the new section marked with :date-switch.

(Jane Street also has patdiff, but that seems to be a line-oriented diff with some whitespace/integer display polish. It doesn't understand that e.g. whitespace in "foo " is meaningful).

JSON diff

json-diff provides a proper structural diff for JSON files.

graphtage

graphtage compares structured data by parsing into a generic file format, then displaying a diff. It finds the optimal edit sequence, and even allows things like diffing JSON against YAML.

Lisp diffs

sdiff and diff-sexp explore s-expression oriented diffs.

Autochrome is a structural diff for Clojure, using Dijkstra pathfinding. It does not track moves.

Clone this wiki locally