MPS 2020.3 ヘルプ

インテンション

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

インテンションを使う

Intentions menu

Like in IDEA, if there are available intentions applicable to the code at the current position, a light bulb is shown. To view the list of avaliable intentions, press Alt+Enter or click the light bulb. To apply an intention, either click it or select it and press Enter. This will trigger the intention and alter the code accordingly.
Example: list of applicable intentions

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

Open it with Alt+Enter or clicking on the "shortly-appearing" light-bulb icon at the left hand side of the current line. Type to filter. Select an item with arrow keys or hovering it. Finish with Enter or a single click. Aborting it works the same as the cell menu, with Escape, clicking outside the menu, or changing to another application.

インテンションタイプ

All intentions are "shortcuts" of a sort, bringing some operations on node structure closer to the user. Two kinds of intentions can be distinguished: regular intentions (possibly with parameters) and "surround with" intentions.
Generally speaking, there is no technical difference between these types of intentions. They only differ in how they are typically used by the user.

regular intentions are listed on the intentions list (the light bulb) and they directly perform transformations on a node without asking the user for parameters customizing the operations.

「囲む」インテンション are used to implement a special kind of transformation - surrounding some node(s) with another construct (e.g. "surround with parenthesis"). These intentions are not offered to the users unless they press ctrl-alt-T (the surround with command) on a node. Neither they are shown in general intentions pop-up menu.

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

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

名前

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

概念のため

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

子ノードで利用可能

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

子フィルター

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

説明

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

isApplicable

Intentions that have passed the "for concept" test are tested for applicability to the current node. If this method returns "true," the intention is shown in the list and can be applied. Otherwise the intention is not shown in the list. The node argument of this method is guaranteed to be an instance of the concept specified in "for concept" or one of its subconcepts.

実行する

This method performs a code transformation. It is guaranteed that the node parameter has passed the "for concept" and "is applicable" tests.

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

is error intention - This flag is responsible for an intention's presentation. It distinguishes two types of intentions - "error" intentions which correct some errors in the code (e.g. a missing 'cast') and "regular" intentions, which are intended to help the user perform some genuine code transformations. To visually distinguish the two types, error intentions are shown with a red bulb, instead of an orange one, and are placed above regular intentions in the applicable intentions list.

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

Intentions can sometimes be very close to one another. They may all need to perform the same transformation with a node, just slightly differently. E.g. all "Add ... macro" intentions in the generator ultimately add a macro, but the added macro itself is different for different intentions. This is the case when parameterized intention is needed. Instead of creating separate intentions, you create a single intention and allow for its parametrization. The intention has a parameter function, which returns a list of parameter values. Based on the list, a number of intentions are created , each with a diferent parameter value. The parameter values can then be accessed in almost every intention's method.

囲む - インテンション

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

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

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

関連ページ:

型システムのデバッグ

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

データフロー

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