開発者ツール · テキスト比較
「空白を無視」が行ごとのテキストの差分で実際に無視するもの
· 仕組み
テキストの差分 開発者のワークフロー 空白
先頭のインデントから内部ランまで、比較で正規化できる空白の種類を分類し、空白が意味を持ち、無視すべきでない場所を警告します。
すべての行が変更されましたが、実際には何も変更されていません。ファイルがタブからスペースに再インデントされて開き、相違点の壁として表示されます。
フォーマッタは 4 つのスペースのインデントを 2 つのスペースに変更し、行の差分によりファイル全体が変更されたものとして描画されます。変更は視覚的なノイズである可能性があるため、空白を無視したビューはレビュー担当者が実際の編集内容を見つけるのに役立ちます。しかし、「空白なしの同じテキスト」は「同じプログラム」と同じではありません。構成またはソース ファイルを承認する前に、通常のビューと正規化されたビューを比較してください。
4 種類の空白の違い - それぞれが異なるツールまたは習慣によって引き起こされるため、先頭のインデント、末尾のスペース、内部行、空行を分離します。
空白の変更はいくつかの場所で発生します。先頭のインデントは多くの場合、書式設定に起因します。コピー/ペーストの末尾のスペース。行内でスペースやタブを繰り返すと、単語や列が区切られる場合があります。空白行によってブロックが分割される場合があります。 ToolAcre の空白を無視オプションは、比較のために各行をトリミングし、内部の空白を 1 つのスペースにまとめます。単純にすべての空白を削除したり、異なる行数を同一のものとして扱ったりするわけではありません。別の操作で削除しない限り、2 つの空白行は 2 つの比較単位のままになります。
比較する前に正規化がどのように行われるか - 元のテキストを読み取ったまま、オプションで各行を照合用の正規形式に変換することについて説明します
行キーは、一致する前に元のテキストから計算されます。trim() は先頭/末尾の空白を削除し、正規表現は内部の行を 1 つのスペースに置き換えます。 diff アルゴリズムはキーを比較しますが、表示される行には元のテキストが保持されます。共通のプレフィックスとサフィックスは LCS テーブルを作成する前に破棄されるため、大きなドキュメントの小さな編集では必ずしもすべての行を他の行と比較する必要はありません。ダイナミック プログラミング テーブルは両側の長さに応じて増大するため、異なる行数には 2,000 行の上限があります。
実用的な例: 再インデントされた Python 関数と YAML ファイル — Python ビューをクリーンアップし、実際にドキュメントの構造を変更する YAML インデントの変更を非表示にするオプションを示しています。
同じ入れ子レベルを維持しながら、本体全体が 4 つのスペースから 2 つのスペースに変更される Python 関数を想像してください。インデントを無視すると、書式設定上のノイズを隠すことができます。 YAML では、空白が削除されると各行の文字が同一であっても、キーを services.web の下からサービスの下に移動すると、親マッピングが変更されます。両方のスニペットでこのオプションを実行します。Python ビューはレビューしやすくなりますが、データ ツリーを変更しても YAML の変更が消える可能性があります。インデントに依存する形式を承認するために、空白を区別しない出力だけを使用しないでください。
空白がデータの場合 - 空白が意味を持つ形式をリストします: YAML、Makefile、Markdown コード ブロック、固定幅エクスポート、文字列リテラル
スペースは、YAML インデント、Makefile レシピ、Markdown コード ブロック、固定幅エクスポートのデータです。文字列リテラル内で複数のスペースを置き換えると、ユーザーに表示されるテキストや、署名またはハッシュされる値が変更される可能性があります。一般に柔軟な書式設定を備えたコードでも、空白が重要なコンテキストがあります。Python ブロックやシェルのヒアドキュメントがその例です。このオプションでは、言語の文法ではなく単純な行が表示されるため、これらのコンテキストを推測することはできません。比較対象のファイルを理解している場合にのみ選択してください。
空白文字と大文字小文字のオプションを組み合わせる - 両方を有効にすることで、同じ順序で同じ文字に比較を絞り込む方法と、それによって何が隠されるのかについて説明します。
「空白を無視」と「大文字と小文字を無視」を組み合わせると、大文字と小文字やスペースに関係なく、残りの文字と句読点が一致する行に一致が絞り込まれます。これにより、書式設定の多いドキュメントが目立たなくなる可能性がありますが、変更された大文字と小文字を区別する識別子、ヘッダー キー、またはファイル システム パスが隠蔽される可能性もあります。 ToolAcre は、2 番目のオプションをオンにした場合にのみ比較キーを小文字にします。元の行テキストが表示されたままになります。オプションを 1 つずつ切り替えて、各オプションが削除された変更を確認できます。
これでカバーされないこと — このオプションは正規化後に行を比較します。段落のリフロー、移動されたブロックの検出、リッチドキュメントの書式設定の比較は行いません。
この機能は、段落のリフロー、移動されたブロックの検出、HTML レンダリングの比較、または 2 つのプログラム AST が同等かどうかの判断を行いません。 ToolAcre の差分は、一般的な差分チュートリアルで説明されているマイヤーズ アルゴリズムではなく、共通のプレフィックス/サフィックス トリミングを備えたラインベースの LCS 動的プログラミングです。貼り付けられた大きなファイルでは、無制限の行列を割り当てる代わりに停止します。言語対応パーサーまたはバージョン管理レビューを使用して、構造上の主張を確認します。
要点: デフォルトではなく、切り替えてください。両方の比較を実行することを推奨し、ToolAcre のテキスト比較で同じテキストのペアに対して空白オプションのオンとオフを切り替える方法を示します。
デフォルトの真実ではなく、ビューとして空白を無視するように切り替えます。テキスト比較では、ブラウザに貼り付けた内容がすべて保持されるため、契約ファイルや構成ファイルをアップロードしなくても、同じリビジョンの両方のビューを比較できます。正規化されたビューで変更が消えた場合は、無害であると判断する前に、基礎となる形式が空白に意味を与えているかどうかを確認してください。