52 lines
1.8 KiB
Markdown
52 lines
1.8 KiB
Markdown
# similar
|
|
|
|
[](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.
|
|
|
|
```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
|
|
* 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)
|
|
|