MPS 2020.1 ヘルプ

インテンション

インテンションは、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 インテンションサブシステムで使用したい場合は、あなたの言語のインテンションアスペクトで格納する必要があります。

最終更新日 : 2020 年 6 月 18 日