it's difftastic!
manual crates.io codecov.io

Difftastic is an experimental diff tool that compares files based on their syntax. See [the manual](http://difftastic.wilfred.me.uk/) to get started. ## Demo 1: Wrapping Expressions Difftastic understands expression nesting. If you wrap an expression in an if statement, difftastic understands that the inner values are unchanged. ![Elisp screenshot](img/elisp.png) Compare this with git's default diff. It is confused by indentation changes, and doesn't know which closing parenthesis has been added. ![Elisp comparison screenshot](img/elisp_comparison.png) ## Demo 2: Reflowing Code Difftastic is robust to code formatting changes. If you change how many items appear on a single line, difftastic will only show you items which have changed. ![Rust screenshot](img/rust.png) In git's default diff, it's harder to see that `iter` and the curly braces are unchanged. It's also harder to see the affected line numbers. ![Rust comparison screenshot](img/rust_comparison.png) ## Languages Difftastic supports the following languages: * Bash * C * C++ * C# * Clojure * Common Lisp * CSS * Elixir * Emacs Lisp * Go * Haskell * Java * JavaScript (and JSX) * JSON * OCaml * PHP * Python * Ruby * Rust * Scala * TypeScript (and TSX) If a file has an unrecognised extension, difftastic uses a line-oriented diff. ## Known Issues Performance. Difftastic scales relatively poorly on files with a large number of changes, and can use a lot of memory. Display. Difftastic has a side-by-side display which usually works well, but can be confusing. Robustness. Difftastic regularly has releases that fix crashes. ## Non-goals Patch files. If you want to create a patch that you can later apply, use `diff`. Difftastic ignores whitespace, so its output is lossy. (AST patching is also a hard problem.) ## License Difftastic is open source under the MIT license, see LICENSE for more details. Files in `sample_files/` are also under the MIT license unless stated otherwise in their header.