Rust の 差分比較ライブラリ similar でテキスト比較をしてみる
similar
Rust のスナップショットライブラリ insta で使う用に開発されたらしい 作者の mitushiko 氏のことどこかで見たことあるなと思ったら rye を作ってる人っぽいlemonadern.icon あと Flask の作者らしい
やりたいこと
二つのテキストの差分を見やすくしたい
git diff したときに出るような感じで、ターミナルで見やすい Diff view を出したい
やってみる
examples の terminal
https://gyazo.com/601c092b0da4e92d4d5725ceb78c44b5
これらを比較している
code:src
"Hello World\nThis is the second line.\nThis is the third.",
"Hallo Welt\nThis is the second line.\nThis is life.\nMoar and more",
もっと単語とかの単位で分かるようにしたい、あと行数も出したい
examples の terminal-inline
これがやりたいことと近そうなので、exampleのコードを引っ張ってきて自分のワークスペースでやる
実行に必要そうなライブラリと feature を追加
code:Cargo.toml
console = "0.15.10"
サンプルのテキストファイルを用意
code:old.txt
Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua.
Ut enim ad minimum veniam,
quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in
reprehenderit in voluptate velit
esse cillum dolore eu fugiat nulla
pariatur.
Excepteur sint occaecat cupidatat
non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum.
code:new.txt
Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eisumod tempor incididant
ut rabore et dolore magna aliqua.
Ut enim ad minim veniam,
quis nostrud exercitation ullamco
laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in
reprehenderit in voluptate velit
esse cillum dolore eu fugiat nulla
pariatur.
Excepteur sint occaecat cupidatat
non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum.
比較する
https://gyazo.com/f95157fc2bd70cd72c2ed63256c6bc4a
行だけでなく単語をハイライトしてくれるし、タブとスペースの違いも表示してくれてていい感じな気がする
コードを読む感じ現状だとバイト列での比較っぽいので日本語の比較が無理そう
なんか日本語でもいけてる
https://gyazo.com/24076da0400d0ec6a3e536c0820ecc82
note: 日本語が入ってもいいように日本語の単語単位でdiffの表示をしたい
feature の使い分けがわからん(特に inline)のでドキュメントを見る
unicode feature を入れたら普通に日本語もいい感じになってる
https://gyazo.com/51b64199401390e9cccc8a5b5f17e238
tab size が 5 なのがよくわからない
ターミナル的には8になってるのに、4でもなく5?