ydiffはプログラミング言語を認識し「構造ごとの」差分を表示する事ができるdiffツールです(配布サイト、Github、作者による紹介、Hacker News)。
メソッドや関数の大規模な再配置やリファクタリングを実行した場合、通常の行指向diffツールだと、変更箇所が検出されすぎて、差分の認識が困難になりがちですが、ydiffを使えばそのような問題が起こりません。プログラミング言語を認識して、構造単位で比較する事ができるからです。
ydiffは以下の特徴を持ったツールです。
- プログラミング言語を認識。 Scheme、Emacs Lips、Python、Javascript、C++
- リファクタリングを検出。
- フォーマットに影響されない。
- 理解しやすい出力。
なかなか優れた特徴を持ったツールのようですね。
Schemeのサンプル
例えばSchemeのサンプルを見ると、define-syntax の中身の部分だけ差分として認識されていることがわかります。
C++のサンプル
複雑なプログラミング言語として有名なC++にも対応。比較されているのはV8プロジェクトに含まれているd8 javascript debuggerのソースコード。
まとめ
対応しているプログラミング言語に限りはありますが、通常のdiffより便利に使える局面もあるのではないでしょうか。コンセプト的には、以前紹介したSemantic Mergeと似たものを感じます。ソースコードはGPL v3で公開されているので、内部構造が気になった場合は参考にすると良いでしょう。