This is the latest MPS release this year. In this version there are new features and improvements in various important areas: editor, generator, layout language and more.
We are very pleased with the progress of MPS and the prospects for further development. We always listen to the community opinion, deciding what other functionality you need to add to MPS to help you create your incredible projects!
Download MPS 2017.3
Tell us more about the innovations.
Editor
Universal Fillers
We introduced the concept of a generic placeholder. Universal placeholders can be used to denote empty positions in any collection in any language, and some useful content may also be contained in them. By default, the placeholder node looks like an empty place in the editor, and its behavior is transparent - while in it, you can call autocompletion to replace the placeholder with some element of the language that may be in this place. Or, you can press the Enter key and add a new item to the next position of this collection. The universal placeholder is inserted with the Control / Cmd + Shift + Enter key combination.
')

Floating comments
The emergence of universal placeholders has allowed for universal commenting in domain-specific languages ​​(DSL). To take advantage of this opportunity, it is enough to import the language jetbrains.mps.lang.text or devkit for general use. As a result, you will receive a language of freely editable multi-line comments with hyperlinks, with the ability to customize the font (bold, italic, underline), into which you can also paste the code. To enter a comment, simply move the cursor to the universal placeholder, press "[" and start typing.
If the standard comments language is not enough, you can create your own with additional features.

Setting the font type for cells
In the definition of the editor, you can now customize not only the size and font style, but also the headset. The fontFamily expression allows you to reference all installed font families.

Choose all
The new action SELECT_ALL allows you to select the entire contents of the editor entirely. It is triggered by the Control / Cmd + A keyboard shortcut, and its behavior can be customized according to your preferences using action cards.

Undo for remote sites
Previously, removing the root nodes was a very dangerous task, because it lost the history of changes. Now we have improved the undo mechanism. From now on, returning the removed root with undo can return changes that were made to this root node before it was deleted.
Generator
Linking control point models
Checkpoints now support passing through links marked with a mapping label, without requiring simultaneous generation of the link and what it refers to. Now you can safely resolve the references, even if the node to which it refers was generated at an earlier checkpoint.
Eliminate redundant file overwriting
The build process no longer overwrites the generated files, the contents of which are identical to those just generated. Now you can count on the fact that only really modified files are updated on the disk.
Layout language
New way to copy module resources
The root content node “resources”, indicated in modules, is now used to copy resources into a deployable module. For transfer to the templates of copying the resources of those mask files that were previously hard-wired in the code, a special migration is provided.

Ant tasks
The Ant MPS task provides full control over the contents of the repository with several new tags: module, modules and allmpsmodules.

Ant task migration enhancements
The Ant task for migration is now a more user-friendly interface.
If problems occur during migration, the Ant script stops working and correctly reports errors.
All old attributes are supported to indicate the location of mps - the environment variables mps.home and mps_home, as well as the attribute of the mpshome task itself. However, it is now desirable to use the mps.home environment property.
Development Packing Improvements
Modules of the devkit type, which are collections of languages ​​and libraries for specific user needs, are now not contained in the distribution package as separate files, but are packaged in jar files the same way as other modules. In order to automatically update your build script and start packing them in a new way with the help of the new “module” construction, you don’t need to do anything special - the migration will occur automatically.
Other improvements
NodePointer for children
The nodePointer expression from lang.smodel is now able to refer not only to root nodes, but also to any named elements.

Accounting for model dependencies during assembly
When a model is generated, it also assembles all its dependencies that need to be regenerated. This saves time and avoids unpleasant surprises.
Improved cloning model
The Clone Model action correctly updates cross-references between different roots for elements of a cloned model. Now the cloned model is completely independent of the original.

That's all. We hope you will enjoy all the new release. We always listen to your opinion. Join us on
Twitter and connect to our
slack channel to be the first to know about updates and share your feedback!
Good luck!
Your JetBrains MPS Team
The Drive to Develop