Contributing to Cm
Cm言語プロジェクトへの貢献ガイドです。
ディレクトリ構造
Cm/
├── src/ # ソースコード
│ ├── frontend/ # Lexer, Parser, AST, Types
│ │ ├── lexer/
│ │ ├── parser/
│ │ ├── ast/
│ │ └── types/
│ │ └── checking/ # 型チェック(分割)
│ ├── hir/ # 高レベル中間表現
│ │ └── lowering/
│ ├── mir/ # 中レベル中間表現
│ │ ├── lowering/
│ │ └── optimizations/
│ ├── codegen/ # コード生成
│ │ ├── interpreter/
│ │ ├── js/
│ │ └── llvm/
│ │ ├── native/
│ │ └── wasm/
│ ├── diagnostics/ # 診断システム
│ │ └── definitions/ # エラー/警告/Lint定義
│ ├── fmt/ # フォーマッタ
│ └── common/ # 共通ユーティリティ
├── docs/ # ドキュメント
│ ├── tutorials/ # チュートリアル(ja/en)
│ ├── design/ # 設計ドキュメント
│ ├── archive/ # アーカイブ
│ ├── releases/ # リリースノート
│ └── flyer/ # フライヤー
├── tests/ # テスト
│ ├── test_programs/ # Cmテストプログラム
│ └── *.cpp # C++ユニットテスト
├── std/ # 標準ライブラリ
└── examples/ # サンプルコード
ファイル命名規約
C++ソース
| 種類 | 規約 | 例 |
|---|---|---|
| ソースファイル | snake_case.cpp |
lexer.cpp |
| ヘッダファイル | snake_case.hpp |
lexer.hpp |
| クラス名 | PascalCase |
class Lexer |
| 関数名 | snake_case |
void parse_expr() |
| 定数 | SCREAMING_CASE |
MAX_TOKENS |
| 名前空間 | snake_case |
namespace cm::frontend |
ドキュメント
| 種類 | 規約 | 例 |
|---|---|---|
| 設計ドキュメント | lowercase.md |
enum_design.md |
| リリースノート | vX.Y.Z.md |
v0.13.0.md |
テスト
| 種類 | 規約 | 例 |
|---|---|---|
| 単体テスト | *_test.cpp |
lexer_test.cpp |
| テストファイル | *.cm |
hello.cm |
| 期待出力 | *.expected |
hello.expected |
コーディング規約
C++20
// ヘッダガード
#pragma once
// 名前空間
namespace cm::frontend {
// クラス定義
class Lexer {
public:
// コンストラクタ
explicit Lexer(std::string_view source);
// メソッド
std::vector<Token> tokenize();
private:
// メンバ変数(末尾アンダースコア)
std::string source_;
size_t pos_;
};
} // namespace cm::frontend
フォーマット
# clang-formatで自動整形
clang-format -i src/**/*.cpp src/**/*.hpp
# Cmコードのフォーマット
./cm fmt <file.cm>
ブランチ戦略
main # 安定版
├── develop # 開発ブランチ
├── feature/* # 機能開発
├── fix/* # バグ修正
└── release/* # リリース準備
コミットメッセージ
日本語で記載します。
<種類>: <要約>
<詳細>
<種類>:
- feat: 新機能
- fix: バグ修正
- docs: ドキュメント
- refactor: リファクタリング
- test: テスト
- chore: その他
例:
feat: HIRにパターンマッチを追加
- HirMatch, HirMatchArm ノードを追加
- AST→HIR変換を実装
- tests/unit/hir/match_test.cpp を追加
プルリクエスト
developからブランチを作成- 変更を実装
cm fmt && cm lintを実行- テストを追加・実行 (
make tip) - PRを作成
PRテンプレート
## 概要
<!-- 変更内容 -->
## 変更種類
- [ ] 新機能
- [ ] バグ修正
- [ ] リファクタリング
- [ ] ドキュメント
## テスト
- [ ] 単体テスト追加
- [ ] 既存テスト通過
## チェックリスト
- [ ] コードフォーマット済み
- [ ] ドキュメント更新済み
リリースプロセス
release/vX.Y.Zブランチ作成- バージョン番号更新
docs/releases/vX.Y.Z.md作成- テスト実行
mainへマージ- タグ作成:
git tag vX.Y.Z
最終更新: 2026-02-08