This is the last release of MPS for this year. We are excited about how far MPS has come and where it’s going. We’re always listening to our community in deciding which new features to implement in order to help you build incredible projects with MPS.
For this release, there are new features and enhancements in four key sections: Editor, Generator, Build language, and miscellaneous.
- Generic placeholders
We’ve introduced the notion of a generic placeholder. A generic placeholder may be used as an empty position marker in any child collection in any language, and it may optionally hold additional content. By default, this placeholder node is represented in the editor as an empty space and behaves in a transparent way – you can invoke the completion menu on the placeholder node to replace it with a valid child node, or you can 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. To take advantage of this, simply import the jetbrains.mps.lang.text language or the general-purpose devkit. This will give you a fully editable multi-line text language with support for basic styling (bold, italic and underlined), clickable hyperlinks, and embedded nodes (code). Just type “[” when positioned on a generic placeholder to start typing your comment.
In addition to this default commenting language, you can create a custom one to meet your specific needs.
- Customize font family for cell
A new editor style font family in the editor definition is now available to enable customization of a font alongside its size and style properties. Use the fontFamily expression to reference any of the installed font families.
- Select All
A new action, SELECT_ALL, is now available to select the entire content across the whole editor. You can trigger it with the Control/Cmd + A shortcut, and customize its behavior for your own concepts by using action maps.
- Undo for deleted nodes
We’ve improved how undo works 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
Checkpoints now allow resolving references in mapping labels across multiple generator phases. You can thus safely resolve references to nodes even if they were generated at an earlier checkpoint.
- 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.
- 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.
- Migration Ant task improvements
The Migration Ant task is now more user-friendly.
– 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.home, mps_home environment properties, and the mpshome task attribute. The preferred way is to use the mps.home environment property.
- Devkit packaging improved
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.
- 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. This saves time and helps avoid 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.
So that’s it. We hope you like all the features that we’ve prepared for you. Our community is key for us so we’re always listening. Follow us on Twitter and join our slack channel to stay tuned for more updates and give us your feedback!
Have a great day!
Your JetBrains MPS Team
The Drive to Develop