MPS の新機能

MPS 2018.1の新機能

SModel言語の拡張

場合によっては、生ポインタ(SNodeReferenceやSModelReferenceなど)を処理する必要があります。それらを作成して操作することは難しいので、それらを扱うことは難解かもしれません。ポインタの操作を簡単にするために、新しいタイプと操作をSModel言語で使用します。

ノードポインタ

新しい "node-ptr <>"タイプを導入することで、ノードポインタの操作が簡単になりました。これらのポインタは、「解決」操作を介して実際のノードに解決することができます。 "node-ptr / ... /"式は、古い "nodePointer / ... /"構成の代わりに使用されています。これはすでに廃止されています。式の変換を処理するために、移行スクリプトが作成されます。

ポインターによる参照の設定

ターゲットを参照リンクに設定する場合、ターゲットノードにアクセスする必要はありません。ターゲットへのポインタで十分です。参照リンクアクセス式に適用可能な「set ptr」操作は、参照ターゲットを指定されたポインタに設定します。ノードがノード・ポインタで指定されたノードであることを確認するには、新しい「is」操作を使用する必要があります。

smodel型の厳密な型定義ルール

SModel型の型定義ルールはより厳しくなっています。さらに、SNodeReferenceインターフェースメソッドは "node-ptr"値では使用できません.SNodeReferenceを明示的に取得するためにダウンキャスト演算子を使用する必要があります。

参照マクロ内のNode-ptr式

参照マクロは、node-ptr式を受け入れるように変更されました。参照の型に従って、参照マクロから返されたポインタ型を検証します。

ポインタを指定するノードID

モデル名とノードIDを使用して、名前の付いていない概念インスタンスへのポインタを指定したり、参照を文字列としてハードコーディングしたりできます。

モデルポインタ

"model-reference"型は "model-ptr <>"にリファクタリングされています。このポインタは、「解決」操作を介して実際のモデルに解決することができます。

新しい移行スクリプト

ノード/.../ `表現、望ましくない引用やダウンキャストのような古いSModel言語の構造を移行するのに役立ついくつかの移行スクリプトを導入しました。それらを実行するには、Tools - > Scripts - > Enhancementsに進み、 "SModel Language Enhancements(node-ptr <>およびmodel-ptr)"を選択します。また、同じウィンドウには、「参照マクロクエリでノードポインタを使用する」オプションがあり、ジェネレータマクロの古い構造を処理します。

SModelクエリのスコープの改善

Smodelのクエリは、操作対象範囲に向かってより直感的に動作するようになりました。スコープが特定のクエリのパラメータとして宣言されている場合、以前のように、編集可能なモデルだけでなく、読み取り専用モデルを含むスコープ全体でクエリが実行されます。

エディター

サブツリーのリフレクションエディタを表示する

これで、サブツリー全体のリフレクションエディタを表示できます。これを行うには、ノードを選択し、Cmd / Ctrl + Shift + [コンテキストメニューから[サブツリーのリフレクションエディタを表示]を選択します。通常のエディタに戻るには、Cmd / Ctrl +]、Cmd / Ctrl + Shift +]を押すか、[サブツリーの標準エディタを表示する]オプションを右クリックします。現在のノードだけのリフレクションエディタを表示するには、Cmd / Ctrl + [またはコンテキストメニューから]をクリックします。

プロパティセルと参照セルの変換メニュー

変換メニュー言語は、プロパティおよび参照セルをサポートするために一貫して強化されています。プロパティと参照変換のメニュー部分を使用すると、前に使用した「インラインメニュー」よりもプロパティセルと参照セルのメニューをカスタマイズすることができます。

2つの主な利点は次のとおりです。

  • それらは任意のセルに結合することができます。プロパティと参照セルだけではありません。
  • コンテキストアシスタント、コンテキストメニュー、サイドトランスフォーメーションなどの他の場所にも適用できます。
MPS 2017.3について学ぶ

MPS 2017.3の新機能

エディター

一般的なプレースホルダ

一般的なプレースホルダーという概念を導入しました。一般的なプレースホルダは、任意の言語の任意の子コレクションの空の位置マーカーとして使用でき、オプションで追加のコンテンツを保持することもできます。デフォルトでは、このプレースホルダーノードはエディター内で空のスペースとして表され、透過的に動作します。プレースホルダーノードで補完メニューを呼び出して有効な子ノードに置き換えるか、Enterキーを押してノードを追加できます次の兄弟位置にある。 Ctrl / Cmd + Shift + Enterキーの組み合わせは、プレースホルダをコレクション内の現在の位置に挿入します。

フリーフローティングコメント

一般的なDSLコメント機能は、新しいジェネリックプレースホルダを使用して実装されています。これを利用するには、jetbrains.mps.lang.text言語または汎用のdevkitをインポートするだけです。これにより、基本的なスタイル(太字、斜体、下線)、クリック可能なハイパーリンク、組み込みノード(コード)をサポートした、完全に編集可能な複数行のテキスト言語が得られます。一般的なプレースホルダーに置かれている場合は、「[」とタイプしてコメントを入力してください。この既定のコメント言語に加えて、特定のニーズに合わせてカスタム言語を作成できます。

セルのフォントファミリをカスタマイズする

エディタ定義の新しいエディタスタイルのフォントファミリを使用して、フォントのサイズとスタイルプロパティのカスタマイズを可能にしました。 fontFamily式を使用して、インストールされているフォントファミリのいずれかを参照します。

すべて選択

エディタ全体でコンテンツ全体を選択できる新しいアクション SELECT_ALLが追加されました。 Control / Cmd + Aショートカットでトリガし、アクションマップを使用して自分のコンセプトの動作をカスタマイズできます。

削除されたノードの元に戻す

削除されたノードのUNDOの仕組みを改善しました。ルートノードの削除を元に戻した後でも、削除前にそのルート内で実行された以前の変更は元に戻すことができます。

生成プログラム

チェックポイントモデルのリンク

チェックポイントでは、複数のジェネレータフェーズ間でマッピングラベルの参照を解決できるようになりました。したがって、以前のチェックポイントで生成された場合でも、ノードへの参照を安全に解決できます。

不要なファイルの上書きを避ける

makeプロセスは、生成されたファイルと同じ内容のファイルを上書きしません。これで、変更されたファイルだけがディスク上で更新されるという事実に頼ることができます。

ビルド言語

モジュールリソースをコピーする新しい方法

モジュールで指定された 'resources' コンテンツ・ルートは、リソースをデプロイされたモジュールにコピーする目的で使用されるようになりました。以前はリソースコピーテンプレートにハードコードされたファイルマスクを組み込むための移行が行われました。

Ant タスク

MPSのAntタスクは、モジュール、モジュール、およびallmpsmodulesという新しいタグを使用して、リポジトリの内容を完全に制御します。

移行Antタスクの改善

Migration Antタスクは、よりユーザーフレンドリーになりました。

  • 移行中に問題が発生すると、antスクリプトが失敗し、ユーザーに適切に報告されます。
  • mps location - mps.home、mps_home環境プロパティ、およびmpshomeタスク属性を指定するためのすべての従来の属性をサポートしています。推奨される方法は、mps.home環境プロパティを使用することです。

DevKitパッケージの改良

Devkitモジュールはもはやファイルとしてデプロイされず、他のモジュールと同様にjarファイルにバンドルされます。ビルドプロジェクトのdevkitレイアウト要素を新しい 'module'レイアウト要素で自動的に更新するための移行スクリプトが提供されています。

その他の改善点

子要素のNodePointer

lang.smodelのnodePointer式は、ルートだけでなく任意の名前付き要素を参照することもできます。

makeはモデルの依存関係を考慮する

モデルの作成は、再生成が必要なすべてのモデル依存関係も作成します。これは時間を節約し、驚きを避けるのに役立ちます。

モデルクローンの改善

モデルクローンアクションは、クローンモデルの要素のクロスルート参照を正しく更新します。複製されたモデルは元のモデルとは完全に独立しています。

MPSをダウンロード(英語)

MPS 2017.2について学ぶ

MPS 2017.2の新機能

生成プログラム

クロスモデル生成の拡張

生成計画では、言語の記述子モデルを生成できます。 構造TextGenタイプシステムデータフロー制約のアスペクトは、生成計画で生成され、新しいクロスモデル参照解決メカニズムを使用します。言語作成者によって定義されたカスタムアスペクトもこのメカニズムに参加できます。

SNodeReferencesを返す参照マクロ

参照マクロ( - > $)で設定した参照先をSNodeReferencesとして追加指定することができます。 SNodeReferencesを使用すると、マクロが適用されているときにターゲットノードのモデルにアクセスする必要がなくなります。

エディター

参照アクション

参照アクションはSubstitute Menu Languageによって新たにサポートされています。補完メニューが参照の潜在的なターゲットノードでどのように満たされているかを指定し、視覚的外観をカスタマイズします。

カスタムリファレンスプレゼンテーションとマッチング

より一貫性のあるものにするために、制約の代わりにエディターのアスペクトを使用して、参照のビジュアルプレゼンテーションを指定する必要があります。さらに、参照セルメニューは、一致するテキストを指定する手段を提供します。また、定義を自動的に制約からエディターのアスペクトに移行するための移行を準備しました。

メニュー項目トレース

エディタの作成者はこれを気に入っています - どの変換または置換メニューが特定のアクションをコンプリートメニューまたはコンテキストアシスタントに提供したかを追跡するには、完了メニューエントリでコントロール/ Cmd + Alt + Bを押すだけで、インタラクティブなトレースレポートが表示され、メニューを介して選択されたメニュー項目に移動します。

ユーザビリティー

シフトレスコード補完

コード補完はさらにスマートになった - 複数の単語の名前の文字を大文字にするためにシフトを押す必要がなくなりました。 MPSはあなたに適したマッチを見つけます。

二段階削除

削除はより安全になっています。ユーザが削除またはバックスペースを押したときの驚きを避けるために、投影エディタは、今削除される予定についての視覚的なフィードバックを提供するようになりました。削除しようとしているコードの部分が最初に強調表示されます。ユーザーが削除またはバックスペースを再度押すと、コードが削除されます。

編集不可能なR / Oモデルのアクセスセル

読み取り専用モデルアクセスセルは値の変更にほとんど使用されないので、デフォルトを再考し、これらのセルをデフォルトで編集不可能(編集可能== false)にしました。手動で編集可能プロパティをtrueに設定して、セルを編集可能にすることは可能です。そうする必要があります。

マイグレーション

移行アシスタントの再設計

マイグレーションアシスタントは最初から書き直され、推奨されるマイグレーションの見栄えを良くし、重要でないマイグレーションエラーを故意にスキップする機能をユーザーに提供します。

IntelliJ IDEAの移行アシスタント

IntelliJ IDEAプラグインは言語の移行を実行できるようになりました。移行アシスタントは、MPSと同様に、現在インストールされている使用言語のバージョンと一致するIDEAプロジェクトのモデルを更新します。

その他の改善

スマートな参照の注釈

MPSは常に適切なテキストプレゼンテーションとコード補完を提供するためにスマートリファレンスを自動的に検出しています。 @smartリファレンス注釈は、例えばプレゼンテーションをカスタマイズしたり、追加の参照を保持するなどの理由で、スマート参照の暗黙的な検出の基準を満たさない概念で使用できます。

インテンションのパブリックAPI

インテンション言語のアスペクトは、jetbrains.mps.openapi.intentions: *パッケージに新しいAPIを提供するようになりました。古いjetbrains.mps.intentions: *パッケージは廃止され、次のMPSリリースで削除されます。

IDEA Pluginでのエディタテストの実行

新しいJUnitテストスイート(jetbrains.mps.idea.core.tests.PluginsTestSuite)を使用すると、IntelliJ IDEAのMPSプラグイン内でエディタテストを実行することができます。