開發者工具·文字比較
在審查程式碼時將格式噪音與實際變更分開
· 為什麼它很重要
文字差異 程式碼審查 空白
解釋了為什麼將重新格式化與邏輯變更混合在一起會隱藏錯誤,以及空白不敏感的比較如何讓您先查看實質內容。
400 行更改,實際上是四行 - 打開時進行沒人願意做的審查
格式化程式運作可以將四行邏輯編輯轉換為數百個已變更的行。然後審查注意力從行為轉移到大括號、縮排和換行。第二個空白不敏感視圖可以公開剩餘的文字更改,但它不能證明這些更改是唯一的行為更改。
保留普通審核記錄。 ToolAcre 的選項會修剪和壓縮每個行鍵,同時保留行邊界和原始顯示文字。它是已知檔案的雜訊透鏡,而不是將格式與語義分開的解析器。
為什麼格式和邏輯應該分開審查-解釋了當真正的變化隱藏在表面變化之中時注意力是如何下降的
當工作流程允許時,格式和邏輯應該單獨提交,因為審閱者可以獨立推理每個意圖。當它們組合在一起時,將格式化程式輸出與原始輸出進行比較,然後將最終程式碼與格式化基準進行比較。
這種三態方法比一種激進的標準化方法更強。它標識了格式化程式產生的內容以及作者隨後更改的內容。兩個文字瀏覽器工具可以支援每一對,而版本控制仍然是提交和審查歷史記錄的權威工作流程。
空白不敏感比較保留的內容 — 描述仍顯示的內容:變更的識別碼、值、運算子和重新排序的語句
當規範化行鍵不同時,空白不敏感匹配仍然會公開更改的識別符、文字、運算符和行順序。它還保留添加或刪除的行。由於空格被壓縮而不是被刪除,因此 `ab` 和 `a b` 仍然是不同的鍵。
此選項仍可隱藏前導縮排、尾隨空格以及內部空白運轉之間的變更。這些在 Python、YAML、Makefile、固定寬度資料、字串文字和其他上下文中是有意義的。 diff 沒有語法來區分安全格式和有效間距。
工作範例:格式化程式執行加上錯誤修復 - 比較有和沒有空格選項的函數的兩個版本以隔離實際修復
對函數執行格式化程序,然後將 `limit < 10` 改為 `limit <= 10`。普通模式可能會顯示每個重新縮排的行;空白模式應該使按鍵安靜,唯一的區別是空格,同時讓操作員編輯作為刪除加添加對。
在批准之前檢查該操作員周圍的嚴格視圖。如果語言允許行延續或縮排敏感區塊,則儘管規範化匹配,格式變更仍可能影響行為。 ToolAcre 報告行文字,而不是編譯或控制流。
忽略程式碼中空格的限制 - 註解縮排敏感的語言和字串文字,其中空格有意義
Python 區塊縮排和 YAML 巢狀是明顯的危險。正規表示式、shell here-documents、Markdown 程式碼區塊或面向使用者的字串文字中的空格也同樣有意義。對空白不敏感的結果不應該成為這些區域的唯一審查。
執行兩個通道並將分歧視為資訊。如果嚴格模式發生變化但規範化模式沒有變化,則使用語言的實際規則對區域進行分類。不要僅僅從消失就推斷無害;該選項僅在其記錄的轉換後證明相等。
將程式碼從審查工具中取出並進行快速比較 - 解釋了當審查介面自己的噪音過濾器不可用時貼上兩個版本
當託管介面缺乏足夠的噪音過濾器時,請將一個小的非秘密區域複製到瀏覽器工具中。保留足夠的未更改上下文以對齊編輯,並避免在批准的審核環境之外貼上憑證或專有檔案。
折疊長時間未更改的執行可以使遠端編輯更易於掃描。它會圍繞當前 UI 中的變更保留三個上下文行,並插入長相等範圍的跳過計數。這只是演示;完整的底層行列表仍然可供補丁下載。
這不包括什麼 - 語法突出顯示、理解語言語義或替換版本控制審核工作流程
文字差異不提供語法反白、語言語意、編譯器檢查或重新命名偵測。它不能取代拉請求審查、測試或靜態分析。移動的函數可能會被刪除和添加,並不區分大小寫的傳遞可以隱藏區分大小寫的標識符更改。
使用此頁面作為聚焦的輔助視圖。來源的 O(n·m) LCS 適用於有界差分中間,而不是在任意儲存庫上即時效能的無條件承諾。整個專案審查屬於為儲存庫和語言結構所建構的工具。
重點:先回顧實質內容,然後再回顧風格 — 總結使用 ToolAcre 的文字比較切換空白選項的兩遍方法
透過兩次明確的審查內容和風格。首先保留精確的字元;然後啟用空白規範化來定位倖存下來的變更。使用語言的規則而不是複選框的結果來解釋任何隱藏區域。
這一學科將嘈雜的比較變成了問題列表,而不假裝格式普遍都是裝飾性的。 ToolAcre提供透明行操作和原始行。編譯器、測試和人工審查提供了文字比較器無法提供的行為證據。