贡献指南

代码风格

  • 使用 just fmt 格式化 MoonBit 代码。
  • 优先按包边界组织文件,再按具体行为拆分。
  • 注释保持简短、技术化,只解释契约、不变量或不明显的实现选择。

命名约定

  • 绑定与函数:小写字母加下划线,例如 scaled_value。
  • 类型与 trait:PascalCase,例如 Solver。
  • 文件:小写字母加下划线,并以具体行为命名。
  • 如需引入错误码,应使用大写字母加下划线,并以 E_ 为前缀。

测试

  • 行为变更时同步添加或更新测试。
  • 根据访问需求使用包内 *_test.mbt 或 *_wbtest.mbt。
  • 常规验证运行 just test,提交 PR 前运行 just ready。还要运行 moon test --target native:异步的 Mare Mark 测试不会在默认的 wasm-gc 目标上运行。
  • 用算术或 parse_decimal_value 构造很长的 BigInt 测试值,不要用 BigInt::from_string,它在 wasm-gc 上会错误解析长字符串。
  • 新增的被测运算需要一条预言机规则、一个能容纳精确结果的工作精度界,以及在计时之前与预言机对照的测试。
  • 公共 API 变化时用 just info 重新生成接口文件。

文档

  • 英文手册位于 doc/manual:每个包一份 API、教程和设计页,以包路径命名,另有性能章节。
  • 保持 MoonBit 示例可编译;有意不完整的片段用 moonbit nocheck 标注代码块。
  • 修改英文页面后,运行 lunadoc update 并更新 doc/locale 中的中文与日文目录。

依赖

  • 通过 just update-deps 更新依赖。
  • 提交前检查 moon.mod diff。
  • 避免在无关 PR 中修改依赖或版本声明。

提交规范

  • 使用简洁的英文 Conventional Commit 提交信息,例如 fix: handle empty input。
  • 每个提交只聚焦一个逻辑变更。

发布检查清单

  • 更新 moon.mod 中的 version。
  • 确认 README 和文档反映当前包状态。
  • 运行 just ready。
  • 手动触发 publish-package GitHub Actions workflow,并输入与 moon.mod 完全一致的版本号。