MPS 2019.2ヘルプ

コンソール

コンソールは開発者がアクティブなモデルに対して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

最終更新日: 2019年8月30日