a structural diff that understands syntax 🟥🟩
 
 
 
 
 
Go to file
Wilfred Hughes c0cd13bd9b Pin Rust version to 1.46
Specify the minimum Rust version in cargo.toml, exercise this version in CI,
and document it in the manual.

We require 1.46 for bitflags, which is a dependency of clap.

Fixes #51
2021-10-29 00:20:07 +07:00
.github/workflows Pin Rust version to 1.46 2021-10-29 00:20:07 +07:00
img Update screenshots and note repro commands 2021-10-18 23:04:27 +07:00
manual Pin Rust version to 1.46 2021-10-29 00:20:07 +07:00
sample_files Rename JSON files to match sample file naming convention 2021-10-23 16:24:54 +07:00
src Highlight line numbers for lines with changes 2021-10-28 00:21:45 +07:00
vendor Add basic syntax highlighting for keywords and operators 2021-10-03 15:23:27 +07:00
.codecov.yml Disable 'patch' test coverage in GitHub status 2021-09-13 00:44:08 +07:00
.gitignore Ignore target/ directory 2021-09-27 00:13:41 +07:00
CHANGELOG.md Highlight line numbers for lines with changes 2021-10-28 00:21:45 +07:00
Cargo.lock Update radix-heap version 2021-10-28 00:51:37 +07:00
Cargo.toml Pin Rust version to 1.46 2021-10-29 00:20:07 +07:00
LICENSE Add LICENSE file 2021-07-04 11:41:39 +07:00
README.md Update screenshots and note repro commands 2021-10-18 23:04:27 +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

C 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.