開発者ツール · テキスト比較
コードをレビューするときに書式設定ノイズを実際の変更から分離する
· なぜそれが重要なのか
テキストの差分 コードレビュー 空白
再フォーマットとロジック変更を組み合わせるとバグが隠れる理由と、空白を区別しない比較によって最初に内容を確認できる方法について説明します。
400 行の変更 (実際には 4 行) — 誰もやりたくないレビューで始まります
フォーマッタを実行すると、4 行のロジック編集が数百の変更された行に変わる可能性があります。その後、動作から中括弧、インデント、折り返しに注意を移します。空白を区別しない 2 番目のビューでは、残りのテキストの変更が公開される可能性がありますが、それらの変更が動作上の唯一の変更であることを保証することはできません。
通常のレビューを記録として保存します。 ToolAcre のオプションは、行の境界と元の表示テキストを保持しながら、各行キーをトリミングして圧縮します。これは既知のファイルに対するノイズ レンズであり、書式設定とセマンティクスを分離するパーサーではありません。
書式設定とロジックを別々に検討する必要がある理由 — 表面的な変更の中に実際の変更が隠れると、どのように注意が低下するかを説明します
ワークフローで許可されている場合、書式設定とロジックは個別にコミットする価値があります。これは、レビュー担当者が各意図を個別に推論できるためです。これらが結合されて到着したら、フォーマッタ出力を元のコードと比較し、次に最終コードをそのフォーマットされたベースラインと比較します。
この 3 つの状態の方法は、1 つの積極的な正規化よりも強力です。フォーマッタが何を作成したか、そして作成者がその後何を変更したかを識別します。 2 テキストのブラウザ ツールは各ペアをサポートできますが、バージョン管理はコミットとレビュー履歴の信頼できるワークフローのままです。
空白を区別しない比較で維持されるもの — 引き続き表示されるものについて説明します: 変更された識別子、値、演算子、並べ替えられたステートメント
空白を区別しないマッチングでは、正規化された行キーが異なる場合でも、変更された識別子、リテラル、演算子、および行順序が公開されます。追加または削除された行も保持されます。空白は削除されずに圧縮されるため、`ab` と `a b` は異なるキーのままになります。
このオプションでは、先頭のインデント、末尾のスペース、および内部の空白文字間の変更を非表示にすることができます。これらは、Python、YAML、Makefile、固定幅データ、文字列リテラル、その他のコンテキストで意味を持ちます。 diff には、重要なスペースから安全な書式設定を伝える文法がありません。
有効な例: フォーマッタの実行とバグ修正 — 空白オプションを使用した場合と使用しない場合の 2 つのバージョンの関数を比較して、実際の修正を分離します。
関数に対してフォーマッタを実行し、`limit < 10` を `limit <= 10` に変更します。通常モードでは、再インデントされたすべての行が表示されます。ホワイトスペース モードでは、演算子の編集を削除と追加のペアとして残しておきながら、唯一の違いはスペースだけであるキーを沈黙させる必要があります。
承認前に、そのオペレーターに関する厳密なビューを検査します。言語で行継続またはインデントに依存するブロックが許可されている場合、正規化された一致にもかかわらず、書式変更が動作に影響を与える可能性があります。 ToolAcre は、コンパイルや制御フローではなく、行テキストをレポートします。
コード内の空白を無視する際の制限 — インデントに依存する言語と、空白が重要な文字列リテラルについての注意事項
Python ブロックのインデントと YAML のネストは明らかな危険です。正規表現、シェルのヒアドキュメント、Markdown コード ブロック、またはユーザー向けの文字列リテラル内のスペースも同様に意味を持ちます。空白を区別しない結果が、これらの領域の唯一のレビューとなるべきではありません。
両方のパスを実行し、意見の不一致を情報として扱います。厳密モードが変更されても正規化モードが変更されない場合は、言語の実際のルールを使用して領域を分類します。失踪だけから無害であると推測しないでください。このオプションは、文書化された変換後にのみ同等であることを証明します。
レビュー ツールからコードを取り出して簡単に比較する - レビュー インターフェイス独自のノイズ フィルターが使用できない場合に両方のバージョンを貼り付ける方法について説明します
ホスティング インターフェイスに適切なノイズ フィルターがない場合は、小さな非秘密領域をブラウザ ツールにコピーします。編集を調整するために十分な変更されていないコンテキストを保持し、承認されたレビュー環境外に認証情報や独自のファイルを貼り付けることを避けてください。
長期間変更されていない実行を折りたたむと、遠く離れた編集をスキャンしやすくなります。現在の UI の変更に関する 3 つのコンテキスト行を保持し、長い等しい範囲のスキップ カウントを挿入します。それはプレゼンテーションのみです。基礎となる完全な行リストは、引き続きパッチのダウンロードに使用できます。
これでカバーされないもの — 構文の強調表示、言語セマンティクスの理解、またはバージョン管理レビュー ワークフローの置き換え
テキスト diff は、構文の強調表示、言語セマンティクス、コンパイラ チェック、または名前変更の検出を提供しません。プルリクエストのレビュー、テスト、静的分析に代わるものではありません。移動された関数は削除および追加されたように見える場合があり、大文字と小文字を区別しないパスでは、大文字と小文字を区別する識別子の変更が隠蔽される可能性があります。
このページは、重点を置いた補助ビューとして使用します。ソースの O(n·m) LCS は、任意のリポジトリでの即時のパフォーマンスの不適格な約束ではなく、制限された異なる中間に適用されます。プロジェクト全体のレビューは、リポジトリと言語構造用に構築されたツールに属します。
要点: 内容を確認してからスタイルを確認 — 空白オプションを切り替える ToolAcre のテキスト比較による 2 パス アプローチを要約します。
2 つの明示的なパスで内容とスタイルを確認します。まず正確な文字を保持します。次に、空白の正規化を有効にして、生き残った変更を見つけます。チェックボックスの結果ではなく、言語のルールを使用して非表示領域を説明します。
この規律は、書式設定が普遍的に表面的なものであるかのように装うことなく、ノイズの多い比較を質問リストに変えます。 ToolAcre は、透明なライン操作とオリジナルの行を提供します。コンパイラ、テスト、人間によるレビューは、テキスト コンパレータでは得られない動作の証拠を提供します。