Nouveautés de MPS 2022.3

MPS 2022.3 améliore les règles de contrainte, la migration de la synchronisation avec les extensions MPS, les stubs Kotlin pour la JVM, et plus encore.

La mise à jour des règles de contrainte
Demandé par nos utilisateurs

Nous avons créé le langage des règles de contrainte pour combler les lacunes du langage des contraintes. Pour cette version, les règles de contrainte ont été améliorées afin de rendre le langage plus facile à utiliser.

  • Il est maintenant possible de faire référence aux définitions des règles de contrainte à partir de NodeTestCases. Ce n'était pas possible auparavant.
  • Les définitions expérimentales des règles de contrainte permettent de spécifier des messages de journalisation dans la fenêtre Inspector afin d'améliorer la traçabilité et le débogage.
  • Le message d'erreur pour les règles de contrainte peut cibler des propriétés ou des références de nœuds spécifiques. Plutôt que l'erreur mette en évidence l'ensemble du nœud, il est possible de la configurer pour qu'elle ne mette en évidence qu'une seule propriété ou référence.

Amélioration du chargement des classes des modules

Les modules MPS ont divers objectifs, allant d'une sandbox pour tester votre langage à un code de plugin actif permettant d'altérer le comportement de MPS ou de la plateforme IntelliJ IDEA. Dans MPS 2022.3, nous les avons tous rassemblés sous le même toit. La page Java Facet du module Solution a été repensée pour inclure tous les paramètres pertinents et identifier les scénarios courants afin d'aider toute personne concevant ou utilisant un langage à reconnaître facilement l'utilisation prévue d'un module. IDEA Plugin Module Facet est obsolète et ne sera plus utilisé. Nous n'avons exposé les paramètres que pour les modules Solution. Les modules Language et Generator suivent la même approche, mais leurs paramètres sont configurés de façon implicite. En savoir plus.

Synchronisation de la migration avec les extensions MPS

MPS a toujours eu une communauté active, génératrice de valeur pour l'écosystème, et nous encourageons les utilisateurs à recourir à des bibliothèques externes pour enrichir les fonctionnalités du produit. Third-party libraries, such as MPS Extensions, have been key to improving the user experience for products built with MPS. En dépit des nombreux avantages apportés à la communauté, il reste un inconvénient important : il faut attendre la migration de la bibliothèque tierce pour mettre à jour la version de MPS. Nous avons travaillé avec itemis, notre partenaire officiel et principal mainteneur de l'extension MPS, pour synchroniser nos versions afin de faciliter la migration vers la dernière version du produit.

Autres méthodes utilitaires dans la définition du langage

Les concepteurs de langages peuvent désormais réduire la quantité de code répétitif en l'extrayant dans des méthodes d'assistance à l'intérieur même du nœud racine de la définition. Ces méthodes supplémentaires peuvent être définies dans :

  • Les contraintes
  • Les actions de transformation et de substitution
  • Les règles d'inférence et de vérification
  • Les correctifs rapides
  • Les intentions

Les intentions permettent également d'ajouter des champs supplémentaires afin de préserver les valeurs calculées dans la méthode isApplicable et de les utiliser dans la méthode execute.

Stubs Kotlin pour la JVM

Stubs Kotlin pour la JVM

Il est désormais possible d'importer des stubs à partir de bibliothèques Kotlin/JVM compilées, alors qu'il n'était auparavant possible d'importer que des bibliothèques Kotlin/Common. Avec cette amélioration, il est possible d'utiliser des bibliothèques compilées en JVM (Java, Kotlin ou mixtes) via la racine du modèle Kotlin JVM dans les options de votre module. En savoir plus.

Améliorations de l'édition en Kotlin

Plusieurs modifications et améliorations mineures ont été apportées à cette nouvelle version de MPS :

  • Les classes Kotlin sont désormais des nœuds racinables et disposent de leurs propres icônes.
  • Le code Kotlin peut désormais faire référence aux entrées enum de Java.
  • L'expression this peut désormais se référer correctement à un libellé (par exemple this@SomeClass).
  • Les indicateurs withKotlin dans les scripts de build demandent maintenant une macro $kotlinc_home au lieu d'un emplacement codé en dur comme précédemment.
  • Les stubs ont été améliorés :
    • L'exclusion et l'inclusion de paquets dans les options de stub fonctionnent désormais comme avec les stubs Java.
    • Plusieurs méthodes dont l'identifiant était instable, ce qui entraînait des références erronées, ont été corrigées.
Transformation permettant de créer un constructeur à partir d'un type

Transformation permettant de créer un constructeur à partir d'un type

Il est maintenant possible de créer un appel de constructeur pour un appel donné, à l'aide d'une transformation droite en tapant une parenthèse ouvrante. Cela peut fonctionner pour tout type Kotlin prenant en charge cette opération (vous pouvez l'étendre à des types utilisateurs) et peut faciliter la création d'une expression par défaut pour un type donné, comme lors de la création d'une lambda à partir d'un type d'interface fonctionnelle.

Améliorations des fonctions d'extension dans les portées

Améliorations des fonctions d'extension dans les portées

Les fonctions d'extension dans les portées ont été modifiées afin de ne pas exclure des méthodes compatibles dans les portées. En contrepartie, certains éléments sont maintenant inclus dans les portées alors qu'ils ne sont pas applicables en raison des performances du type actuel d'implémentation du système.

La résolution automatique des références de fonctions permet de corriger les références si vous sélectionnez une fonction non applicable.

Nouvelle intention de réinitialisation du classpath et options de machine virtuelle

Nouvelle intention de réinitialisation du classpath et options de machine virtuelle

Une nouvelle intention met à jour le nœud MPSStartupScript et définit les options de machine virtuelle et les valeurs de classpath en fonction des valeurs MPS actuelles. Les options de machine virtuelle et de classpath de MPS changent à chaque nouvelle version. Auparavant, l'utilisateur devait mettre à jour manuellement les projets de build d'un IDE autonome.

Guide de migration

Lors de la publication de chaque nouvelle version majeure, nous préparons des instructions pour la migration à partir de versions plus ancienne de MPS pour s'assurer que tout fonctionne correctement. Veuillez les étudier attentivement.