a structural diff that understands syntax 🟥🟩
 
 
 
 
 
Go to file
Wilfred Hughes a5965b8292 Update screenshots for 0.12 2021-11-14 17:05:53 +07:00
.github/workflows Increase required rust version 2021-10-30 12:46:42 +07:00
img Update screenshots for 0.12 2021-11-14 17:05:53 +07:00
manual Tweak wording on manual intro 2021-11-14 15:29:40 +07:00
sample_files Rename Java sample file for consistency 2021-11-14 13:34:46 +07:00
src Fix subword highlighting in multiline comments 2021-11-14 16:48:55 +07:00
vendor Merge commit 'd72f2e42c0d5ccf8e8b1c39e3642428317e8fe02' 2021-11-14 16:51:15 +07:00
.codecov.yml Disable 'patch' test coverage in GitHub status 2021-09-13 00:44:08 +07:00
.gitignore Ignore local notes 2021-07-27 23:49:31 +07:00
CHANGELOG.md Document newer haskell parser commit 2021-11-14 16:51:47 +07:00
Cargo.lock Update radix-heap version 2021-10-28 00:51:37 +07:00
Cargo.toml Increase required rust version 2021-10-30 12:46:42 +07:00
LICENSE Add LICENSE file 2021-07-04 11:41:39 +07:00
README.md Update screenshots for 0.12 2021-11-14 17:05:53 +07:00
build.rs Fix building of e.g., vendor/tree-sitter-haskell-src/scanner.cc 2021-09-26 19:10:09 +07:00
text_diff_notes.md Add notes on LCS weaknesses 2021-03-21 13:34:01 +07:00

README.md

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

Difftastic is an experimental structured diff tool that compares files based on their syntax.

See the manual to get started.

Screenshots

Rust screenshot

C screenshot

Haskell screenshot

Languages

Difftastic supports the following languages:

  • C
  • C++
  • C#
  • Clojure
  • CSS
  • Elixir
  • Emacs Lisp
  • Go
  • Haskell
  • Java
  • JavaScript (and JSX)
  • JSON
  • OCaml
  • Python
  • Rust
  • 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. This might be solved by A* search.

Display. Difftastic has a side-by-side display which usually works well, but can be confusing.

Diff accuracy. Some delimiter moves are currently ignored (see #30).

Integration. Difftastic only has limited support for git and mercurial today.

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.

Further Reading

The wiki includes additional notes on alternative diffing techniques and tools.