コントリビューションガイドライン

コードスタイル

  • MoonBit コードは just fmt で整形します。
  • まずパッケージ境界で整理し、その後に具体的な振る舞いでファイルを分けます。
  • コメントは短く技術的にし、契約、不変条件、または分かりにくい実装上の判断を説明します。

命名規則

  • 束縛と関数:小文字とアンダースコア(例: scaled_value)。
  • 型と trait:PascalCase(例: Solver)。
  • ファイル:小文字とアンダースコアを使い、具体的な振る舞いにちなんで命名します。
  • エラーコードを導入する場合は、大文字とアンダースコアを使い、E_ を接頭辞にします。

テスト

  • 振る舞いを変更した場合はテストを追加または更新します。
  • 必要に応じて *_test.mbt または *_wbtest.mbt を使います。
  • 通常の検証には just test を、PR を出す前には just ready を実行してください。moon test --target native も実行してください。非同期の Mare Mark テストは既定の wasm-gc ターゲットでは実行されません。
  • 長い BigInt のテスト値は算術や parse_decimal_value で作り、BigInt::from_string は使わないでください。wasm-gc では長い文字列を誤って解析します。
  • 新たにベンチマークする演算には、オラクルの規則、厳密な結果を保持できる作業精度の上界、そして計時前のオラクルとの照合テストが必要です。
  • 公開 API を変更した場合は just info で interface ファイルを再生成します。

ドキュメント

  • 英語のマニュアルは doc/manual にあります。パッケージごとに API、チュートリアル、設計の各ページがあり、パッケージのパスにちなんで命名されています。ほかに性能の章があります。
  • MoonBit の例はコンパイルできる状態に保ち、意図的に不完全な断片は moonbit nocheck でフェンスしてください。
  • 英語のページを変更したら lunadoc update を実行し、doc/locale の中国語と日本語のカタログを更新してください。

依存関係

  • 依存関係は just update-deps で更新します。
  • コミット前に moon.mod の差分を確認します。
  • 無関係な PR で依存関係やバージョン宣言を変更しないでください。

コミット規則

  • fix: handle empty input のような、簡潔な英語の Conventional Commit メッセージを使います。
  • 各コミットは一つの論理的な変更に絞ります。

リリースチェックリスト

  • moon.mod の version を更新します。
  • README とドキュメントが現在のパッケージ状態を反映していることを確認します。
  • just ready を実行します。
  • publish-package GitHub Actions workflow を手動実行し、moon.mod と完全に一致するバージョンを入力します。