MPS 2020.3 ヘルプ

リファクタリング

リファクタリングのサポートは、すべての成熟した言語の IDE 機能の非常に重要な部分です。MPS は、リファクタリングアクションの開発を簡素化するためのいくつかの機能を提供します。

簡単なリファクタリングは、jetbrains.mps.lang.refactoring 言語を使用して記述できます。この言語を使用してリファクタリングを作成した後、次の手順を使用して、ユーザーがリファクタリングを利用できるようにし、呼び出し可能にする必要があります。

  1. リファクタリング用の UI アクションを作成します。これは、プラグイン言語を使用して記述された単純なアクションです。適切なリファクタリングアクション登録の例として、jetbrains.mps.ide.platform.actions.core から名前の変更アクションを確認できます。

  2. リファクタリング用の ActionGroupDeclaration を作成し、デフォルトの位置で jetbrains.mps.ide.platform.actions.NodeRefactoring アクショングループを変更します。

  3. 新しく作成されたアクションをトリガーするリファクタリングキーストロークを KeymapChangesDeclaration に追加します。

  4. 作成されたアクションに isApplicable 句を追加します。通常、単なる is applicable refactoring< > () 呼び出しです。

  5. 作成されたアクションに execute 句を追加します。すべてのユーザー操作はここで実行する必要があります。最後に、execute refactoring< > () を呼び出して、準備したパラメーターを使用してリファクタリングを実行する必要があります。

リファクタリングは、実行された変更に関する情報をさらに記録し、リファクタリングされたプロジェクトに依存する他のプロジェクトの使用状況を更新する場合があります。そのような場合、リファクタリング参加者フレームワークを使用する必要があります。リファクタリングを作成するこの方法は、次の手順で構成されます。

  1. リファクタリング用の UI アクションを作成します。ここでは、ダイアログを表示し、ユーザーから必要なデータを取得し、アクションをアクショングループに登録し、オプションでキーマップを作成できます。

  2. アクションの execute 句で、RefactoringProcessor.performRefactoringInProject() を呼び出し、提案されたすべての変更に関連するすべてのデータを渡します。

  3. 可能な使用箇所の種類ごとに、その種類の使用箇所を処理する RefactoringParticipant のサブクラスを作成します。つまり、使用箇所を検索して更新します。

  4. 拡張ポイントを作成し、その拡張ポイントのすべての参加者を登録します。

  5. 他の依存プロジェクトでの使用箇所の更新をサポートするには、参加者を PersistentRefactoringParticipantsEP 拡張ポイントに追加で登録する必要があります。リファクタリングログを作成するための特別な参加者が必要です(実装の詳細については、MoveNodeRefactoringLogParticipant を参照してください)。

関連ページ:

付属品

アクセサーリーモデルは、言語の側面(推奨)として、またはソリューションでの通常のモデルとして、2 つの場所に保存できます。どちらの場合も、モデルを使用できるように、モデルを言語ランタイム言語設定に追加する必要があります。典型的なユースケースは、言語が使用される任意の場所で利用できるコンセプトインスタンスのデフォルトライブラリです。サンプル:入門図形チュートリアルの一部として作成され、サンプルプロジェクトとして MPS ディストリビューションにバンドルされている図形サンプルプロジェクトを変更して...

カスタムアスペクト

構造、エディター、型システムなどの通常の言語アスペクトに加えて、言語作成者はカスタム言語アスペクト(たとえば、インタープリター、代替型システムなど)を作成し、言語ランタイムに生成してから生成することができます。これらの生成されたアスペクトをコードから使用します。カスタムアスペクトとは何ですか? :MPS の言語定義は、構造、エディター、型システム、ジェネレーター (1) などの側面のコレクションと考えることができます。言語の各アスペクトは、個別のアスペクトモデルで定義されます。例: 言語 L のエデ...