SKILL.md
readonlyread-only
name
write-coding-standards-from-file
description
根據傳入的檔案和/或資料夾中的編碼風格,為專案撰寫一份編碼標準文件。
從檔案撰寫編碼標準
利用現有檔案的語法來建立專案的編碼標準與風格指南。如果傳入多個檔案或一個資料夾,則逐一處理每個檔案或資料夾中的檔案,將檔案資料附加到暫存記憶體或檔案中,完成後將暫存資料視為單一實例,作為制定標準與風格指南的依據。
規則與設定
以下是一組準設定用的 boolean 與 string[] 變數。各變數在 true 或其他值時的處理條件,請參見二級標題 ## Variable and Parameter Configuration Conditions。
提示詞的參數有文字定義。有一個必要參數 ${fileName},以及數個選用參數 ${folderName}、${instructions},以及任何 [configVariableAsParameter]。
設定變數
- addStandardsTest = false;
- addToREADME = false;
- addToREADMEInsertions = ["atBegin", "middle", "beforeEnd", "bestFitUsingContext"];
- 預設為 beforeEnd。
- createNewFile = true;
- fetchStyleURL = true;
- findInconsistencies = true;
- fixInconsistencies = true;
- newFileName = ["CONTRIBUTING.md", "STYLE.md", "CODE_OF_CONDUCT.md", "CODING_STANDARDS.md", "DEVELOPING.md", "CONTRIBUTION_GUIDE.md", "GUIDELINES.md", "PROJECT_STANDARDS.md", "BEST_PRACTICES.md", "HACKING.md"];
- 對於
${newFileName}中的每個檔名,若檔案不存在則使用該檔名並break,否則繼續到下一個檔名。
- 對於
- outputSpecToPrompt = false;
- useTemplate = "verbose"; // 或 "v"
- 可能的值為
[["v", "verbose"], ["m", "minimal"], ["b", "best fit"], ["custom"]]。 - 選取提示詞檔案底部二級標題
## Coding Standards Templates下的兩個範本之一,或使用更合適的其他組合。 - 若為 custom,則依請求自訂。
- 可能的值為
作為提示詞參數的設定變數
如果任何變數名稱以原樣或相似但明確相關的文字值傳入提示詞,則以傳入的值覆蓋預設變數值。
提示詞參數
- fileName = 要分析的檔案名稱,分析項目包括:縮排、變數命名、註解、條件式、函式以及其他與檔案程式語言相關的語法資料。
- folderName = 要從中提取多個檔案資料並彙總成單一資料集的資料夾名稱,分析項目包括:縮排、變數命名、註解、條件式、函式以及其他與檔案程式語言相關的語法資料。
- instructions = 針對特殊情況提供的額外指示、規則與程序。
- [configVariableAsParameter] = 若傳入,則覆蓋設定變數的預設狀態。例如:
- useTemplate = 若傳入,則覆蓋設定
${useTemplate}的預設值。值為[["v", "verbose"], ["m", "minimal"], ["b", "best fit"]]。
- useTemplate = 若傳入,則覆蓋設定
必要與選用參數
- fileName - 必要
- folderName - 選用
- instructions - 選用
- [configVariableAsParameter] - 選用
Variable and Parameter Configuration Conditions
${fileName}.length > 1 || ${folderName} != undefined
- 若為 true,則將
${fixInconsistencies}切換為 false。
${addToREADME} == true
- 將編碼標準插入
README.md中,而非輸出到提示詞或建立新檔案。 - 若為 true,則將
${createNewFile}與${outputSpecToPrompt}都切換為 false。
${addToREADMEInsertions} == "atBegin"
- 若
${addToREADME}為 true,則將編碼標準資料插入README.md檔案的開頭(標題之後)。
${addToREADMEInsertions} == "middle"
- 若
${addToREADME}為 true,則將編碼標準資料插入README.md檔案的中間,並將標準的標題調整為與README.md內容相符。
${addToREADMEInsertions} == "beforeEnd"
- 若
${addToREADME}為 true,則將編碼標準資料插入README.md檔案的結尾,在最後一個字元後插入新行,然後在新行插入資料。
${addToREADMEInsertions} == "bestFitUsingContext"
- 若
${addToREADME}為 true,則根據README.md內容的上下文與資料流,將編碼標準資料插入README.md檔案中最合適的行。
${addStandardsTest} == true
- 編碼標準檔案完成後,撰寫一個測試檔案,確保傳入的檔案符合編碼標準。
${createNewFile} == true
- 使用
${newFileName}中的值或其中一個可能的值建立新檔案。 - 若為 true,則將
${outputSpecToPrompt}與${addToREADME}都切換為 false。
${fetchStyleURL} == true
- 另外使用三級標題
### Fetch Links下連結中取得的資料,作為建立新檔案、提示詞或README.md的標準、規格與樣式資料的參考。 - 對於
### Fetch Links中的每個相關項目,執行#fetch ${item}。
${findInconsistencies} == true
- 評估與縮排、換行、註解、條件式與函式巢狀結構、字串引號(例如
'或")等相關的語法,並進行分類。 - 對每個分類進行計數,若某項目與多數不符,則將其存入暫存記憶體。
- 根據
${fixInconsistencies}的狀態,編輯並修正計數較少的分類以符合多數,或將暫存記憶體中的不一致項目輸出到提示詞。
${fixInconsistencies} == true
- 編輯並修正語法資料中計數較少的分類,使其與多數相符,使用暫存記憶體中的不一致資料。
typeof ${newFileName} == "string"
- 若明確定義為
string,則使用${newFileName}的值建立新檔案。
typeof ${newFileName} != "string"
- 若未明確定義為
string,而是object或陣列,則透過以下規則從${newFileName}中選取一個值來建立新檔案:- 對於
${newFileName}中的每個檔名,若檔案不存在,則使用該檔名並break,否則繼續到下一個。
- 對於
${outputSpecToPrompt} == true
- 將編碼標準輸出到提示詞,而非建立檔案或加入 README。
- 若為 true,則將
${createNewFile}與${addToREADME}都切換為 false。
${useTemplate} == "v" || ${useTemplate} == "verbose"
- 使用三級標題
### "v", "verbose"下的資料作為撰寫編碼標準時的引導範本。
${useTemplate} == "m" || ${useTemplate} == "minimal"
- 使用三級標題
### "m", "minimal"下的資料作為撰寫編碼標準時的引導範本。
${useTemplate} == "b" || ${useTemplate} == "best"
- 根據從
${fileName}提取的資料,選用三級標題### "v", "verbose"或### "m", "minimal"下的資料,並使用最合適的作為撰寫編碼標準時的引導範本。
${useTemplate} == "custom" || ${useTemplate} == "<ANY_NAME>"
- 使用自訂的提示詞、指示、範本或其他傳入的資料作為撰寫編碼標準時的引導範本。
if ${fetchStyleURL} == true
根據程式語言,對下方清單中的每個連結執行 #fetch (URL),若程式語言符合 ${fileName} == [<Language> Style Guide]。
Fetch Links
- C Style Guide
- C# Style Guide
- C++ Style Guide
- Go Style Guide
- Java Style Guide
- AngularJS App Style Guide
- jQuery Style Guide
- JavaScript Style Guide
- JSON Style Guide
- Kotlin Style Guide
- Markdown Style Guide
- Perl Style Guide
- PHP Style Guide
- Python Style Guide
- Ruby Style Guide
- Rust Style Guide
- Swift Style Guide
- TypeScript Style Guide
- Visual Basic Style Guide
- Shell Script Style Guide
- Git Usage Style Guide
- PowerShell Style Guide
- CSS
- Sass Style Guide
- HTML Style Guide
- Linux kernel Style Guide
- Node.js Style Guide
- SQL Style Guide
- Angular Style Guide
- Vue Style Guide
- Django Style Guide
- SystemVerilog Style Guide
Coding Standards Templates
"m", "minimal"
```markdown
## 1. 簡介
* **目的:** 簡要說明為何要建立編碼標準(例如,提升程式碼品質、可維護性與團隊協作)。
* **範圍:** 定義此規範適用的語言、專案或模組。
## 2. 命名慣例
* **變數:** `camelCase`
* **函式/方法:** `PascalCase` 或 `camelCase`。
* **類別/結構:** `PascalCase`。
* **常數:** `UPPER_SNAKE_CASE`。
## 3. 格式化與風格
* **縮排:** 每個縮排層級使用 4 個空格(或定位字元)。
* **行長:** 每行最多 80 或 120 個字元。
* **大括號:** 使用 "K&R" 風格(左大括號在同一行)或 "Allman" 風格(左大括號在新行)。
* **空行:** 指定用於分隔邏輯區塊的空行數量。
## 4. 註解
* **文件字串/函式註解:** 描述函式的用途、參數與回傳值。
* **行內註解:** 解釋複雜或不明顯的邏輯。
* **檔案標頭:** 指定檔案標頭應包含的資訊,例如作者、日期與檔案描述。
## 5. 錯誤處理
* **一般:** 如何處理與記錄錯誤。
* **具體:** 應使用哪些例外類型,以及錯誤訊息中應包含哪些資訊。
## 6. 最佳實務與反模式
* **一般:** 列出應避免的常見反模式(例如,全域變數、魔術數字)。
* **語言特定:** 根據專案的程式語言提供具體建議。
## 7. 範例
* 提供一個小型程式碼範例,展示規則的正確應用。
* 提供一個小型程式碼範例,展示錯誤的實作方式以及如何修正。
## 8. 貢獻與執行
* 說明如何執行這些標準(例如,透過程式碼審查)。
* 提供貢獻於標準文件本身的指南。
```
"v", verbose"
```markdown
# 風格指南
本文件定義了此專案中使用的風格與慣例。
除非另有說明,所有貢獻都應遵循這些規則。
## 1. 一般程式碼風格
- 清晰勝於簡潔。
- 保持函式與方法小而專注。
- 避免重複邏輯;優先使用共用的輔助工具/工具函式。
- 移除未使用的變數、匯入、程式碼路徑與檔案。
## 2. 命名慣例
使用描述性名稱。除非是眾所周知的縮寫,否則避免使用。
| 項目 | 慣例 | 範例 |
|-----------------|---------------------|--------------------|
| 變數 | `lower_snake_case` | `buffer_size` |
| 函式 | `lower_snake_case()`| `read_file()` |
| 常數 | `UPPER_SNAKE_CASE` | `MAX_RETRIES` |
| 型別/結構 | `PascalCase` | `FileHeader` |
| 檔名 | `lower_snake_case` | `file_reader.c` |
## 3. 格式化規則
- 縮排:**4 個空格**
- 行長:**最多 100 個字元**
- 編碼:**UTF-8**,無 BOM
- 檔案結尾需有換行
### 大括號(以 C 為例,請依語言調整)
```c
if (condition) {
do_something();
} else {
do_something_else();
}
```
### 空格
- 關鍵字後加一個空格:`if (x)`,而非 `if(x)`
- 頂層函式之間留一個空行
## 4. 註解與文件
- 解釋*為什麼*,而非*做什麼*,除非意圖不明確。
- 隨著程式碼變更,保持註解更新。
- 公開函式應包含用途與參數的簡短說明。
建議的標籤:
```text
TODO: 後續工作
FIXME: 已知的不正確行為
NOTE: 非顯而易見的設計決策
```
## 5. 錯誤處理
- 明確處理錯誤情況。
- 避免靜默失敗;應回傳錯誤或適當記錄。
- 在失敗回傳前清理資源(檔案、記憶體、控制代碼)。
## 6. 提交與審查實務
### 提交
- 每次提交只做一個邏輯變更。
- 撰寫清晰的提交訊息:
```text
簡短摘要(最多約 50 字元)
可選的較長說明,解釋背景與理由。
```
### 審查
- 保持拉取請求(Pull Request)規模合理。
- 在審查討論中保持尊重與建設性。
- 處理要求的變更,或若不同意則說明理由。
## 7. 測試
- 為新功能撰寫測試。
- 測試應具有確定性(沒有隨機性,除非有種子)。
- 偏好可讀的測試案例,而非複雜的測試抽象。
## 8. 本指南的變更
風格會演進。
透過開啟議題或提交更新此文件的修補程式來提出改進建議。
```






