プロジェクト構造

トップレベルレイアウト

rescript-intellij-plugin/
├── src/
│   ├── main/
│   │   ├── kotlin/com/rescript/plugin/   # Kotlin source code
│   │   ├── java/com/rescript/plugin/lang/ # JFlex lexer definition
│   │   └── resources/                     # Plugin resources
│   └── test/                              # Test code
├── sphinx-docs/                           # Documentation (Sphinx)
├── docs/                                  # Internal design documents
├── .steering/                             # Steering workflow documents
├── .github/workflows/                     # CI/CD workflows
├── build.gradle.kts                       # Gradle build script
├── gradle.properties                      # Version and platform config
├── settings.gradle.kts                    # Project settings
└── CLAUDE.md                              # Development conventions

ソースコードの構成

すべてのプラグインコードは src/main/kotlin/com/rescript/plugin/ 配下にあります:

パッケージ

用途

主要ファイル

(root)

コア定義

RescriptLanguage.kt, RescriptFileTypes.kt, RescriptIcons.kt

lang/

レキサー、パーサー、トークン

RescriptLexer.kt, RescriptParser.kt, RescriptTokenTypes.kt

lang/psi/

PSI 要素クラス

RescriptPsi.kt, RescriptStringLiteral.kt

highlight/

シンタックスハイライト

RescriptSyntaxHighlighter.kt, RescriptColorSettingsPage.kt

lsp/

LSP 統合

RescriptLspServerDescriptor.kt, RescriptSemanticTokensSupport.kt

run/

実行構成

RescriptRunConfiguration.kt, RescriptCliDetector.kt

test/

テストランナー

RescriptTestRunConfiguration.kt, RescriptTestFrameworkDetector.kt

structure/

ストラクチャービュー

RescriptStructureViewFactory.kt

folding/

コード折りたたみ

RescriptFoldingBuilder.kt, RescriptCustomFoldingProvider.kt

editor/

エディタ拡張

RescriptSmartEnterProcessor.kt, RescriptStatementUpDownMover.kt

completion/

補完機能

RescriptPostfixTemplateProvider.kt

navigation/

ナビゲーション機能

RescriptSymbolContributor.kt, RescriptSwitchFileAction.kt

analysis/

コード分析

RescriptReanalyzeAnnotator.kt, RescriptUnusedCodeInspection.kt

formatter/

フォーマット

RescriptFormattingService.kt

codestyle/

コードスタイル

RescriptCodeStyleSettingsProvider.kt

config/

設定

RescriptJsonIconProvider.kt, RescriptJsonSchemaProviderFactory.kt

settings/

プラグイン設定

RescriptProjectSettings.kt, RescriptConfigurable.kt

intention/

インテンションアクション

RescriptWrapWithIntention.kt, RescriptAddGenTypeIntention.kt

surround/

Surround with

RescriptSurroundDescriptor.kt

imports/

インポート管理

RescriptImportOptimizer.kt

injection/

言語インジェクション

RescriptRawJsInjector.kt, RescriptMarkdownCodeFenceProvider.kt

spellcheck/

スペルチェック

RescriptSpellcheckingStrategy.kt

indexing/

インデックス

RescriptTodoIndexer.kt

template/

ファイル作成

RescriptCreateFileAction.kt

statusbar/

ステータスバー

RescriptCompilerStatusWidgetFactory.kt

codevision/

Code Lens

RescriptCodeVisionProvider.kt

preview/

JS プレビュー

RescriptCompiledJsPreviewPanel.kt

hierarchy/

モジュール階層

RescriptModuleHierarchyProvider.kt

paste/

ペーストアクション

RescriptPasteAsJsonAction.kt

generate/

コード生成

RescriptGenerateSwitchAction.kt, RescriptGenerateModuleTypeAction.kt

wizard/

プロジェクトウィザード

RescriptModuleBuilder.kt, RescriptProjectWizardStep.kt

commenter/

コメント切り替え

RescriptCommenter.kt

リソース

src/main/resources/
├── META-INF/
│   └── plugin.xml              # Plugin descriptor (all extension points)
├── colorSchemes/
│   ├── RescriptDarcula.xml     # Dark theme colors
│   └── RescriptDefault.xml     # Light theme colors
├── liveTemplates/
│   └── ReScript.xml            # 15 live templates
├── fileTemplates/internal/
│   ├── ReScript Module.res.ft
│   ├── ReScript Interface.resi.ft
│   └── ReScript Component.res.ft
├── schemas/
│   └── rescript.schema.json    # JSON Schema for rescript.json
└── icons/                      # SVG icons

主要なエントリポイント

plugin.xml

src/main/resources/META-INF/plugin.xml はすべてのプラグイン機能の中央レジストリです。すべての Extension Point 実装がここに登録されます。新しい機能を追加する場合、ほぼ必ずこのファイルにエントリを追加する必要があります。

Rescript.flex

src/main/java/com/rescript/plugin/lang/Rescript.flex はレキサールールを定義しています。ここを変更した場合、./gradlew buildPlugin を実行して RescriptFlexLexer.java を再生成する必要があります。

RescriptTokenTypes.kt

src/main/kotlin/com/rescript/plugin/lang/RescriptTokenTypes.kt はすべてのトークンタイプとトークンセットを定義しています。レキサーに新しいトークンを追加する場合、ここにも追加する必要があります。