# 為 Zen C 做貢獻 首先,感謝你考慮為 Zen C 做貢獻!正是像你這樣的人讓這個項目變得偉大。 我們歡迎各類貢獻!無論是修復 Bug、完善文檔,還是提出新功能建議。 ## 如何貢獻 貢獻的一般工作流程如下: 1. **Fork 倉庫**:使用標準的 GitHub 工作流程將倉庫 Fork 到你自己的賬戶。 2. **創建功能分支**:為你的功能或 Bug 修復創建一個新分支。這有助於保持你的更改井然有序,並與主分支分離。 ```bash git checkout -b feature/NewThing ``` 3. **進行更改**:編寫你的代碼或文檔更改。 4. **驗證**:確保你的更改按預期工作,並且沒有破壞現有功能(參見 [運行測試](#運行測試))。 5. **提交拉取請求**:將你的分支推送到你的 Fork,並向 Zen C 主倉庫提交拉取請求 (PR)。 ## 問題 (Issues) 和 拉取請求 (Pull Requests) 我們使用 GitHub Issues 和 Pull Requests 來追蹤錯誤和功能。為了幫助我們保持品質: - **使用模板**: 打開 Issue 或 PR 時,請使用提供的模板。 - **錯誤報告**: 用於報告錯誤。 - **功能請求**: 用於建議新功能。 - **拉取請求**: 用於提交程式碼更改。 - **描述詳細**: 請提供儘可能多的細節。 - **自動檢查**: 我們有一個自動工作流程,用於檢查新 Issues 和 PRs 的描述長度。如果描述太短(< 50 個字元),它將自動關閉。這是為了確保我們有足夠的資訊來幫助您。 ## 開發指南 ### 代碼規範 - 遵循代碼庫中現有的 C 風格。保持一致性是關鍵。 - 你可以使用提供的 `.clang-format` 文件來格式化你的代碼。 - 保持代碼整潔可讀。 ### 項目結構 如果你想擴展編譯器,這里有一個代碼庫的快速導覽: * **解析器 (Parser)**:`src/parser/` - 包含遞歸下降解析器的實現。 * **代碼生成 (Codegen)**:`src/codegen/` - 包含將 Zen C 轉換為 GNU C/C11 的轉譯邏輯。 * **標準庫 (Standard Library)**:`std/` - 標準庫模塊,使用 Zen C 本身編寫。 ## 運行測試 在開發過程中,測試套件是你最好的朋友。請在提交 PR 之前確保所有測試通過。 ### 運行所有測試 使用默認編譯器(通常是 GCC)運行完整的測試套件: ```bash make test ``` ### 運行特定測試 為了在開發過程中節省時間,可以運行單個測試文件: ```bash ./zc run tests/test_match.zc ``` ### 使用不同的後端進行測試 Zen C 支持多種 C 編譯器作為後端。你可以專門針對它們運行測試: **Clang**: ```bash ./tests/run_tests.sh --cc clang ``` **Zig (cc)**: ```bash ./tests/run_tests.sh --cc zig ``` **TCC (Tiny C Compiler)**: ```bash ./tests/run_tests.sh --cc tcc ``` ## 拉取請求流程 1. 確保你為任何新功能添加了測試。 2. 確保所有現有測試通過。 3. 如果合適,更新文檔(`docs/`、`translations/` 或 `README.md` 中的 Markdown 文件)。 4. 在 PR 描述中清晰地描述你的更改。鏈接到任何相關的問題。 感謝你的貢獻!