MPS 2023.2 améliore la génération de lambdas BaseLanguage, la prise en charge de JUnit 5, la redéfinition des règles d'inférence du système de types, et bien plus.
Avec la nouvelle version de MPS, les tests sont générés en tant que tests JUnit 5. JUnit 4 reste pris en charge, mais de manière limitée.
BTestCase
NodeTestCase
EditorTestCase
MigrationTestCase
PatternTest
GeneratorTest
Une nouvelle tâche Ant launchtests
est disponible et prend en charge les éléments suivants :
library
macro
plugin
testmodules
Cette prise en charge inclut l'exécution de tous les artefacts de tests, à l'exception de JUnit 3, et sert de nouvelle cible pour la partie build de la configuration de test.
Cette API vous permet d'ajouter de nouveaux types de tests pour MPS et d'implémenter des listeners pour les sessions de tests.
Les classes inclused dans jetbrains.mps.baseLanguage.unitTest.platform
forment l'API de la plateforme de tests MPS :
TestPlatform | Définit l'API pour la plateforme de tests MPS. |
TestDescriptor | Représente un test unique sur la plateforme de tests MPS. |
TestSource | Représente la source du test, par exemple un SNode . |
TestSession | Représente une session de test. |
TestDiscoveryParticipant | Permet de rejoindre le processus de découverte des tests. |
TestSessionListener | Permet de recevoir les notifications de la session de tests. |
JUnit 5 fournit prise en charge de l'implémentation de tests exécutés avec un moteur personnalisé, tel que le framework de tests basé sur les propriétés jqwik .
Nous avons ajouté une fonctionnalité qui permet aux règles du système de types de remplacer les règles basées sur les super-concepts. Cela s'applique aux cas dans lesquels les sous-concepts sont définis dans un langage qui étend le langage contenant le super-concept. Cette fonctionnalité est prise en charge pour les règles de type Inference
.
Une précédente mise à jour de MPS avait déjà amélioré la prise en charge des références de méthodes et de la conversion des fermetures (closures) en lambdas Java. Avec la nouvelle version de MPS, nous poursuivons l'amélioration de cette prise en charge en apportant plusieurs nouvelles fonctionnalités et correctifs de bugs.
Les fermetures utilisées dans les opérations de collecte sont désormais générées en tant que lambdas Java. Initialement, cette fonctionnalité était seulement disponible pour les appels de fonction classiques utilisant des interfaces Java. Pour maintenir la rétrocompatibilité, une fermeture sera toujours générée en tant que classe anonyme dans les cas suivants :
Cela permet d'améliorer la qualité du code généré en rendant les lambdas plus lisibles et en réduisant le risque qu'elles soient générées de manière incorrecte. D'un autre côté, MPS permet l'utilisation de types bruts que Java ne permettrait pas, la détection de telles instances étant toujours compliquée. Par conséquent, la génération peut échouer lorsque des types bruts sont utilisés.
Auparavant, les paramètres de fermeture pouvaient prendre les formes suivantes : ~param
, <type> param
, param
et var param
. L'ajout de paramètres en omettant le type était fastidieux. Pour la nouvelle version, nous avons abandonné la forme ~param
au profit d'un simple paramètre non typé, inséré par défaut. De plus, lorsqu'une fermeture est insérée dans un appel de fonction, les paramètres par défaut du type de fonction attendu seront insérés. Enfin, si le type des paramètres est omis dans le code source, il sera dorénavant omis dans les paramètres générés aussi, ce qui améliore la qualité de la compilation.
Bien que les séquences soient largement utilisées dans MPS, il arrive aussi qu'il soit nécessaire d'utiliser des flux Java. Cette mise à jour améliore l'inférence afin d'atténuer les problèmes de système de types liés aux méthodes complexes que l'API Stream peut utiliser. Nous avons ajouté deux opérations pour relier les flux et les séquences :
<stream>.asSequence
convertit une séquence en flux.<sequence>.toStream(parallel=…)
fait l'inverse.En plus de vous permettre de choisir quelle API utiliser, cela permet de combiner les avantages des séquences (répétabilité) à ceux des flux (divers collecteurs, davantage d'opérateurs).
Nous avons introduit l'opérateur diamant (new ArrayList<>()
) pour les constructeurs BaseLanguage
lors dune précédente mise à jour de MPS, mais cela n'avait pas eu d'impact sur la création de collections. Dans cette nouvelle version, vous pouvez omettre les paramètres de types de nouvelles collections pour simplifier le processus d'écriture du code :
var myList = new arraylist<> {myInitialValue}
map<int, string> myMap = new hashmap<>
Nous avons aussi amélioré la prise en charge de la variance dans les collections. Il n'est par exemple plus possible d'attribuer une notation ? extends Number
. Le système de types ne s'opposera toutefois plus à l'utilisation de ces types bornés (bounded) lorsqu'ils sont valides. Le type sequence<>
restera covariant par défaut. Cela n'aura aucune conséquence négative puisque vous ne pouvez pas l'insérer dans une séquence d'éléments qui ne sont pas de son type. Cela peut entraîner de nouveaux problèmes de vérification de type là où du code non sécurisé n'était pas détecté auparavant. Ces problèmes peuvent être résolus avec des types bornés list<? extends node<>>
ou avec des types de séquences sequence<node<>>
.
Nous avons ajouté une nouvelle option, Disable Make On Startup, disponible dans Settings | Project Settings | Make. Lorsque cette option est sélectionnée, MPS ne génère pas tous les modules du projet au démarrage. Cela peut notamment permettre d'accélérer le démarrage lorsque le processus de création initial est trop long ou qu'il risque d'échouer car une configuration manuelle est requise en amont pour que le projet puisse être créé.
Une nouvelle option Edit a été ajoutée à l'onglet Java de la boîte de dialogue des propriétés du module. Elle n'est pas immédiatement repérable, mais très pratique : si vous devez modifier l'ensemble des bibliothèques jar d'un module, vous pouvez simplement utiliser cette option au lieu de devoir supprimer puis ajouter des bibliothèques une par une.
L'extension du concept IGenericComment
permet aux concepts qui représentent des commentaires dans des langages personnalisés de participer à la fonctionnalité TODO de MPS. Les commentaires représentant des objets TODO seront collectés par le TODO Finder, répertoriés dans le TODO Viewer et vérifiés lors du processus de commit.
Auparavant, pour la création d'instances dans le modèle d'aspect, MPS suivait une logique générale qui impliquait des concepts non abstraits pouvant être enracinés et classés par nom ou flag. Dorénavant, une configuration supplémentaire peut être spécifiée avec une déclaration d'aspect afin de permettre aux concepteurs de langage de choisir quels concepts sont présentés à l'utilisateur et la façon dont ils sont regroupés et ordonnés.
Cet avertissement déroutant s'affichait lorsqu'un ClassConcept
étendait ou exposait d'une autre manière son utilisation d'un ClassConcept
d'un autre module. Avant la version 2023.2, MPS s'appuyait sur les dépendances de module spécifiées dans les descripteurs de module pour créer le graphique des dépendances. Maintenant que MPS organise les informations de dépendance en fonction des générateurs et des langages réels impliqués dans la transformation d'un modèle, il n'est plus nécessaire de spécifier explicitement ces dépendances, et il n'y a donc plus de vérification à faire.
Le partage est fondamental dans toute communauté. Les fonctionnalités suivantes ont été implémentées à la demande de clients utilisateurs de MPS, qui nous ont sponsorisés pour contribuer à leur développement. Ces nouvelles fonctionnalités sont maintenant accessibles à tous.
Le vérificateur de modèles peut maintenant utiliser efficacement le matériel en parallèle, ce qui accélère le processus de vérification. En fonction des paramètres dans Settings | Tools | Model Checker, il peut générer plusieurs threads lors du démarrage de ce processus.
La méthode FilePerRootDataSource.getStreamByName()
a été optimisée afin d’améliorer les performances du chargement des données des modèles. Si vous utilisez la persistance File-per-root pour stocker des modèles plutôt volumineux, vous constaterez les effets de cette optimisation.
Désormais, l'action Find text in project recherche aussi les références des nœuds nommés afin de donner davantage de résultats pertinents. Nous avons ajouté un panneau de prévisualisation pour vous permettre de consulter les résultats directement dans la boîte de dialogue de recherche. Un texte contenant du HTML s’affiche désormais en tant que texte brut dans les résultats et non plus en tant que HTML.
Lorsqu'on procède à la migration d'un projet en utilisant des tâches Ant fournies par MPS, il peut arriver que la migration des dépendances ne se fasse pas correctement. Nous avons ajouté un flag qui permet de poursuivre la migration d'un projet même dans de telles situations. L'arrêt du processus de migration dès la découverte d'une erreur de migration de dépendances reste toutefois le comportement par défaut. Pour utiliser ce flag, ajoutez haltOnDependencyError="false"
à votre tâche Ant migrate
.
Dans la version 2023.2, il est possible de faire un zoom avant ou arrière sur l'ensemble de l'IDE, afin d'augmenter ou de réduire la taille de tous les éléments de l'interface en même temps. Dans le menu principal, sélectionnez View | Appearance et ajustez la mise à l'échelle de l'IDE. Vous pouvez également affecter des raccourcis personnalisés à ces actions dans Settings/Preferences | Keymap | Main Menu | View | Appearance.
MPS 2023.2 apporte une nouvelle option de mise en page qui permet d'unifier la largeur des fenêtres d'outils latérales ou de conserver la possibilité d'ajuster leur taille librement. La nouvelle case à cocher Remember size for each tool window est disponible dans Settings/Preferences | Appearance & Behavior | Appearance | Tool Windows. Apprenez-en plus sur le fonctionnement de ce paramètre pour la nouvelle interface utilisateur et pour l'ancienne dans cet article de blog.
Dans Settings / Preferences | Editor | Inspections, la syntaxe des extraits de code est désormais mise en évidence, ce qui vous permet de mieux comprendre ce qui déclenche une inspection et de décider si vous souhaitez l'activer ou pas.
L'action de l'éditeur Fill Paragraph est maintenant prise en charge pour les fichiers Markdown, ce qui permet de fractionner de longs textes en plusieurs lignes de même longueur. Pour ce faire, placez le curseur dans le paragraphe à modifier et cherchez la commande Fill Paragraph à l'aide de Find Action (Ctrl+Maj+A).
Nous avons amélioré l'ergonomie de la fenêtre contextuelle Branches. Par exemple, la navigation entre les branches est maintenant facilitée, car elles sont regroupées et stockées dans des listes que vous pouvez développer.
MPS 2023.2 fournit la saisie semi-automatique dans la fenêtre contextuelle Create New Branch. Lorsque vous commencez à saisir le nom de votre nouvelle branche, l'IDE vous propose des préfixes basés sur les noms des branches locales existantes.
Pour chaque nouvelle version majeure de MPS, nous fournissons des instructions pour vous aider à effectuer la migration dans les meilleures conditions. Nous vous invitons à en prendre connaissance.