MPS 2026.1 ヘルプ

コンソール

コンソールは、開発者が MPS 環境でアクティブなモデルに対して DSL コードを直接実行できるツールです。モデルのクエリや変更が可能になり、モデルに対するアクションを実行したり、プロジェクトの統計情報を分析したりできます。

例: (非推奨の) 概念のインスタンスをすべて (または一部) 取得し、新しい概念に移行できます。

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

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

発見性を高めるため、コンソール固有の DSL 構文のほとんどは「#」というシンボルで始まります。コード補完(Control + Space)は、開発者がコンソールにコードを挿入する際に役立ちます。

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

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

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

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

コンソールコマンド

また、コンソールコマンドや基本言語の構文を含む一連の言語も用意されており、開発者はこれらを使って独自のリファクタリングや複雑な使用箇所の検索を行うことができます。

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. ユーザーに結果を表示するための基本言語構文

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

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

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

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

      • #printNodeRef は、プロジェクトモデル内のノードに対してのみ有効です。この構文はコンソールに対話的な応答を出力し、それをクリックするとエディターでノードが開きます。

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

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

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

    refactor.png

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

コンソールクエリの範囲

クエリには、検索対象となるリポジトリの領域を限定するためのスコープを指定できます。スコープは、括弧のような形式で指定します。

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

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

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

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

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

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

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

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

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

noderef.png
2026 年 5 月 06 日

関連ページ:

SModel 言語クエリ

比較:および演算子は、ノードの等価性を比較するために使用できます。演算子は null セーフです。クエリ:名前でノードを取得する node-ptr/.../ 構成要素を使用して、その名前を使用してノードへの参照を取得します。ノードが特定のものであることを確認するために、「is」操作が使用可能です。equals.is(Object->equals); ノードへのポインターを取得するには、ポインター構造を使用します。名前で概念を取得する:概念 /.../ 構造を使用して、名前を指定して概念宣言を...

他の言語

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

デバッガー

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