看懂實作06 / 20
依意圖看改動
本頁內容
Agent 一輪改了幾十個檔案,按檔案逐個看 diff,很難回答「這些改動是為了什麼」。在 Noea 裡,一輪改動可以按它回應的意圖分組:這一處是為了你的哪句話而改。沒有對應任何意圖的改動單獨列在最後,不會混在裡面。
從改動卡進入
Agent 的一輪工作留下了檔案改動,回覆末尾就會出現一張改動卡。只改了一個檔案時,標題是「已編輯 grace.ts」這樣的寫法;改了多個檔案時顯示「已修改 9 個檔案」,旁邊是增刪行數。Agent 通過命令列改的檔案也計算在內。
這一輪被解釋處理過之後,卡片第二行會顯示「2 處意圖 · 1 處未對應」:改動對應到幾段意圖,有幾處沒有對應。還沒有處理時,第二行提供「執行解釋以分類」。
點選整張卡,程式碼面板在主區域最右側的輔助欄中打開,範圍是這一輪的全部改動。對話裡不再重複展示這一輪的 diff。
認識程式碼面板
面板頂部顯示對話標題和回合序號,例如「寬限期郵件通知 · 回合 2」,可以切換到同一對話裡其他有改動的回合。右上角的按鈕開關檔案清單,清單可以平舖或按資料夾顯示,每個檔案附增刪行數,點選跳到該檔案;每個檔案頂部都有「以預設程式開啟」。
diff 只有一列行號:新增行和未改動的行顯示改後的行號,刪除行顯示改前的行號並變淡。改動之間未改動的行折成一行,點選展開,可以一直展開到整個檔案。檔案在這一輪之後又被改過時,面板只顯示這一輪的改動,並提供「檢視目前檔案」。
拖曳輔助欄的左邊緣可以加寬面板;關閉它只收起輔助欄,不影響左邊的文件和對話。
依意圖排列
面板有兩種排列:「按檔案」和「依意圖」。「依意圖」時:
- 每組對應一段意圖,組頭是這段意圖的原文,上方小字寫著它所在的文件和章節。組按段落在意圖文件中的順序排列。
- 組內先按要點、再按檔案排列。每個要點以它的名字為小標題,下面一行小字是它的說明裡「實作」的第一句。
- 每處改動只出現一次。同時對應幾個要點時,歸入最主要的那個,其餘要點以標籤掛在這處改動上。
- 最後固定一組「其餘變更」,放沒有對應任何意圖的改動。
面板預設用哪種排列,取決於解釋對這一輪的處理:
| 解釋的狀態 | 預設排列 |
|---|---|
| 還沒有處理 | 按檔案 |
| 處理中,已有說明對應到這一輪 | 第一段說明發布時自動切到依意圖;還在調查的段落在組內佔位 |
| 正常結束 | 依意圖 |
| 判定沒有需要調查的段落 | 按檔案,並說明「這一回合沒有觸及任何已說明的意圖」 |
你隨時可以切回按檔案查看。
看每處改動對應了什麼
在每處改動上,意圖從輕到重分三層出現:
- 行旁的標記:說明裡明確引用的行,左側有一條中性色的細標記。指向它,會醒目標示同一說明引用的其他行,並顯示意圖的名字。
- 意圖標籤:每處改動的頭部掛著它對應的要點,最多直接顯示兩個,其餘收為「+N 處意圖」。指向標籤可以預覽這段意圖的原文和說明的第一句;點選後,文件在旁邊一欄打開,並展開這條說明。
- 意圖區塊:每處改動下方有一行摺疊的摘要,例如「意圖 2 · 缺口 1」。展開後顯示對應的每段意圖原文,以及這段最新說明裡的注意事項。
改動和意圖的對應有三種來源:「解釋引用」是說明裡明確引用了這些行;「依行區間對應」是改動落在說明引用的行範圍內;「判定未影響」是解釋檢查後認為這處改動不影響那段意圖。如果一處改動覆蓋了檔案的大半,或改動前的內容來自 Agent 回報而不是 Noea 自己讀取,就不按行區間歸類,面板會標明「未按行區間歸類」。
篩選一段意圖的改動
檔案清單頂部的「依意圖篩選」可以只看某一段意圖或某個要點對應的改動。選「未對應意圖」,只看沒有對應任何意圖的改動。
反過來,也可以從意圖找到改動:在意圖文件裡打開一段的說明,旁註最後的「最近實現」列出最近改動過它的回合。點開一個回合,程式碼面板以這一輪為範圍打開,並已經篩選到這段意圖。
讀完之後
「其餘變更」不一定有問題,常見的是測試輔助函式、格式調整或依賴升級。但如果一處業務邏輯的改動不對應任何意圖,值得問一句它為什麼改、是否需要寫進意圖。
在對話裡直接問 Agent,或者在相關段落左側點「詢問這段」。需要留下的決定,見把談定的事寫進意圖。
程式碼面板的分組依賴解釋的結果。如果卡片一直顯示「執行解釋以分類」,檢查「設定 → 自動化」裡的「實作後自動解釋」和「解釋只改程式碼的回合」,或手動點選它,見程式碼變了之後。