# 为 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 描述中清晰地描述你的更改。链接到任何相关的问题。 感谢你的贡献!