JetBrains annonce la sortie de la version 2021.2 de MPS (Meta Programming System) :
Découvrez les nouveautés de l'environnement de développement de langages DSL

MPS 2021.2 est disponible. La deuxième mise à jour majeure de l'année de l'environnement de développement de langages dédiés de JetBrains apporte un bon lot de nouveautés et améliorations. Parmi les plus notables, on peut citer un mécanisme de vérification de l'orthographe, l'affichage automatique de la fenêtre de saisie semi-automatique, des améliorations du VCS, et bien plus encore.

Avant de présenter les nouveautés plus en détail, rappelons qu'un langage dédié (en anglais, Domain specific language ou DSL) est un langage de programmation dont les spécifications sont conçues pour répondre aux contraintes d’un domaine d'application précis. Il s'oppose conceptuellement aux langages de programmation classiques (ou généralistes) comme Java ou C, qui tendent à traiter un ensemble de domaines. Dans de nombreux cas, les DSL ne sont pas conçus pour être utilisés par des développeurs, mais par des non-programmeurs maîtrisant parfaitement le domaine couvert par le langage dédié.

La construction des langages dédiés diffère fondamentalement de celle d'un langage classique. Le processus de développement peut s’avérer très complexe. Sa conception nécessite en effet une double compétence dans le domaine à traiter et en développement informatique. Mais un langage dédié étant basé sur les concepts et les fonctionnalités d'un domaine spécifique, il reste un moyen efficace de décrire et de générer des programmes dans ce domaine ; ce que veut faciliter JetBrains avec MPS.

MPS vous permet de concevoir votre propre langage dédié avec un environnement de développement complet. Il offre un éditeur de code et est fourni avec son propre moteur de génération de code, qui peut être utilisé pour fournir une sémantique aux DSL basés sur MPS. Vous pouvez donc créer des générateurs pour compiler votre DSL dans plusieurs langages cibles, tels que Java, C, XML, etc. Cela dit, quelles sont les nouveautés et améliorations de cette nouvelle version ?

Affichage de la fenêtre contextuelle de saisie semi-automatique

La saisie semi-automatique du code, auparavant accessible en utilisant Ctrl/Cmd + Espace, s'affiche désormais automatiquement après que vous arrêtez de taper, avec un délai d'une demi-seconde par défaut. Elle reste cependant possible de l'ouvrir manuellement.

Amélioration de la représentation des changements de wrapper dans le diff de VCS

Les modifications d'encapsulation sont désormais beaucoup plus flexibles. Si vous ajoutez ou supprimez un wrapper pour un bloc de code et que vous apportez également des modifications au bloc lui-même, ces modifications seront considérées comme indépendantes. En outre, il est possible d'avoir plusieurs changements d'encapsulation et de désencapsulation les uns à côté des autres. MPS peut désormais détecter les déplacements internes dans les nœuds même si l'ID du nœud parent a changé.


Amélioration de l'affichage des modifications dans les attributs des nœuds

Auparavant, les cellules de l'éditeur pour les attributs n'étaient pas correctement mises en évidence dans la boîte de dialogue Diff. En général, si un attribut était ajouté ou supprimé, l'ensemble du nœud avec l'attribut était mis en évidence plutôt que l'attribut en question uniquement.


Mécanisme générique de vérification de l'orthographe

La fonctionnalité MPS utilise un mécanisme de vérification orthographique d'IntelliJ IDEA pour vérifier les commentaires et les chaînes de caractères afin de détecter les fautes de frappe et les erreurs. Ce dernier a été étendu et maintenant avec tout texte susceptible d'apparaître dans une cellule. Pour indiquer que le texte d'une cellule doit être vérifié à l'aide d'un dictionnaire (tel que configuré dans Préférences), il suffit d'ajouter le style spellcheck à la cellule dans votre déclaration de l'éditeur.

Pour les plateformes client riche (RCP), n'oubliez pas d'inclure le plugin jetbrains.mps.editor.spellcheck dans la distribution.


Version du projet pour les migrations

JetBrains a trouvé une solution pour qu'un projet ayant été migré vers une version plus récente de MPS puisse être ouvert par un développeur utilisant une version plus ancienne de MPS. Le sous-système Migration détecte désormais la version de la plateforme MPS lors de l'application des migrations et vous avertit si le projet que vous essayez d'ouvrir a été migré vers une version plus récente. Cela permet d'éviter la corruption involontaire des modèles.


Portée de référence optimisée

Un mécanisme permet de partager les éléments de la portée évalués lors de la première lecture du modèle. De nouvelles expressions ont été introduites pour cela dans j.m.lang.constraints. Il s'agit de : for model [ factory, key], visible roots [concept] et visible nodes [concept] au lieu de new ModelPlusImportedScope(model, rootsOnly, concept). Les nouvelles expressions sont utilisées pour enregistrer la portée d'un modèle dans le cache, il n'y aura donc pas à l'enregistrer ni à la calculer de nouveau.

Modification des nœuds sans restriction

Les auteurs d'extensions doivent choisir le type d'accès à accorder lorsqu'ils écrivent du code qui fonctionne avec les modèles MPS. Pour les opérations SNode (par exemple setProperty(), addChild(), etc.), il était uniquement possible d'accorder un accès aux commandes, même sans interaction avec l'interface utilisateur. Désormais, tout code avec accès à l'écriture pour le modèle peut apporter des modifications aux nœuds.

Infobulle Radar

La fonction Tooltips dispose désormais d'une fonctionnalité appelée radar; qui indique les cellules dotées d'infobulles. Vous pouvez activer l'infobulle Radar en maintenant la touche Ctrl enfoncée.


Opérateur diamant

BaseLanguage permet désormais à l'opérateur diamant de Java d'inférer des paramètres génériques à partir du contexte d'un constructeur. L'opérateur diamant sera activé par défaut pour tout nouveau code ajouté. Pour l'utiliser pour les constructeurs existants, supprimez les paramètres de type existants et définissez la valeur true pour infer type parameters dans la fenêtre d'inspection ou saisissez à nouveau <> et supprimez le paramètre vide.

Amélioration des propriétés de BaseLanguage

Dans baseLanguage, les propriétés sont désormais prises en compte correctement lors de la vérification de type. Lorsqu'une propriété hérite d'une interface ou de méthodes abstraites, il n'y a maintenant plus aucune erreur de méthode non implémentée. Lorsque vous définissez une propriété avec un type générique, le type correct est utilisé pour accéder à la propriété sur une instance.

Notez que le setter exposé pour une propriété de type T retournera un objet de type T plutôt que void.

Action Show Diff unifiée

MPS affiche désormais la différence entre la version initiale et la version modifiée des fichiers dans l'onglet de l'éditeur. Quelle que soit la manière dont vous appelez l'action Show Diff, l'EDI ouvrira le diff dans l'éditeur par défaut.

Si vous préférez suivre les modifications dans une fenêtre séparée, vous pouvez faire glisser le fichier souhaité depuis l'éditeur. Dans ce cas, l'EDI s'en souviendra et ouvrira les diffs ultérieurs dans une fenêtre séparée.


Autres améliorations

Nouvelle option de navigation dans Preferences/Settings

De nouvelles flèches, en haut à droite de la fenêtre dans Preferences/Settings, facilitent la navigation dans les sections. Elles vous permettent d'aller et venir rapidement entre les sections.


Glisser-déposer les fenêtres d'outils

Vous pouvez maintenant facilement glisser et déposer une fenêtre d'outils à l'intérieur de la fenêtre principale de l'EDI ou dans une fenêtre séparée. Pour faire glisser une fenêtre d'outils, cliquez sur sa barre de nom et déposez-la dans tout emplacement mis en évidence.

Amélioration du Terminal

De nouvelles options permettent de modifier la forme du curseur dans le terminal intégré. En outre, le terminal offre une nouvelle prise en charge des raccourcis utilisant Option (⌥) comme touche Méta. Vous pouvez par exemple utiliser les raccourcis suivants :

⌥F : passer au mot suivant
⌥+B : revenir en arrière d'un mot
⌥+D : supprimer le mot suivant


Nouveautés et téléchargement de MPS 2021.2