3 ポイント 投稿者 GN⁺ 2024-03-22 | 1件のコメント | WhatsAppで共有

Difftastic 構造的差分ツール

  • Difftastic は構文を理解する CLI 差分ツールで、ファイルを行単位ではなく構文ベースで比較する。
  • 人が読みやすい正確な差分を提供する。

実際に変更された内容の理解

  • Difftastic は tree-sitter を使ってコードをパースする。
  • 行ベースのテキスト差分とは異なり、内部表現が変更されていないことを理解する。

書式変更を無視

  • コードフォーマッタが複数行に分割することを決めた場合でも、実際に変更された内容だけを表示する。

ラップ変更の可視化

  • ラッパーを追加した場合、Difftastic は区切り文字を正確に対応付ける。
  • 内部の内容を変更しても、追加されたラッパーを表示できる。

実際の行番号

  • ファイルの実際の行番号を変更前後の両方で表示する。

60秒デモ

プログラミング言語のサポート

  • C++, C#, Clojure, Dart, Erlang など、さまざまな言語をサポート。
  • 詳細な対応言語の一覧はマニュアルで確認できる。

ファイル形式のサポート

  • HCL, HTML, JSON, YAML など、さまざまなファイル形式をサポート。
  • 詳細な対応ファイル形式の一覧はマニュアルで確認できる。

Git と互換性あり

  • Git の設定手順はマニュアルで確認できる。

完全オープンソース

  • Difftastic は MIT ライセンスを採用している。
  • ダウンロード、改変、友人との共有が可能。

作者

  • Wilfred Hughes が Emacs とコーヒーとともに作った。

GN⁺ の意見

  • Difftastic はコードの構造的差分を把握し、開発者が変更内容をより明確に理解できるよう助ける。
  • 従来の行ベースの diff ツールと比べると、Difftastic はコードの構文を理解し、書式変更を無視するなどの機能により、より精緻な比較が可能である。
  • オープンソースツールとして、コミュニティの貢献を通じて継続的に改善される可能性があり、ユーザーが必要に応じて自由に改変・拡張できる利点がある。
  • 似た機能を提供する他のツールとしては、Git の組み込みツールである git diff や JetBrains の IntelliJ IDEA のような IDE の組み込み比較ツールがあるが、Difftastic は構文ベース比較という独自のアプローチを提供する。
  • Difftastic を導入する際には、対応するプログラミング言語やファイル形式を確認し、チーム内でのツール利用について合意が必要になる場合がある。このツールを使うことでコードレビューの効率を高め、協業の過程での誤解を減らせる利点がある。

1件のコメント

 
GN⁺ 2024-03-22
Hacker Newsの意見
  • Tree-sitterベースの技術紹介

    • Tree-sitterはコードをAST(Abstract Syntax Tree、抽象構文木)に変換し、それをエディタやdiffツールのようなクライアントに提供する標準インターフェースを提供する。
    • これによりツール側は数十の言語を個別に直接サポートする必要がなく、Tree-sitterをサポートするだけで、Tree-sitterが対応するすべての言語を自動的に扱える。
    • 新しい言語を開発する際にTree-sitterパーサーを作れば、Tree-sitter対応のすべてのツールがその言語をサポートするようになる。
    • この革新は、多様な言語をサポートするツール開発における重複作業を減らし、より良いツールのエコシステムを生み出している。
  • Rustプロジェクトおよびツールの更新方法

    • Rustベースのプロジェクトをcargoでインストール・更新する方法が紹介されている。
    • mise-en-placeasdfの代替として、高速かつ柔軟である。
    • zoxidecdコマンドの代替で、ユーザーが移動したディレクトリを記憶し、部分一致検索を通じてすばやく移動できるようにする。
    • dustduを補完するツールで、最も多くのディスク容量を使っているディレクトリを表示する。
  • Difftasticの使用経験と意見

    • Difftasticを使った経験が共有されており、ほかのdiffツールを使うと不便に感じるとの言及がある。
    • 構文が変わっても意味は同じ場合を比較できる「semantic」diffツールの可能性が探られている。
  • Difftasticの利便性

    • Difftasticが実際のファイルの行番号を表示する機能が強調されており、git diffと併用すると非常に便利だと述べられている。
  • 関連ツール: diff2html

    • diff2htmlはCLI(Command Line Interface)を通じて、HTML形式のdiffをブラウザタブで表示するツールである。
  • Augeasライブラリの使用経験

    • Augeasライブラリを使って設定ファイルの差分を検出し、ユーザーが構文に依存しない細かな許可リストを書けるようにした経験が共有されている。
  • Semantic Mergeとの比較

    • Semantic Mergeはオープンソースではなかったが、Difftasticはオープンソースで、より優れたdiffを提供する。
    • Difftasticをmerge機能まで拡張する計画があるのか気になるという声がある。
  • icdiffへの回帰

    • Difftasticを試したものの、変更されていない部分に奇妙なフォーマットが適用されるなどの問題により、icdiffに戻ったという意見が示されている。
  • Difftasticの視覚的な問題

    • 大きなXMLファイルを確認する際、修正された行と属性を視覚的に区別しにくい点が指摘されており、スタイル変更方法の文書化が必要だと述べられている。
  • Difftasticのインストールサイズ

    • Arch Linuxパッケージのサイズは7MBだが、インストール時には80MBに増え、difftバイナリ自体が78MBであると言及されている。
    • LZ4圧縮を使うZFSデータセットでは17MBと表示され、圧縮可能な内容をバイナリに含めていない理由に疑問が呈されている。