MPS 2024.1 ヘルプ

コンソール

コンソールは、開発者がアクティブなモデルに対して MPS 環境で直接 DSL コードを便利に実行できるようにするツールです。これにより、モデルをすばやくクエリして変更できます。モデルに対してアクションをトリガーしたり、プロジェクトに関する統計を調べたりすることができます。

例: (廃止予定の)概念のすべての(またはいくつかの)インスタンスをすばやく取得し、新しい概念に移行することができます。

#instances(TryStatement).where({~it => it.catchClause.isNotEmpty; }).refactor({~node => if (node.body.statement.size > 5) { node.replace with new(TryCatchStatement); } })

コンソールツールウィンドウを使用すると、DSL 構築を 1 行ずつリアルタイムで実行できます。コマンドがコンソールに書き込まれた後、コマンドは MPS ジェネレーターによって生成され、IDE のコンテキストで実行されます。このようにして、コンソールのコードは、プログラムの AST にアクセスして変更したり、プロジェクト統計を表示したり、IDE アクションを実行したり、コード生成を開始したり、クラスの再読み込みを開始したりできます。

発見しやすい理由から、コンソール固有の DSL 構成のほとんどは、記号「#」で始まります。コード補完(Control + Space)は、開発者がコンソールにコードを挿入するのを支援します。

一般に、3 種類のコマンドがあります。

  1. BaseLanguage ステートメントリスト。これらのコマンドには、任意の BaseLanguage 構造を含めることができます。一部の構造またはクラスが完了していない場合は、インポートされていない可能性があります。欠落しているインポートは、アクション「モデルインポートの追加」、「ルートによるモデルインポートの追加」、「言語インポートの追加」、対応するキーボードショートカットを使用して、通常のエディターと同様に簡単に追加できます。

    blcommand1.png
    blcommand2.png
  2. BaseLanguage 式。式が評価され、そのタイプが無効でない場合は、テキスト、AST、対話型応答としてコンソールに出力されます。 blexpression.png

  3. BaseLanguage 以外のコマンド。これらは #reloadClasses のようなカスタマイズできない単純なコマンドです。

コンソールコマンド

コンソールコマンドと BaseLanguage 構造を含む言語のセットもあり、開発者はカスタムリファクタリングや複雑な使用箇所の検索などを簡単に行うことができます。

ConsoleCommandsHelp.png
  1. IDE オブジェクト(#node#references# モデル# モジュール)を反復処理するための BaseLanguage 構造。これらの式は、プロジェクトまたはカスタムスコープ内のすべてのノード / 参照 / モデル / モジュールを含む遅延シーケンスです。

    nodes.png
  2. 使用箇所検索用の BaseLanguage 構造(#usages#instances)。これらの式もシーケンスであり、繰り返すことはできますが、怠惰になることはありません。

    これらの式が評価されると、使用箇所の検索メカニズムが呼び出されるため、すべてのノードまたは参照を反復処理してから、概念 / ターゲットでフィルタリングするよりも高速に実行されます。

    usages.png
  3. IDE からデータを問い合わせるためのコマンド (#stat , #showBrokenRefs , #showGenPlan)

  4. IDE と対話するためのコマンド (#reloadClasses , #make , # クリーン , #removeGenSources)

  5. コンソールで外部スクリプトを実行するための #exec コマンド。

  6. ユーザーに結果を表示するための BaseLanguage 構造

    • # ショー式は使用状況ビューを開き、そこにパラメーターとして式に渡されたシーケンスのノード、モデル、モジュールを表示します。

    • #print 式は結果をコンソールに書き込みます。この構造には特殊なバージョンもあります。

      • #printText は結果を文字列に変換し、それをレスポンスに追加します。

      • #printNode はノードにのみ適用可能です。この構造は、応答全体にノード全体とそのサブノードを追加します。応答も AST の一部であるため、ノードは通常のエディターで表示されます。

      • #printNodeRef は、プロジェクトモデル内に存在するノードのみで意味があります。この構造はコンソールに対話的な応答を出力します。それはエディターでノードを開くためにクリックすることができます。

      • #printSeq はノード、モデル、モジュールの集合に適用できます。このコマンドは、コレクションのサイズを説明する対話式応答をコンソールに出力します。応答をクリックすると、使用状況ビューが開き、ノードまたはモデルが表示されます。

      • #print 式は普遍的な構成であり、その型と値に従って、引数を表示する最も適切な方法を選択しようとします。

  7. リファクタリング操作この操作は関数をノードのシーケンスに適用します(forEach 操作のように)が、その前に使用箇所ビューで見つかったノードを開き、そこでリファクタリングを開始する前にノードを確認して手動で選択します。リファクタリングしてから、リファクタリングを適用またはキャンセルします。

    refactor.png

さらに、必要に応じてコンソール言語をユーザーが拡張できます。

コンソールクエリの範囲

検索範囲を指定して、検索するリポジトリの領域を制限することができます。スコープは先のとがった括弧で指定されています。

mps-completion.png
  • プロジェクト - 現在のプロジェクト内のモジュールのみ

  • 編集可能 - 現在のプロジェクト内の編集可能なモデルのみ (これは、スコープが明示的に指定されていない場合に使用されるデフォルトのスコープです。)

  • global - モジュールリポジトリ全体

  • visible - グローバルリポジトリから見えるモジュールのみ

  • modules - リストされたモジュールに制限する

  • models - リストされているモデルに限定

  • カスタム - 提供された Java スコープクラスを使用してモジュールをフィルタリングします

ノードをコンソールにコピーする

コンソールからプロジェクト内の具体的なノードを指すために、このノードをエディターからコピーして、コンソールに貼り付けることができます。型ノード <>BaseLanguage 式が貼り付けられたノードの値と、であるとノードが、nodeRef と呼ばれる特別な構成、として貼り付けられます。コードをそのまま貼り付ける必要がある場合は、コンテキストメニューから元のノードを貼り付けるアクションを使用できます。

noderef.png

関連ページ:

SModel 言語クエリ

比較::eq: および:ne: 演算子を使用して、ノードが等しいかどうかを比較できます。演算子は null セーフであり、比較された 2 つのノードによって表されるサブツリー全体を比較します。クエリ:名前でノードを取得する node-ptr/.../ 構成要素を使用して、その名前を使用してノードへの参照を取得します。ノードが特定のものであることを確認するために、「is」操作が使用可能です。equals.is(Object->equals); ノードへのポインターを取得するには、ポインター構造...

他の言語

ここでは、いくつかの便利な BaseLanguage 拡張機能を紹介しますチェックドット:言語:jetbrains.mps.baseLanguage.checkedDots チェックドット式は、オペランドの null チェックで拡張されたドット式です。オペランドが NULL の場合、チェックされたドット式全体の値が NULL になります。それ以外の場合は、対応するドット式の値に評価されます。チェックドット式を作成する方法 Makedot 式はインテンションをチェックしました、ドットの後に「?」を入力し...

デバッガー

MPS は、カスタムデバッガーを作成し、java のデバッガーと統合するための API を提供します。MPS デバッガー機能の説明については、デバッガーの使用箇所ページを参照してください。基本:ユーザーモデルから生成されるコードをデバッグするために、MPS は以下をする必要があります: デバッガーでシームレスに 2 つの世界を一致させることができるようにするために、生成されたコードまでユーザモデルのノードを追跡します、どのノードにどのタイプのブレークポイントを作成できるかを理解する、デバッガーで...