MPS 2020.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

    blcommand2

  2. BaseLanguage 式式が評価され、その型が無効でない場合は、テキスト、AST、または対話式応答としてコンソールに表示されます。
    blexpression

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

コンソールコマンド

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

ConsoleCommandsHelp

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

    nodes

  2. 用途検索のための BaseLanguage 構造(#usages#instances)。これらの式もシーケンスです。これは繰り返し可能ですが、遅延することはできません。これらの式が評価されると、find usage メカニズムが呼び出されるため、より高速に実行され、すべてのノードまたは参照を反復処理してから、概念 / ターゲットによるフィルタリングが行われます。

    usages

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

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

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

    • #print 式は結果をコンソールに書き込みます。この構造には特殊なバージョンもあります。
      • #printText は結果を文字列に変換し、それをレスポンスに追加します。

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

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

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

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

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

    refactor

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

コンソールクエリの範囲

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

mps completion

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

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

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

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

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

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

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

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

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

noderef