docs(doc-funcs): 補強 README 產生規則
This commit is contained in:
@@ -175,7 +175,7 @@ rm -rf ~/.config/opencode/skills/doc-docker ~/.config/opencode/skills/doc-funcs
|
|||||||
|
|
||||||
### `doc-funcs`
|
### `doc-funcs`
|
||||||
|
|
||||||
掃描目前專案所有可文件化的 function/method,建立 `.docs/doc-funcs-index.md` 與逐 function 草稿,再依草稿補齊 XML documentation comments,最後重建 README 功能列表與使用範例並執行合適驗證。當使用者要補齊 function 文件、產生 XML doc、為每個 method 加 summary/param/remarks、建立 .docs 草稿,或提到 doc-funcs、function 文件化、XML documentation comments 時使用此 skill。
|
掃描目前專案所有可文件化的 function/method,建立 `.docs/doc-funcs-index.md` 與逐 function 草稿,再依草稿補齊 XML documentation comments,最後重建 README 功能列表與使用範例;遇到跨專案或跨命名空間的同名型別時會在功能名稱補上模組/專案前綴,並會跳脫 Markdown 表格、link text、heading 中的 C# 泛型角括號,檢查功能列表連結與使用範例 anchor 一致後執行合適驗證。當使用者要補齊 function 文件、產生 XML doc、為每個 method 加 summary/param/remarks、建立 .docs 草稿,或提到 doc-funcs、function 文件化、XML documentation comments 時使用此 skill。
|
||||||
|
|
||||||
- **Claude Code / Antigravity**:`/jsc:doc-funcs`
|
- **Claude Code / Antigravity**:`/jsc:doc-funcs`
|
||||||
- **Codex**:`$doc-funcs`,或用 `/skills` 選單
|
- **Codex**:`$doc-funcs`,或用 `/skills` 選單
|
||||||
|
|||||||
@@ -20,12 +20,27 @@ description: 為目前專案的每個 function 建立 .docs/ 草稿並補齊 XML
|
|||||||
4. 在實作到原始碼之前,主 agent 必須檢查所有草稿內容是否以繁體中文為主、英文為輔,且沒有任何亂碼、編碼錯誤、不可讀字元或明顯破損文字。若發現問題,先修正草稿並重新檢查,通過後才能進入下一步。
|
4. 在實作到原始碼之前,主 agent 必須檢查所有草稿內容是否以繁體中文為主、英文為輔,且沒有任何亂碼、編碼錯誤、不可讀字元或明顯破損文字。若發現問題,先修正草稿並重新檢查,通過後才能進入下一步。
|
||||||
5. 所有草稿完成且通過檢查後,主 agent 要閱讀草稿並實作到原始碼。若是 C#,使用 XML documentation comments:`<summary>`、`<param>`、`<remarks>`。註解盡量使用繁體中文;保留既有正確文件,僅補齊缺漏或明顯不足處;不要為了文件改變 runtime 行為。
|
5. 所有草稿完成且通過檢查後,主 agent 要閱讀草稿並實作到原始碼。若是 C#,使用 XML documentation comments:`<summary>`、`<param>`、`<remarks>`。註解盡量使用繁體中文;保留既有正確文件,僅補齊缺漏或明顯不足處;不要為了文件改變 runtime 行為。
|
||||||
6. 若遇到大量 function,仍要分批持續處理,不要只做示範。若 token 或時間不足,先完成已列入 index 的批次,並在 .docs/doc-funcs-index.md 標記 pending。
|
6. 若遇到大量 function,仍要分批持續處理,不要只做示範。若 token 或時間不足,先完成已列入 index 的批次,並在 .docs/doc-funcs-index.md 標記 pending。
|
||||||
7. 補齊後,重建專案根目錄的 README.md。若根目錄已有 README.md,先刪除既有檔案,再產生新的 README.md;不要保留或合併舊內容。README 必須包含更新時間,且只列出所有專案內的公開方法(public method、public constructor、public extension method、public operator),但不得列出單元測試方法;若方法位於測試專案、測試檔案、測試型別,或帶有測試框架屬性/命名(例如 `Test`、`Fact`、`Theory`、`TestMethod`、`TestCase`、`SetUp`、`TearDown`、`Initialize`、`Cleanup`),即使是 public 也要排除。README 內容拆成兩個主要區塊:
|
7. 補齊後,重建專案根目錄的 README.md。若根目錄已有 README.md,先刪除既有檔案,再產生新的 README.md;不要保留或合併舊內容。README 必須包含更新時間,且只列出所有專案內的公開方法(public method、public constructor、public extension method、public operator),但不得列出單元測試方法;若方法位於測試專案、測試檔案、測試型別,或帶有測試框架屬性/命名(例如 `Test`、`Fact`、`Theory`、`TestMethod`、`TestCase`、`SetUp`、`TearDown`、`Initialize`、`Cleanup`),即使是 public 也要排除。產生 README 前,必須先為每個公開方法決定「最終功能名稱」:
|
||||||
- 功能列表:依專案名稱分組;每個專案使用一張 Markdown 表格呈現公開方法,欄位固定為「功能名稱」、「功能描述」。功能名稱需做成 Markdown 連結,導向目標專案 git `origin` 遠端上的對應檔案 function 起始行;功能描述使用簡單版描述,並做成 Markdown 連結,導向同一份 README 內「使用範例」區塊中該功能的標題錨點。
|
- 預設功能名稱為 `Type.Method`。
|
||||||
- 使用範例:每個功能各有一個標題,標題文字使用功能名稱;標題下方包含完整版功能描述與使用範例。完整版功能描述可依草稿的行為分析、`<summary>`、`<param>`、`<remarks>` 整理;使用範例需展示典型呼叫方式、重要前置條件與預期結果。若無法可靠產生可執行範例,提供保守的情境式範例並標註需人工確認。
|
- 若公開方法所在的型別簡名在不同專案或不同命名空間中重複,最終功能名稱不得只使用 `Type.Method`,必須在型別前加入可辨識的專案或模組前綴,格式為 `Module.Type.Method`。例如 `Hangfire.ServiceCollectionExtension.AddHangfireOptions`、`Hangfire.SqlServer.ServiceCollectionExtension.AddSqlServerHangfire`、`Swagger.ServiceCollectionExtension.AddSwagger`、`Swagger.ApplicationBuilderExtension.UseSwaggerUI`。
|
||||||
|
- 模組前綴優先取專案名稱、套件名稱或命名空間中最短且能區分同名型別的一段或多段名稱;若專案名稱與命名空間都可用,優先選擇對使用者最能辨識功能所屬模組的名稱。不得只靠遞增數字、隱藏 suffix 或不可見字元處理重複名稱。
|
||||||
|
- 若同一個最終功能名稱仍因多載或同名方法重複,需在標題文字中加入可讀且語意明確的參數摘要,例如 `Module.Type.Method(string name, int count)`;同樣不得使用單純數字 suffix 當主要解法。
|
||||||
|
- 最終功能名稱、使用範例標題、功能描述與任何會輸出到 Markdown 表格、Markdown link text 或 heading 的文字,若包含 C# 泛型角括號,輸出前必須先做 Markdown/HTML 安全跳脫:`<` 轉為 `<`,`>` 轉為 `>`。例如 `ResponseModelExtension.WithData<TData>` 必須輸出為 `ResponseModelExtension.WithData<TData>`,`ResponseModelExtension.WithData(ResponseModel<object>)` 必須輸出為 `ResponseModelExtension.WithData(ResponseModel<object>)`。不得在表格、link text 或 heading 中輸出裸 `WithData<TData>`、`ResponseModel<object>`、`Dictionary<string, object>` 這類泛型片段。
|
||||||
|
- README 內部 anchor id 必須用未跳脫的最終功能名稱產生安全 slug,再移除或正規化泛型標點;anchor id 不使用 `<` 或 `>`。例如 `ResponseModelExtension.WithData<TData>` 的 anchor 可為 `responsemodelextensionwithdatatdata`,`ResponseModelExtension.WithData(ResponseModel<object>)` 的 anchor 可為 `responsemodelextensionwithdataresponsemodelobject`。同一個功能在功能列表與使用範例中必須共用同一個 anchor。
|
||||||
|
README 內容拆成兩個主要區塊:
|
||||||
|
- 功能列表:依專案名稱分組;每個專案使用一張 Markdown 表格呈現公開方法,欄位固定為「功能名稱」、「功能描述」。功能名稱顯示已跳脫的最終功能名稱,並需做成 Markdown 連結,導向目標專案 git `origin` 遠端上的對應檔案 function 起始行;功能描述使用已跳脫的簡單版描述,並做成 Markdown 連結,導向同一份 README 內「使用範例」區塊中該功能的標題錨點。
|
||||||
|
- 使用範例:每個功能各有一個標題,標題文字使用同一個已跳脫的最終功能名稱;標題前必須放置 `<a id="..."></a>`。`id` 必須由未跳脫的最終功能名稱產生安全 slug,且功能列表中功能描述連結的 `#anchor` 必須與對應使用範例標題前的 `<a id="anchor"></a>` 完全一致。完整版功能描述可依草稿的行為分析、`<summary>`、`<param>`、`<remarks>` 整理並完成必要跳脫;使用範例需展示典型呼叫方式、重要前置條件與預期結果。若無法可靠產生可執行範例,提供保守的情境式範例並標註需人工確認。
|
||||||
功能名稱連結必須以執行此 skill 的目標專案為準,先用 `git remote get-url origin` 取得遠端,再搭配目前分支、檔案相對於目標專案根目錄的路徑與 function 起始行號產生,不得使用本 skill repo、工作區外 repo 或硬編碼的外部 repo 座標。若 origin 是 SSH 格式(例如 `git@gitea.example.com:owner/repo.git`),需轉為對應 HTTPS 瀏覽 URL;若 origin 已是 HTTPS,沿用同一個 host 與 repo path,並移除尾端 `.git`。Gitea 類網址使用 `/src/branch/<branch>/<path>#L123`,GitHub 類網址使用 `/blob/<branch>/<path>#L123`;無法可靠判斷平台時,優先採 Gitea 格式。若無法可靠解析目標專案的 `origin` 遠端、目前分支、檔案路徑或行號,才退回純文字功能名稱;README 不必列出內部呼叫方法。
|
功能名稱連結必須以執行此 skill 的目標專案為準,先用 `git remote get-url origin` 取得遠端,再搭配目前分支、檔案相對於目標專案根目錄的路徑與 function 起始行號產生,不得使用本 skill repo、工作區外 repo 或硬編碼的外部 repo 座標。若 origin 是 SSH 格式(例如 `git@gitea.example.com:owner/repo.git`),需轉為對應 HTTPS 瀏覽 URL;若 origin 已是 HTTPS,沿用同一個 host 與 repo path,並移除尾端 `.git`。Gitea 類網址使用 `/src/branch/<branch>/<path>#L123`,GitHub 類網址使用 `/blob/<branch>/<path>#L123`;無法可靠判斷平台時,優先採 Gitea 格式。若無法可靠解析目標專案的 `origin` 遠端、目前分支、檔案路徑或行號,才退回純文字功能名稱;README 不必列出內部呼叫方法。
|
||||||
8. README 重建完成後,刪除本次產生的所有草稿與索引:`.docs/doc-funcs/` 與 `.docs/doc-funcs-index.md`。若 `.docs/` 內已無其他內容,可一併移除空的 `.docs/` 目錄;不得刪除使用者既有的 `.docs/` 其他檔案。
|
8. README 重建完成後,必須自動檢查 README 內部錨點一致性;檢查未通過時要先修正 README 再清理草稿。至少確認:
|
||||||
9. 完成後執行合適的格式化/建置或至少語法驗證;若無法執行,說明原因。
|
- 功能列表中的每個功能描述連結 `#anchor` 都存在完全相同的 `<a id="anchor"></a>`。
|
||||||
|
- 使用範例區塊中沒有重複的 `<a id="..."></a>`。
|
||||||
|
- 使用範例區塊中沒有未被功能列表引用的 anchor。
|
||||||
|
- 最後一個功能列表項目的功能描述連結能對應到最後一個使用範例 anchor。
|
||||||
|
- Markdown 表格的 link text 與使用範例 heading 中不得殘留裸泛型角括號模式,例如 `<TData>`、`<object>`、`<string, object>`;這些內容必須已轉為 `<...>`,但 `<a id="..."></a>` 錨點標籤本身不列為違規。
|
||||||
|
- 最後一個功能列表項目後面的章節標題不得被前一個 source link 包住;必須檢查最後一列 Markdown link 的 URL 括號已正確閉合,且後續 `##`/`###` heading 沒有落入任何未閉合的 link 文字或 URL 中。
|
||||||
|
- 若檢查發現同名型別造成 anchor 或標題語意不明,應回到最終功能名稱產生規則,優先補上專案/模組前綴後重新產生 README。
|
||||||
|
9. README 錨點檢查通過後,刪除本次產生的所有草稿與索引:`.docs/doc-funcs/` 與 `.docs/doc-funcs-index.md`。若 `.docs/` 內已無其他內容,可一併移除空的 `.docs/` 目錄;不得刪除使用者既有的 `.docs/` 其他檔案。
|
||||||
|
10. 完成後執行合適的格式化/建置或至少語法驗證;若無法執行,說明原因。
|
||||||
|
|
||||||
## 重要限制
|
## 重要限制
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user