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 ?
Éditeur
Zoom avant et arrière
La taille de la police peut être rapidement ajustée dans une fenêtre d'éditeur ouverte en maintenant la touche Contrôle enfoncée et en faisant tourner la molette de la souris. Les modifications de la taille de la police ne sont pas persistantes. Ainsi, lorsque vous ouvrez de nouveau le fichier, le texte reprend la taille par défaut. Vous pouvez activer ou désactiver cette fonctionnalité dans Preferences | Editor | General, dans la section Change font size with Ctrl/Cmd+Mouse Wheel.
Amélioration des performances pour la mise en page indentée
L'implémentation de la mise en page indentée est maintenant incrémentale dans certains cas importants, ce qui réduit le temps de rendu pour les grands modèles dans les langages utilisant principalement l'indentation (comme BaseLanguage). Cette fonctionnalité peut être désactivée avec l'option VM mps.indent_layout.disable_incremental.
Options pour le poids de la police
Il est important de choisir une police d’éditeur avec laquelle vous pouvez travailler confortablement pendant plusieurs heures d'affilée. Les paramètres de typographie que JetBrains a récemment ajoutés vous permettent de personnaliser facilement le style de police. Dans la version 2021.1, vous pouvez ajuster le poids de la police principale et de la police grasse dans Preferences | Editor | Fonts.
Système de contrôle de version
Améliorations de la fonction d'annotation racine
La prise en charge du système de contrôle de version apporte des améliorations à l'annotation racine. Un nouvel algorithme de calcul des changements de révision avec suivi des mouvements est maintenant utilisé pour l'annotation racine. Les couleurs des lignes/cellules annotées sont déterminées uniquement sur la base des révisions dans lesquelles la racine a été modifiée. Les cellules annotées disposent désormais des options du menu contextuel lorsque la colonne d'annotation est ouverte. Vous pouvez notamment appliquer les actions Copy Revision Number et Show Diff à chaque cellule annotée.
Boîte de dialogue Diff pour les commits fusionnés
La boîte de dialogue Diff est activée pour les commits fusionnés dans le journal Git. La visionneuse affiche trois panneaux : le panneau central pour le modèle fusionné, et les panneaux gauche et droit pour les modèles des deux branches fusionnées.
Synchronisation du défilement dans l'éditeur de Diff
Il est désormais possible de désactiver la synchronisation du défilement de l'éditeur dans la boîte de dialogue Diff à l'aide d'un bouton.
Graphique des révisions utilisé pour l'annotation racine et l'historique des racines/noeuds
Les algorithmes d'annotation racine et d'historique des racines/noeuds étaient auparavant basés sur la liste ordonnée des révisions de fichiers, en calculant les changements de racine entre deux révisions adjacentes. Il était toutefois possible que ces révisions proviennent de deux branches différentes, auquel cas les changements obtenus n'avaient aucun sens. Les révisions de fusion n'étaient pas gérées correctement non plus. Les modifications des anciens cycles de révision pouvaient s'afficher par erreur comme des modifications de la révision de fusion la plus récente. L'algorithme prend désormais en compte le graphique des révisions lorsqu'il formule l'historique des modifications.
Save to Shelf
Notre nouvelle action Save to Shelf vous permet de copier vos modifications dans Shelf tout en les conservant dans les modifications locales. Pour accéder à cette action, appuyez sur Ctrl+Maj+A (sous Windows ou Linux) et saisissez « Save to Shelf ».
Générateur
Amélioration de l'accès aux variables de macro $LOOP$
Il est désormais possible de faire référence au nœud d'entrée d'une macro LOOP en utilisant une expression LOOP.inputNode. Vous n'avez donc plus besoin d'utiliser une macro VAR. Vous pouvez aussi accéder à l'index de LOOP sous le même espace de noms en utilisant LOOP.index pour remplacer la précédente variable de contexte définie par l'utilisateur.
Mise à jour de l'instruction Transform dans la déclaration GenPlan
Pour améliorer l'extensibilité du plan de génération de modèles, il existe un nouveau mécanisme permettant d'inclure des langages ou des générateurs qui sont inconnus du concepteur de plan. Maintenant, avec l'instruction transform, le concepteur de langage peut inclure un langage qui cible ou étend un langage donné. Lorsqu'on dit que le langage B « cible » le langage A, cela veut simplement dire que le générateur du langage B produit des constructions du langage A.
Amélioration des modèles compilés
Les préférences du générateur dans l'EDI contiennent une option appelée Warn when child cannot be placed into role, qui vérifie si le modèle de nœuds produit correspond au rôle approprié d'un nœud parent. L'option est également disponible via les paramètres du projet de build. Le générateur peut émettre un avertissement, qui indique généralement qu'il existe une incohérence dans les modèles, comme un fragment de modèle mal placé ou une annotation COPY-SRC. Cependant, les modèles compilés n’effectuaient pas cette vérification.
Avec MPS 2021.1, les modèles compilés vont désormais plus loin et vérifient si les enfants sont correctement placés dans les nœuds parents si l'option est active.
Divers
Compilateur Java pour modules MPS avec facette Java
Beaucoup de choses ont changé dans l'approche de la compilation Java des modules MPS. Cela répond à l'une des demandes ayant reçu le plus de votes : la prise en charge de l'outil Annotation Processing. JetBrains a changé l'infrastructure du compilateur Java MPS pour utiliser l'ensemble d'API javax.tools.JavaCompiler, afin que MPS puisse utiliser n'importe quel compilateur qui implémente cette API standard. Depuis la version 2021.1, MPS fonctionne avec le compilateur par défaut configuré pour cette API, avec une option pour utiliser l'Eclipse Compiler for Java (ECJ).
Version de référence de MPS pour les migrations de projets
Lorsqu'un nouveau projet est créé, une version MPS « de référence » est désormais enregistrée. Il n'est pas possible de transférer des projets de précédentes versions de MPS vers la nouvelle version. Les auteurs ont ainsi la possibilité de donner aux migrations de projet une version "de référence", qu'ils peuvent modifier dans l'interface de migration de projet en utilisant la nouvelle méthode getBaselineVersion():int.
Améliorations de la refactorisation Method Signature
La boîte de dialogue de la refactorisation Method Signature comprend maintenant un moyen de spécifier des valeurs par défaut pour les nouveaux arguments ou les arguments dont les types ont changé. Lorsqu'un paramètre est supprimé, mais qu'il est toujours utilisé dans la méthode, une nouvelle variable locale est introduite afin que la référence ne soit pas perdue. Si l'appel d'une méthode ne correspond pas à sa signature, une action d'intention vous permet de modifier la signature de la méthode pour la faire concorder avec l'appel.
Nouvelles options dans les commentaires BaseLanguage
Le langage lang.text a été doté de plusieurs nouvelles capacités, qui améliorent directement les commentaires d'une ou plusieurs lignes dans BaseLanguage.
- Désormais, lors de la sélection dans les positions supérieure et inférieure, la sélection de texte vous permet de mettre en évidence une partie d'une ligne seulement.
- Les actions telles que gras, italique et souligner fonctionnent sur la sélection.
- Le copier-coller depuis et vers du texte simple a été implémenté.
- Les listes à puces et numérotées sont désormais prises en charge.
Amélioration des expressions dans lang.smodel
Les expressions model.roots(), model.rootsIncludingImported() et model.nodesIncludingImported() prennent désormais en charge #expression pour spécifier les concepts, tout comme model.nodes() le fait.
Contrôle de la visibilité des modules distribués avec votre plugin
Pendant longtemps, MPS a supposé que tous les modules provenant des plugins de langage étaient visibles pour l'utilisateur final. Avec le nombre croissant de langages, ainsi que la complexité des plugins, il y a des cas où les concepteurs de langage veulent masquer certains modules afin de ne pas confondre ou submerger l'utilisateur final avec un grand nombre de langages ou de solutions non liées.
Les plugins indiquent à MPS les modules auxquels ils contribuent au moyen d'un point d'extension com.intellij.mps.LanguageLibrary. Les points d'extension peuvent désormais fournir un attribut facultatif hide="true", ce qui rend les modules du plugin éligibles pour être filtrés par un schéma spécifié avec com.intellij.mps.VisibleModuleMask.
La plupart des plugins MPS portent désormais le drapeau, ce qui facilite le filtrage des propres langages de MPS si le concepteur de langage a besoin de les masquer. MPS fournit des masques pour ses propres modules avec le plugin jetbrains.mps.ide.devkit, les auteurs d'un EDI personnalisé n'incluent généralement pas ce plugin dans une distribution et ont un contrôle total sur les modules visibles dans leur produit.
Autres améliorations
Aperçu HTML intégré
Le nouvel aperçu intégré au navigateur vous permet de prévisualiser rapidement des fichiers HTML. Pour l’ouvrir, cliquez sur l’icône avec le logo MPS dans le widget en haut à droite de l’éditeur. Si vous apportez des modifications au HTML ou si vous modifiez les fichiers CSS et JavaScript liés, l’aperçu répercutera immédiatement ces changements.
Prise en charge d’Apple Silicon
Vous pouvez maintenant utiliser MPS sur les Macs ayant une puce M1. Pour commencer, téléchargez le programme d'installation de JetBrains MPS pour Apple Silicon directement sur le site web du produit ou obtenez-le à partir de l'application Toolbox App.
Paramètres d'auto-importation
Avec MPS 2021.1, la boîte de dialogue Import Settings qui apparaissait chaque fois que vous installiez une nouvelle version de MPS s'affichera seulement si vous ne disposez pas des paramètres et configurations appropriés.
Amélioration de l’accessibilité
Dans cette version, JetBrains a ajouté davantage de libellés aux éléments de l’interface utilisateur sur l’écran de bienvenue, dans la vue Project Structure et dans le journal du VCS. Ces éléments, ainsi que les icônes de la gouttière, peuvent désormais être lus correctement par un lecteur d'écran. JetBrains travaille également à l’amélioration de la prise en charge de l’accessibilité pour les utilisateurs de macOS.
Télécharger MPS 2021.1