53 lines
1.9 KiB
Markdown
53 lines
1.9 KiB
Markdown
# Similar: A Diffing Library
|
||
|
||
[](https://github.com/mitsuhiko/similar/actions?query=workflow%3ATests)
|
||
[](https://crates.io/crates/similar)
|
||
[](https://github.com/mitsuhiko/similar/blob/main/LICENSE)
|
||
[](https://docs.rs/similar)
|
||
|
||
Similar is a dependency free crate for Rust that implements different diffing
|
||
algorithms and high level interfaces for it. It is based on the [pijul](https://pijul.org/)
|
||
implementation of the Myer's and Patience algorithms and inherits some ideas
|
||
from there. It was built for the [insta snapshot testing library](https://insta.rs).
|
||
|
||
```rust
|
||
use similar::{ChangeTag, TextDiff};
|
||
|
||
fn main() {
|
||
let diff = TextDiff::from_lines(
|
||
"Hello World\nThis is the second line.\nThis is the third.",
|
||
"Hallo Welt\nThis is the second line.\nThis is life.\nMoar and more",
|
||
);
|
||
|
||
for change in diff.iter_all_changes() {
|
||
let sign = match change.tag() {
|
||
ChangeTag::Delete => "-",
|
||
ChangeTag::Insert => "+",
|
||
ChangeTag::Equal => " ",
|
||
};
|
||
print!("{}{}", sign, change);
|
||
}
|
||
}
|
||
```
|
||
|
||
## Screenshot
|
||
|
||

|
||
|
||
## What's in the box?
|
||
|
||
* Myer's diff
|
||
* Patience diff
|
||
* Hunt–McIlroy / Hunt–Szymanski LCS diff
|
||
* Diffing on arbitrary comparable sequences
|
||
* Line, word, character and grapheme level diffing
|
||
* Text and Byte diffing
|
||
* Unified diff generation
|
||
|
||
## License and Links
|
||
|
||
- [Documentation](https://docs.rs/similar/)
|
||
- [Issue Tracker](https://github.com/mitsuhiko/similar/issues)
|
||
- [Examples](https://github.com/mitsuhiko/similar/tree/main/examples)
|
||
- License: [Apache-2.0](https://github.com/mitsuhiko/similar/blob/main/LICENSE)
|
||
|