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 ノードを追加
- ASTHIR変換を実装
- tests/unit/hir/match_test.cpp を追加

プルリクエスト

  1. develop からブランチを作成
  2. 変更を実装
  3. cm fmt && cm lint を実行
  4. テストを追加・実行 (make tip)
  5. PRを作成

PRテンプレート

## 概要
<!-- 変更内容 -->

## 変更種類
- [ ] 新機能
- [ ] バグ修正
- [ ] リファクタリング
- [ ] ドキュメント

## テスト
- [ ] 単体テスト追加
- [ ] 既存テスト通過

## チェックリスト
- [ ] コードフォーマット済み
- [ ] ドキュメント更新済み

リリースプロセス

  1. release/vX.Y.Z ブランチ作成
  2. バージョン番号更新
  3. docs/releases/vX.Y.Z.md 作成
  4. テスト実行
  5. main へマージ
  6. タグ作成: git tag vX.Y.Z

最終更新: 2026-02-08