MPS 2026.1 ヘルプ

インテンション

インテンションは、MPS が言語開発者が言語を使用するユーザーのエクスペリエンスを向上させる方法を示す非常に良い例です。インテンションは、「ブール値の否定」、「if 条件の反転」、「使用例からの作成」など、言語の構文構造を用いた最もよく使用される操作への高速アクセスを提供します。IntelliJ IDEA のインテンションや、最新の IDE の同様の機能を使用したことがある方なら、MPS のインテンションが非常に馴染み深いものに感じられるでしょう。

インテンションを使う

intentions-menu.PNG

IDEA と同様に、現在の位置のコードに適用可能なインテンションがある場合は、バルブが表示されます。使用可能なインテンションのリストを表示するには、Alt+Enter を押すか、バルブをクリックします。インテンションを適用するには、インテンションをクリックするか、選択して Enter キーを押します。これにより、インテンションがトリガーされ、それに応じてコードが変更されます。

サンプル: 適用インテンションのリスト

インテンションメニューには通常、ラベル付きグループでソートされた 1 〜 20 項目が含まれています。利用可能なすべての項目が表示されるため、セルメニューよりクリックしやすいです。ただしキーボードのみの使用は便利です。マウスのみでの使用も可能ですが、バルブアイコンが表示されるのを待つ必要があります。インテンションメニューが開いている間に、許容範囲内でギャップを考慮した検索でリスト要素をフィルタリングするために入力を始めることができます。コード補完メニューとは異なり、最初はフィルタリングされていません。

Alt+Enter で開くか、現在の行の左側にある「すぐに表示される」バルブアイコンをクリックします。入力してフィルターします。矢印キーまたはホバーで項目を選択します。Enter キーまたはシングルクリックで終了します。中止はセルメニューと同じように機能し、Escape キー、メニューの外側をクリックするか、別のアプリケーションに変更します。

インテンションタイプ

すべてのインテンションは、ある種の「ショートカット」であり、ノード構造の一部の操作をユーザーに近づけます。インテンションには、通常のインテンション (パラメーター付きの可能性あり) と「囲む」インテンションの 2 種類があります。

一般的に、これらのタイプのインテンションの間に技術的な違いはありません。これらは、ユーザーによる通常の使用方法のみが異なります。

通常のインテンションはインテンション (バルブ) のリストにリストされており、操作をカスタマイズするパラメーターをユーザーに要求することなく、ノード上で直接変換を実行します。

「囲む」インテンションは、特定の種類の変換、つまり一部のノードを別の構造で囲む(たとえば「括弧で囲む」)ために使用されます。これらのインテンションは、ユーザーがノード上で Ctrl+Alt+T囲むコマンド)を押しない限り、ユーザーには表示されません。また、一般的なインテンションポップアップメニューにも表示されません。

ユニバーサルインテンションは、バージョン 3.4 で導入された新しい実験的機能で、インテンションとパラメーター化されたインテンションを統合できます。さらに、インテンションにメソッドやその他のクラスメンバーを追加でき、java に似たエディターを備えています。この機能はまだ実験段階にあるため、従来の機能を完全に置き換えることはしませんでした。引き続き従来のインテンションの使用をお勧めしますが、新しいエディターの方が気に入った方は、新しいエディターを試してみてください。汎用インテンションの構造は従来のインテンションと非常によく似ており、使い方も非常に簡単です。

一般的なインテンション構造

名前

インテンションの名前好きな名前を選択できます。唯一の明らかな制約は、名前がモデルの範囲内で一意でなければならないことです。

概念のため

インテンションは、この概念のインスタンスであるノードとそのサブコンセプトへの適用性についてのみテストされます。

子ノードで利用可能

N がインテンションを適用できるノードであるとします。このフラグが false に設定されている場合、インテンションはキャレットがノード N 自体の上にある場合にのみ表示されます。true に設定すると、N の子孫にも表示されます。(それでも N に適用されます)

子フィルター

一部の子にのみインテンションを表示するために使用されます。たとえば、「make method final」インテンションはメソッド本体内に表示するのではなく、「public」子を含むヘッダー全体に表示される方が望ましいです。

description

この関数によって返される値は、ユーザーがインテンションのリストに表示するものです。

isApplicable

「概念用」テストに合格したインテンションは、現在のノードへの適用性についてテストされます。このメソッドが "true" を返した場合、インテンションがリストに表示されており、適用することができます。そうでなければ、インテンションはリストに表示されません。このメソッドのノード引数は、"for concept" またはその下位概念の 1 つで指定された概念のインスタンスであることが保証されています。

実行する

このメソッドはコード変換を実行します。ノードパラメーターが「概念用」および「適用可能」テストに合格したことが保証されます。

追加フィールド

このセクションでは、インテンションメソッドの呼び出し間で値を格納できるフィールドを定義できます。フィールドには、名前、型、オプションで初期化子を指定する必要があります。フィールドはプライベートである必要があります。MPS はインテンションインスタンスを再利用するため、フィールドから読み取る値は、別のノードで以前に呼び出されたインテンションの値である可能性があります。そのため、後続の description および execute 呼び出しで読み取れるように、常に isApplicable() で値を設定してください。

追加のメソッド

このセクションでは、ユーザーは、繰り返しを避けるためにインテンション内から呼び出すことができるユーティリティメソッドを定義できます。追加のメソッドは通常、計算を実行するか、インテンションの複数の場所で必要なタスクを実行します。追加のメソッドは、含まれているノード内からのみ表示されるようにプライベートにする必要があります。

レギュラーインテンション

エラーインテンション - このフラグは、インテンションの表示に関係します。このフラグは、2 種類のインテンションを区別します。コード内の一部のエラー (たとえば、キャストの欠落) を修正する「エラー」インテンションと、ユーザーが本物のコード変換を実行できるようにするための「通常」インテンションです。2 種類を視覚的に区別するために、エラーインテンションは、オレンジ色のバルブではなく赤いバルブで表示され、該当するインテンションリストで通常のインテンションの上に配置されます。

パラメーター化された通常のインテンション

インテンションは互いに非常に似ている場合があります。ノードに対して同じ変換を実行する必要があるかもしれませんが、その方法はわずかに異なります。たとえば、ジェネレーター内のすべての「マクロの追加」インテンションは最終的にマクロを追加しますが、追加されるマクロ自体はインテンションごとに異なります。これは、パラメーター化されたインテンションが必要な場合です。個別のインテンションを作成する代わりに、単一のインテンションを作成し、そのパラメーター化を許可します。インテンションにはパラメーター関数があり、パラメーター値のリストを返します。リストに基づいて、それぞれ異なるパラメーター値を持つ複数のインテンションが作成されます。パラメーター値は、ほぼすべてのインテンションメソッドでアクセスできます。

囲む - インテンション

このタイプのインテンションは、通常のインテンションと非常によく似ています。そして、記載されているすべての詳細は、これらのインテンションにも当てはまります。

インテンションを保管する場所は?

インテンション言語をインポートすることにより、任意のモデルでインテンションを作成できます。ただし、MPS は、インテンション言語の側面からのみインテンションを収集します。インテンションを MPS インテンションサブシステムで使用する場合は、言語のインテンションアスペクトに格納する必要があります。

インテンション名の適切な大文字表記

インテンションのプロパティは、大文字小文字が正しく区別されているかチェックされます。大文字小文字のチェックの詳細については、こちらを参照してください。

2026 年 5 月 05 日

関連ページ:

プラグイン

プラグインとは、MPS IDE の機能とコードを統合するための方法です。jetbrains.mps.lang.plugin および jetbrains.mps.lang.plugin.standalone 言語は、プラグインで使用できるいくつかのルート概念を提供します。この章では、それらすべてについて説明します。プラグインのインスタンス化:プラグインを開発している間、プラグインを保持するソリューションがあり、その効果を確認するために各変更の後に MPS を再起動する必要がないようにプラグインクラスを...

型システムのデバッグ

型システムをデバッグするために、MPS は型システムトレースを提供します - それは型システムエンジンの中で起こる評価プロセスへのインサイトをあなたに与える統合された視覚的なツールです。自分で試してみる:型システムを簡単に試すことができるように、専用のサンプル言語を用意しました。MPS にバンドルされている式サンプルプロジェクトを開きます。これは、ユーザーホームフォルダー内のサンプルプロジェクトの中で使用可能になります。サンプル言語実験する言語は、いくつかの型、4 つの算術演算(+、-、*、/...

データフロー

言語のデータフローの側面では、到達不能なステートメントの検索、未使用の代入の検出、変数が読み込まれる前に初期化されていない可能性があるかどうかの確認などを行うことができます。また、「抽出メソッド」リファクタリングなど、いくつかのコード変換を実行することもできます。データフロー分析のほとんどのユーザーは、その内部作業の詳細には関心がありませんが、必要な結果を得ることには関心があります。彼らはどのステートメントに到達できないのか、それが初期化される前に何を読むことができるのかを知りたがっています。こ...