What's New in MPS 2017.2

Generator

Cross-model generation enhancements

Generation plans can generate descriptor models for languages. The Structure, TextGen, Typesystem, Dataflow and Constraints aspects are generated with generation plans and they use the new cross-model reference resolution mechanism. Custom aspects defined by language authors can participate in this mechanism, as well.

Reference macros returning SNodeReferences

Targets for references set through reference macros (->$) can be additionally specified as SNodeReferences. Using SNodeReferences avoids the necessity to access the target node's model when the macros are being applied.

Editor

Reference actions

Reference actions are newly supported by the Substitute Menu Language. They specify how the completion menu is filled with potential target nodes of a reference and also to customize their visual appearance.

Custom reference presentation and matching

To make things more consistent, the Editor aspect instead of the Constraints should now be used to specify the visual presentation of a reference. Additionally, the reference cell menu provides means to specify the matching text. We've also prepared a migration to move the definitions from Constraints into the Editor aspect automatically for you.

Menu Item Trace

Editor implementers will love this one - to track, which transformation or substitute menu contributed a particular action to the completion menu or to the context assistant, they just press Control/Cmd + Alt + B on a completion menu entry and an interactive trace report will show up, detailing the path through the menus to the selected menu entry.

Usability

Shiftless code completion

The code completion got yet smarter - you no longer need to press shift to capitalize characters in multi-word names. MPS will figure out suitable matches for you.

Two step deletion

Deletion has become safer. In order to avoid surprises when the user presses Delete or BackSpace, the projectional editor now provides visual feedback about what is going to be deleted. The part of the code, which is about to be deleted, becomes highlighted first. Only when the user presses Delete or Backspace again, the code will be deleted.

Not editable R/O model access cell

The Read-Only model access cells are rarely used for changing values, so we reconsidered the defaults and made these cells non-editable (editable == false) by-default. It is still possible to manually set the editable property to true to make the cell editable, may you need so.

Migration

Migration assistant redesigned

The migration assistant has been rewritten from scratch to offer a better view of the recommended migrations and also to give the user the ability to deliberately skip over non-critical migration errors.

Migration assistant in IntelliJ IDEA

The IntelliJ IDEA plugin can now run language migrations. Just like in MPS, the Migration assistant will update models in IDEA projects to match the currently installed versions of used languages.

Other improvements

Annotation for smart references

MPS has always been automatically detecting smart references to provide suitable textual presentation and code completion for them. The @smart reference annotation can be used on concepts that do not meet the criteria for implicit detection of smart references, for example because they customize their presentation or hold additional references.

Public API for Intentions

The Intentions language aspect now provides a new API in the jetbrains.mps.openapi.intentions.* package. The old jetbrains.mps.intentions.* package has been deprecated and will be removed in the next MPS release.

Running editor tests in IDEA Plugin

With the new JUnit test suite (jetbrains.mps.idea.core.tests.PluginsTestSuite) it is possible to execute editor tests inside the MPS plugin for IntelliJ IDEA.