This substantially decreases the number of edges in our graphs, especially when few nodes have changed. Diffing slow_before.rs with slow_after.rs now takes half the time on my machine. This makes diffing slightly greedier, so there may exist cases where diffs are slightly worse. Comparing AXAB with AB is arguably nicer as (+AX)AB rather than A(+XA)B. However, all the tests still pass, and it's a huge perf win. Closes #47 |
||
|---|---|---|
| .github/workflows | ||
| img | ||
| manual | ||
| sample_files | ||
| src | ||
| vendor | ||
| .codecov.yml | ||
| .gitignore | ||
| CHANGELOG.md | ||
| Cargo.lock | ||
| Cargo.toml | ||
| LICENSE | ||
| README.md | ||
| build.rs | ||
| text_diff_notes.md | ||
README.md
Difftastic is an experimental structured diff tool that compares files based on their syntax.
See the manual to get started.
Screenshots
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.



