MPS 2019.2ヘルプ

インテンション

インテンションは、MPSが言語作成者が自分の言語を使用している人々のユーザーエクスペリエンスを滑らかにする方法を示す非常に良い例です。インテンションは、"negate boolean"、"invert if condition"、"create-from-usage"などの構文上の構文で、最もよく使用される操作にすばやくアクセスすることができます。IntelliJ IDEAのインテンションなどの機能を使用したことがある場合現代のIDEの中で、MPS インテンションは非常によく知られています。

インテンションを使う

intentions menu

IDEAと同様に、現在位置にコードに適用可能なインテンションがある場合は、電球が表示されます。使用可能なインテンションのリストを表示するには、Alt + Enterを押すか、電球をクリックしてください。インテンションを適用するには、それをクリックするか選択してEnterを押します。これはインテンションを起動し、それに応じてコードを変更します。
サンプル: 適用インテンションのリスト

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

Alt + Enterで開くか、現在の行の左側にある「すぐに現れる」電球アイコンをクリックします。フィルタリングするためにタイプしてください。矢印キーを使ってアイテムを選択するか、ホバーします。Enterキーまたはシングルクリックで終了します。それを中止することはエスケープで、メニューの外側をクリックするか、または他のアプリケーションに変更することで、セルメニューと同じように働きます。


インテンションタイプ

すべてのインテンションは一種の「ショートカット」であり、ノード構造に対するいくつかの操作をユーザーに近づけます。2種類のインテンションを区別することができます:通常のインテンション(おそらくパラメータあり)と「囲む」インテンション。
一般的に言って、これらのタイプのインテンションの間に技術的な違いはありません。それらは、ユーザーによって通常使用される方法が異なるだけです。

通常のインテンションはインテンションリスト(電球)にリストされており、操作をカスタマイズするパラメーターをユーザーに尋ねずに、ノード上で直接変換を実行します。

「囲む」インテンションは、特別な種類の変換を実装するために使用されます - いくつかのノードを他の構成要素で囲みます(たとえば、"括弧で囲む")。これらのインテンションは、ノード上 Ctrl + Alt + Tサラウンドコマンド付き)を押さない限り、ユーザーには提供されません。どちらも一般的なインテンションポップアップメニューには表示されません。

ユニバーサルインテンション は3.4で導入された新しい実験的機能で、インテンションとパラメータ化されたインテンションを統合することができます。さらに、メソッドや他のクラスメンバーをインテンションに追加することを可能にし、よりJava風のエディターを持ちます。この機能はまだ実験段階にあるため、古い機能を完全に置き換えないことにしました。古いインテンションを使用することをお勧めしますが、新しいエディターを好む人は新しいインテンションを試すことができます。ユニバーサルインテンションの構造は古いインテンションと非常によく似ていて、使用することは非常に簡単です。

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

名前

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

概念のため

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

子ノードで利用可能

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

子フィルター

一部の子供にのみインテンションを表示するために使用されます。例: "make method final" インテンションは、メソッドの本体の内部に表示されないほうが良いですが、"public" の子を含むヘッダー全体に表示されるのが望ましいです。

説明

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

isApplicable

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

実行する

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

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

エラーインテンション - このフラグはインテンションのプレゼンテーションを担当します。それは2つのタイプのインテンション - コードのいくつかのエラーを修正する「エラー」インテンション(たとえば欠落している「キャスト」)とユーザーが本物のコード変換を実行するのを手助けすることを意図する「通常の」インテンションを区別します。2つのタイプを視覚的に区別するために、エラーインテンションはオレンジ色の電球ではなく赤い電球で表示され、該当するインテンションリストの通常のインテンションの上に配置されています。

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

インテンションは時々互いに非常に近くなることができます。それらはすべて、ノードを使用して同じ変換を実行する必要があるかもしれませんが、わずかに異なるだけです。たとえば、ジェネレータ内のすべての "Add ... macro" インテンションは最終的にマクロを追加しますが、追加されたマクロ自体はインテンションごとに異なります。これは、パラメータ化されたインテンションが必要な場合です。個別のインテンションを作成する代わりに、単一のインテンションを作成してそのパラメータ化を可能にします。インテンションには、パラメータ値のリストを返すパラメータ関数があります。リストに基づいて、それぞれが異なるパラメータ値を持つ多数のインテンションが作成されます。その後、パラメータ値はほとんどすべてのインテンションのメソッドでアクセスすることができます。

囲む - インテンション

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

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

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

最終更新日: 2019年8月30日