diff --git a/README.md b/README.md index dffc6f7..3e9a0b4 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ jsc 技能組的 review domain:基於《Refactoring》壞味道目錄的六組審查(結構與體積、可讀性與命名、耦合與設計、邏輯與壞習慣、註解規範、淺模組),套用在檔案變更完成與實作完成兩個時機。 -## 安裝 / 更新 / 移除 +## 安裝、更新、移除 Marketplace 統一為 `jsc`(https://gitea.jsc.idv.tw/plugins/jsc.git),安裝 token 為 `jsc-review@jsc`。每個指令一行: diff --git a/references/smells.md b/references/smells.md index 4e1bc54..b1d801d 100644 --- a/references/smells.md +++ b/references/smells.md @@ -2,7 +2,7 @@ 來源:《Refactoring》(Martin Fowler)與《A Philosophy of Software Design》(John Ousterhout,第 6 組)。 `code-review` 技能依此清單分六組審查,每組由一個 sub agent 執行。 -每項格式:**定義 / 偵測訊號 / 建議重構手法**。 +每項格式:**定義、偵測訊號、建議重構手法**。 ## 第 1 組:結構與體積問題(Bloaters) @@ -41,13 +41,13 @@ ### 2.2 魔術數字(Magic Numbers) - **定義**:程式碼中直接出現沒人知道代表什麼的字面值。 -- **偵測訊號**:條件式或運算中出現裸數字/裸字串(0、1、-1、空字串與明顯單位換算除外需判斷);同一字面值在多處出現。 +- **偵測訊號**:條件式或運算中出現裸數字、裸字串(0、1、-1、空字串與明顯單位換算除外需判斷);同一字面值在多處出現。 - **建議重構手法**:Replace Magic Literal(抽成具名常數或 enum);有行為就升級為 Replace Type Code with Class。 ### 2.3 死碼(Dead Code) - **定義**:已經不用卻不刪除的註解掉程式碼、變數、函式或類別。 -- **偵測訊號**:被註解掉的程式碼區塊;無人呼叫的函式/類別(grep 全庫零引用);永遠不成立的條件分支;未使用的 import、參數、變數。 +- **偵測訊號**:被註解掉的程式碼區塊;無人呼叫的函式、類別(grep 全庫零引用);永遠不成立的條件分支;未使用的 import、參數、變數。 - **建議重構手法**:Remove Dead Code(直接刪除,歷史交給版本控制)。 ### 2.4 過度註解(Comments) @@ -68,7 +68,7 @@ ### 3.2 散彈式修改(Shotgun Surgery) - **定義**:每當要修改一個小功能,就必須同時修改多個不同的檔案。 -- **偵測訊號**:本次 diff 為了單一需求橫跨多檔做同質小改動;同一常數/規則散落多處;歷史上同組檔案總是一起被改。 +- **偵測訊號**:本次 diff 為了單一需求橫跨多檔做同質小改動;同一常數或規則散落多處;歷史上同組檔案總是一起被改。 - **建議重構手法**:Move Function / Move Field 集中職責、Combine Functions into Class、Inline Function 後重新抽取。 ### 3.3 發散式變化(Divergent Change) @@ -100,13 +100,13 @@ ### 4.3 誇誇其談未來性(Speculative Generality) - **定義**:為了解決「未來可能」會用到的功能,寫了一堆現在用不到的複雜架構。 -- **偵測訊號**:只有一個實作的抽象層/介面;從未被覆寫的 hook 方法;只在測試中使用的參數或彈性;「以後可能會需要」的註解。 +- **偵測訊號**:只有一個實作的抽象層或介面;從未被覆寫的 hook 方法;只在測試中使用的參數或彈性;「以後可能會需要」的註解。 - **建議重構手法**:Collapse Hierarchy、Inline Function / Inline Class、Remove Dead Code、移除未用參數(Change Function Declaration)。 ### 4.4 吞掉異常(Swallowed Exceptions) - **定義**:try-catch 裡面留白,發生錯誤時直接隱瞞,導致難以 Debug。 -- **偵測訊號**:空的 catch 區塊;catch 後只留註解或 `// ignore`;catch 住廣義 Exception 後回傳 null/預設值而不記錄;錯誤訊息被丟棄後重包。 +- **偵測訊號**:空的 catch 區塊;catch 後只留註解或 `// ignore`;catch 住廣義 Exception 後回傳 null 或預設值而不記錄;錯誤訊息被丟棄後重包。 - **建議重構手法**:最少要記錄(log)並保留原始例外鏈;能處理才 catch,不能處理就往上拋;以 Introduce Special Case 取代以 null 掩蓋錯誤。 ## 第 5 組:註解問題(介面契約註解) @@ -115,7 +115,7 @@ ### 5.1 方法描述 -- **定義**:每個公開方法要有一句話描述,並標明所屬層級:**顯示層 / 邏輯層 / 存取層**。 +- **定義**:每個公開方法要有一句話描述,並標明所屬層級:**顯示層、邏輯層、存取層**。 - **偵測訊號**:公開方法無描述;描述未標層級;描述與方法實際行為不符。 - **建議重構手法**:補上單句描述與層級標記;若一個方法橫跨多層,先依 Split Phase 拆分再各自標註。 @@ -128,7 +128,7 @@ ### 5.3 輸出說明 - **定義**:輸出(回傳值)要說明回傳的資料內容概要。 -- **偵測訊號**:無回傳說明;未說明 null/空集合/錯誤時的回傳;回傳布林但未說明 true/false 意義。 +- **偵測訊號**:無回傳說明;未說明 null、空集合、錯誤時的回傳;回傳布林但未說明 true/false 意義。 - **建議重構手法**:補回傳內容概要與邊界情況說明。 ### 5.4 輸入與輸出範例