Child pages
  • What's new in MPS 2017.3 (draft)

Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.



Generic placeholders

We introduce the notion of a generic placeholder. It may be used as an empty position marker in any child collection. By default, this placeholder node is in the editor represented as empty space and behaves in a transparent way - you may still invoke the completion menu on the placeholder node to replace it with a valid child node or press Enter to add a node in the next sibling position. The Control/Cmd + Shift + Enter key combination inserts the placeholder at the current position within a collection. 

Free-floating comments

A generic DSL commenting functionality has been implemented using the new generic placeholder. It is sufficient for the users to import the jetbrains.mps.lang.text language or the general-purpose devkit in order to have it working. This will give you fully editable multiline text language with support for basic styling (bold, italic and underlined), clickable hyper-links and embedded nodes (code). Just type "[" when positioned on a generic placeholder to start entering the text for your comment. Alternative commenting language can be provided in addition to this default one.

TODO differentiate the font or the background colour of the comment

Customize font family for cell

A new editor style font family in editor definition is now available to enable customization of the font alongside the font size and font style properties. The fontFamily expression allows you to reference any of the installed font families.

Select All

A new SELECT_ALL action, which select the whole editor contents, is now available. You trigger it using the Control/Cmd + A key shortcut and customize its behaviour for your own concepts using action maps.

Undo for deleted nodes

After undoing a root node deletion you can still undo any previous modifications performed inside that root prior to its deletion.


Linking checkpoint models

TODO - test and describe from the user perspective

Models created at checkpoints now keep a reference to the previous checkpoint model in the sequence. This helps the Generator discover mapped nodes matching input that spans several generator phases.

Avoiding unnecessary file overwrites

The make process does not overwrite generated files that hold identical content to the one just generated. You can now rely on the fact that only the modified files get updated on disk.

Build language

A new way to copy module resources

The 'resources' content root specified on modules now serves the purpose of copying resources into a deployed module. A migration has been provided to incorporate the file masks previously hardcoded in resource-copying templates.

Ant Tasks

The MPS ant task provides full control over the repository contents with several new tags - module, modules and allmpsmodules.

DONE Mihail a new screenshot in font Courier 18 and retina display

Migration Ant task improvements

The Migration Ant task has been made more user-friendly. It now

  • Problems during migration make the ant script fail and are properly reported to the user
  • We support all legacy attributes for specifying mps location - mps.homemps_home (TODO check by Mihail) environment? properties  environment properties and the mpshome task attribute. The preferred way is (TODO Mihail)using mps.home environment property

DevKit packaging improved

The devkit modules are no longer deployed as files, but instead are bundled into jar files just like other modules. A migration script has been provided to automatically update the devkit layout elements in your build projects with the new 'module' layout element.

Other improvements

NodePointer for child elements

The nodePointer expression from lang.smodel can optionally reference not only roots, but also any named elements now.

Make considers model dependencies

Make of a model also makes all the model dependencies that need to be regenerated. Saves time and avoids surprises.

Model clone improvement

The Model Clone action correctly updates cross-root references for elements of the cloned model. The cloned model is now completely independent of the original model.