首先,感谢你考虑为 Zen C 做贡献!正是像你这样的人让这个项目变得伟大。
我们欢迎各类贡献!无论是修复 Bug、完善文档,改进新功能,或者只是反馈问题。
贡献的一般工作流程如下:
- Fork 仓库:使用标准的 GitHub 工作流程将仓库 Fork 到你自己的账户。
- 创建功能分支:为你的功能或 Bug 修复创建一个新分支。这有助于保持你的更改井然有序,并与主分支分离。
git checkout -b feature/NewThing
- 进行更改:编写你的代码或文档更改。
- 验证:确保你的更改按预期工作,并且没有破坏现有功能(参见 运行测试)。
- 提交拉取请求:将你的分支推送到你的 Fork,并向 Zen C 主仓库提交拉取请求 (PR)。
我们使用 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)运行完整的测试套件:
make test为了在开发过程中节省时间,可以运行单个测试文件:
./zc run tests/test_match.zcZen C 支持多种 C 编译器作为后端。你可以专门针对它们运行测试:
Clang:
./tests/run_tests.sh --cc clangZig (cc):
./tests/run_tests.sh --cc zigTCC (Tiny C Compiler):
./tests/run_tests.sh --cc tcc- 确保你为任何新功能添加了测试。
- 确保所有现有测试通过。
- 如果合适,更新文档(
docs/、translations/或README.md中的 Markdown 文件)。 - 在 PR 描述中清晰地描述你的更改。链接到任何相关的问题。
感谢你的贡献!