変更を読む

セマンティック差分

単なる名前の変更は、行単位の差分ではファイル 1 つがまるごと削除され、まるごと追加 されたように見えます。技術的には正しく、そして何の役にも立ちません。

Gitcito は各ファイルの差分の上に 何が変わったか の帯を表示します。ファイルの 新旧両方のバージョンを tree-sitter で解析し — 正規表現ではなく、本物の構文木です — 宣言どうしを突き合わせます。

何が変わったかの帯。名前の変更とシグネチャの変更が、シンボル単位で並ぶ

判定 例
リネーム startServer → bootServer
シグネチャ open(path) → open(path, mode)
追加 / 削除 新しい関数、消えた関数
移動 同じコードが 40 行下へ
変更 名前もシグネチャも同じで、中身が違う

名前の変更とシグネチャの変更が先に並びます。レビュアーが見落としてはいけないのは そこだからです。行をクリックすると差分内のそのシンボルへ飛びます。

解析できるもの

TypeScript、TSX、JavaScript、Python、Go、Rust、Java、C、C++、C#、Ruby、PHP、 Swift、Kotlin、Scala、Lua、Bash、Zig。

文法を持たない言語のファイルは、ふつうの行単位の差分のままです。帯そのものが現れま せん。400 KB を超えるファイルも同じです。

正直な限界

  • 中身も変わった名前の変更は、リネームとして報告した うえで その旨を伝えます。
  • たまたま似ているだけの 1 行関数どうしは組にされ ません。あるサイズを下回ると 一致はほぼ完全でなければならず、架空のリネームではなく、素直な削除 + 追加になり ます。
  • 上のほうが増えたせいで数行ずれただけのシンボルは「移動」として報告しません。 本当の移動が埋もれてしまうからです。

関連項目: 差分ビューア · 前回から何が変わったか

この翻訳を GitHub で改善