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

ReScript IntelliJ Plugin への貢献に興味をお持ちいただきありがとうございます!

前提条件

要件

バージョン

備考

JDK

21+

IntelliJ Platform 2025.3+ に必要

Node.js

18+

LSP サーバーおよび .d.ts バインディング生成に必要

IntelliJ IDEA

2025.3+

Community または Ultimate エディション

Gradle

9.4+

Wrapper 同梱 — 手動インストール不要

はじめに

  1. GitHub でリポジトリをフォークします

  2. フォークをクローンします:

    git clone https://github.com/<your-username>/rescript-intellij-plugin.git
    
  3. 開発環境をセットアップします

  4. フィーチャーブランチを作成します:

    git checkout -b feature/my-feature
    

開発ワークフロー

ブランチ命名規則

プレフィックス

用途

feature/

新機能

fix/

バグ修正

refactor/

コードのリファクタリング

docs/

ドキュメント

test/

テストの追加

chore/

設定、依存関係

コミットメッセージ

コミットメッセージには絵文字プレフィックスを使用します:

絵文字

用途

新機能

🐛

バグ修正

♻️

リファクタリング

📝

ドキュメント

🎨

UI/スタイルの改善

パフォーマンスの改善

🔧

設定の変更

テストの追加/修正

🗑️

コードの削除

フォーマット: <絵文字> <動詞> <簡潔な説明>

例:

  • Add JSX token support to lexer

  • 🐛 Fix nested comment parsing

  • 📝 Update architecture documentation

コーディング規約

言語

  • すべてのソースコードは Kotlin で記述されています

  • レクサー定義は JFlex で記述されています(Java を生成)

パッケージ構成

すべてのクラスは com.rescript.plugin.* 配下に、機能ごとに整理されます:

com.rescript.plugin.highlight/   # Syntax highlighting
com.rescript.plugin.lsp/         # LSP integration
com.rescript.plugin.navigation/  # Navigation features
...

コードスタイル

  • ktlint は CI で適用されます(./gradlew ktlintCheck

  • 自動修正: ./gradlew ktlintFormat

  • IntelliJ の組み込み Kotlin フォーマッタは概ね ktlint に準拠しています

KDoc コメント

すべてのクラスと主要なメソッドには 英語 で KDoc コメントを記述する必要があります:

/**
 * Provides code folding for ReScript files.
 *
 * Recognizes multi-line declarations, block comments,
 * and custom //#region markers.
 *
 * @see RescriptCustomFoldingProvider for region-based folding
 */
class RescriptFoldingBuilder : CustomFoldingBuilder() {
    /**
     * Builds fold regions for the given PSI element.
     *
     * @param root the root PSI element to scan
     * @param descriptors list to add fold descriptors to
     * @param document the document being folded
     */
    override fun buildLanguageFoldRegions(...) { ... }
}

テスト

  • すべてのコード変更には対応するテストが必要です

  • テストファイルの命名: <ClassName>Test.kt

  • テストはソースのパッケージ構成を反映します

  • 詳細はテストガイドを参照してください

AI 支援開発

このプロジェクトでは、Claude Code を使用した AI 支援開発のために構造化されたワークフローを採用しています。以下の設定ファイルが開発プロセスを定義します:

  • .claude/rules/steering-workflow.md — 実装前に requirements.mddesign.mdtasklist.md を必要とするステアリングワークフロー

  • .claude/rules/definition-of-done.md — 5 フェーズの完了定義 (計画 → 実装 → コミット前 → マージ前 → マージ後)

  • .claude/rules/git-conventions.md — フィーチャーブランチの Git worktree 分離、絵文字コミットプレフィックス、ブランチ命名規則

ステアリングドキュメントは .steering/[YYYYMMDD]-[NNN]-[title]/ ディレクトリに保存され、コード変更と一緒にコミットされます。

品質チェック

プロジェクトでは CI とカスタム Gradle タスクによる複数の自動品質ゲートを適用しています:

チェック

コマンド

説明

コードスタイル

./gradlew ktlintCheck

Kotlin リンティング(自動修正: ./gradlew ktlintFormat

KDoc コメント

./gradlew checkKdoc

すべてのクラスに KDoc コメントが必要

テストファイル

./gradlew checkTestFiles

プロダクションクラスには対応するテストが必要

EP 登録

./gradlew checkExtensionPointRegistration

plugin.xml が既存のクラスを参照していること

カバレッジ

./gradlew koverHtmlReport

レポートは build/reports/kover/html/index.html に出力

カバレッジしきい値

./gradlew koverVerify

最低 85% の行カバレッジを適用

変更の提出

  1. ローカルで CI チェックをすべて実行します:

    ./gradlew ktlintCheck buildPlugin test koverHtmlReport
    
  2. ビルドとすべてのテストが成功することを確認します

  3. 新しいコードのカバレッジを確認します:

    open build/reports/kover/html/index.html
    
  4. ブランチをプッシュして Pull Request を作成します

PR ガイドライン

  • PR は単一の機能またはバグ修正に絞ってください

  • 何を変更したか、なぜ変更したかを明確に記述してください

  • UI の変更にはスクリーンショットを含めてください

  • 該当する場合は関連する Issue を参照してください

質問がありますか?

  • GitHub で Issue を作成してください

  • 既存の Issue やディスカッションを確認してください