Bonjour, Habr! Nous avons récemment publié MPS 2018.3 . Dans cette version, il existe de nombreuses nouvelles fonctionnalités avec lesquelles le travail sur des projets deviendra encore plus efficace. Nous avons amélioré les plans de génération et le langage de description de l'éditeur, ajouté de nouvelles constructions au langage d'assemblage et de conditionnement, mis à jour les éléments d'interface pour une navigation pratique dans la hiérarchie d'héritage et apporté de nombreuses autres modifications pour un travail productif.

Langue de base
Icônes pour naviguer sur des concepts définis / implémentés
Des icônes de concepts redéfinis / implémentés sont apparues dans les domaines des concepts et des concepts d'interface, ce qui simplifie la navigation vers les concepts enfants.

Packages personnalisés pour les classes BaseLanguage
Dans les versions précédentes de MPS, le package Java des classes générées était uniquement déterminé par le nom du modèle dans lequel se trouvaient les éléments source. La nouvelle version de BaseLanguage Classifiers ajoute la propriété packageName, qui vous permet de redéfinir le nom du package Java final. La propriété packageName n'a de sens que pour les classificateurs BL de niveau supérieur, comme c'est le cas avec les classificateurs Java.

Nouvelles fonctionnalités de générateur pour les extensions BaseLanguage
Pour BaseLanguage, des extensions sont souvent créées. Cependant, pour certaines extensions, il peut être difficile d'écrire un générateur approprié. Nous avons ajouté plusieurs nouveaux concepts à BaseLanguage pour simplifier le processus d'écriture des générateurs d'extensions.
Génération d'expressions Lvalue
Une expression lvalue est une variable dans laquelle vous pouvez lire ou écrire une valeur. Dans certains cas, la génération d'une expression Lvalue est difficile car elle peut dépendre du contexte dans lequel elle est utilisée. Un nouveau concept d'aide, generic lvalue-expression
simplifiera le générateur et le rendra indépendant du contexte.

Convertir les expressions Lvalue en liens
Certaines expressions incluent d'autres expressions Lvalue pour des opérations plus complexes avec des variables (par exemple, plus l'affectation ou l'incrémentation et les expressions get). Introduire des constructions avec une telle sémantique était difficile car il n'était pas facile pour eux d'écrire le bon générateur.
Dans la nouvelle version, vous pouvez encapsuler n'importe quelle expression @byRef
avec @byRef
. Le générateur BaseLanguage convertit l'expression encapsulée en une expression de type Reference<T>
, qui fournit les méthodes get et set pour la variable encapsulée.

En savoir plus sur les nouveaux concepts dans cet article .
Prise en charge des méthodes par défaut
Dans la nouvelle version de MPS, vous pouvez créer des méthodes par défaut dans les interfaces BaseLanguage. Le mot clé par défaut est implémenté par le concept DefaultModifier, une extension du concept Modifier. DefaultModifier est contenu dans le langage jetbrains.mps.baseLanguage.jdk8, donc pour créer une méthode par défaut dans l'interface, importez le langage jdk8.

Générateur
Langage générateur (langage de transformation de modèle)
Nous avons supprimé la macro $ INCLUDE $, en remplaçant son utilisation par $ CALL $. Une migration appropriée vous aidera à mettre à jour vos projets. La macro $ INCLUDE $ ne prend pas en charge les modèles avec des arguments et la présence de deux macros de fonctionnalités similaires complique le langage.
La macro $ WEAVE $ et les règles de tissage ont maintenant appris à appeler des modèles avec des arguments. De plus, nous avons corrigé un défaut désagréable, quoique peu visible, qui se produit lors de l'utilisation de modèles compilés et interprétés. L '«introduction» (tissage) d'un modèle externe à partir du code interprété a toujours conduit à l'interprétation, mais maintenant le modèle compilé fonctionnera (bien sûr, à condition que l'utilisation de modèles compilés soit incluse dans les propriétés du générateur). De même, le «tissage» du modèle externe interprété à partir du modèle compilé fonctionne.
QueriesGenerated, un ensemble de requêtes de modèle compilées pour un modèle avec des modèles, s'est toujours appuyé sur une convention de dénomination et un moteur de réflexion Java pour exécuter le code. Vous pouvez le voir dans les traces de pile, lorsque quelque chose s'est mal passé dans la requête de modèle du générateur. Nous nous sommes finalement débarrassés de ce mécanisme.
Éléments UI / UX
Prise en charge de la barre tactile MacBook
Les propriétaires de macbooks avec une barre tactile peuvent désormais l'utiliser pour travailler dans MPS: par exemple, invoquer des actions pour lancer, créer et déboguer une application à partir de la barre tactile, ainsi que sélectionner rapidement une configuration d'exécution / débogage ou en créer une nouvelle. Les commandes de la barre tactile peuvent être configurées dans Paramètres / Préférences | Apparence et comportement | Menus et barres d'outils.
Et bien sûr, les capacités de la barre tactile peuvent être étendues! Ajoutez simplement l'action souhaitée au InterfaceGroup
correspondant.

Thème à contraste élevé
Comme IntelliJ Platform, MPS a un nouveau thème à contraste élevé. Il peut être activé dans Paramètres / Préférences -> Apparence et comportement.

Outils pour trouver du code obsolète
Dans la migration | Des actions de code obsolète sont prises pour trouver du code obsolète et travailler avec ses utilisations. Rechercher les utilisations des résultats de recherche de groupes obsolètes par la version de suppression prévue, ce qui permet de déterminer la gravité et de sélectionner les utilisations à supprimer en premier.

Icônes pour naviguer dans les méthodes de comportement remplacées / implémentées
Dans les domaines des classes de comportement, nous avons ajouté des icônes pour naviguer dans les méthodes de comportement remplacées / implémentées. Voici une liste des méthodes getPresentation () qui remplacent ou implémentent la méthode sélectionnée. Dans la liste, vous pouvez facilement accéder à l'une de ces méthodes.

Améliorations contextuelles pour la navigation des remplacements
Les fenêtres contextuelles des concepts / classes / méthodes remplacés / implémentés sont devenues asynchrones. Cela signifie que MPS ajoutera les résultats de la recherche à une fenêtre contextuelle en arrière-plan. De plus, vous pouvez désormais filtrer les résultats de recherche par nom d'objet.

Modifications des Finders
Dans cette version, nous avons mis à jour et optimisé les viseurs. Pour l'exécution asynchrone du chercheur, utilisez l'expression spéciale OnEachNodeFoundByExpression, qui est un simple appel au chercheur avec une fonction de rappel pour chaque nœud détecté.
Les paramètres de recherche d'utilisations pour les concepts ont également changé. Nous avons ajouté les options de recherche Concept Ancestors et Derived Concepts, qui affichent respectivement une liste de concepts parent et enfant. De plus, les capacités de recherche des méthodes de comportement ont été améliorées avec les options Méthodes remplacées et Méthodes de substitution.

Ignorer les erreurs
Dans MPS, vous pouvez ignorer les erreurs sur les nœuds. Ceci est pratique dans les cas où l'erreur est affichée dans l'éditeur, mais dans un contexte spécifique n'a pas de sens (par exemple, dans les modèles de générateur). Auparavant, les possibilités de suppression de telles erreurs étaient inflexibles. Si le nœud a été annoté avec l'attribut 'SuppressErrorAnnotation', alors l'effet 'Supprimer l'erreur pour le nœud ...' a été appelé. L'utilisation de cette intention a supprimé toutes sortes d'erreurs sur ce nœud et tous ses descendants - de cette manière, les erreurs réelles pourraient être ignorées.
Il est désormais possible d'ignorer uniquement certains types d'erreurs. L'erreur sélectionnée sera ignorée pour ce nœud et tous ses descendants, mais tous les autres messages seront affichés. En savoir plus sur les nouvelles fonctionnalités de gestion des erreurs dans la documentation .

Langage d'assemblage et d'emballage
Trucs et astuces
Applications RCP (Rich Client Platform) utilisées pour ajouter des trucs et astuces à partir de MPS par défaut. Désormais, les trucs et astuces pour votre application peuvent être redéfinis à l'aide de la nouvelle conception de trucs et astuces du script de construction. Comme précédemment, vous pouvez utiliser les conseils de la distribution MPS ou les définir vous-même dans un répertoire ou un module de solution et les importer.

Conseils et astuces Langage de description
Pour importer des trucs et astuces dans un script de construction à partir d'un module de solution, créez une solution et importez les langues jetbrains.mps.build.tips et jetbrains.mps.core.xml. Créez ensuite une instance du concept MPSTipsAndTricks et décrivez-y vos conseils. Chaque conseil est du texte HTML et ne peut contenir plus d'une image.

Méthodes d'emballage
Nous avons marqué l'empaquetage personnalisé dans BuildMps_IdeaPlugin comme obsolète. À la place, utilisez la méthode d'empaquetage dans la construction BuildMpsLayout_Plugin.
La méthode d'assemblage d'empaquetage automatique place tous les modules du type de langue et de solution dans le dossier «langues» du répertoire racine du plug-in, et l'option d'empaquetage manuel permet au développeur de définir lui-même la structure du plug-in.

Nouvelle conception du langage d'assemblage et d'emballage
Nous avons étendu les capacités de la configuration de test dans le langage d'assemblage et d'emballage. Il est maintenant possible de spécifier des plugins IntelliJ IDEA supplémentaires qui doivent être chargés pour exécuter des tests MPS à partir d'Ant.
Dans certains cas, pour exécuter le test, un certain plug-in est requis, que le langage d'assemblage n'a pas pu calculer par les modules contenant les tests. Vous pouvez maintenant spécifier le plugin nécessaire pour exécuter le test dans la conception de la configuration de test.

L'éditeur
Réutiliser les cartes d'action des cellules
Les éléments de mappage d'action de cellule d'un mappage d'action existant peuvent être réutilisés à l'aide d'importations.

Autres améliorations
Types de données entièrement compilés
Vers des langages entièrement compilés, nous avons créé des types de données entièrement générés. Toutes les informations de types de données générées sont disponibles via l'API SModel.
Enregistrement des données de migration dans des annotations
Nous avons mis en œuvre une nouvelle façon de sauvegarder les données lors des migrations, que nous recommandons d'utiliser à l'avenir. Le nœud dérivé contenant les données doit maintenant être attaché à tout nœud situé suffisamment près de l'endroit auquel les données appartiennent.
Dans le script de migration qui crée des nœuds avec des données, vous devez déclarer le concept de ces nœuds et utiliser la construction putData () pour insérer chacune de ces annotations dans le modèle:

La récupération des nœuds contenant des données est la même qu'auparavant:

Modifications de la boîte de dialogue de résolution des conflits
Auparavant, dans un conflit, les modifications ne pouvaient être appliquées que d'un côté. Mais parfois, il est important de ne pas perdre d'autres modifications.
Cela s'applique aux changements dans les nœuds voisins qui sont dans le même rôle pluriel. Maintenant, après avoir appliqué les modifications d'un côté du conflit, les modifications de l'autre branche seront affichées en tant qu'addition. Pour achever la résolution du conflit, cet ajout doit être appliqué ou rejeté.
Après avoir appliqué les modifications sur le côté gauche du conflit, vous pouvez appliquer ou ignorer la ligne sur le côté droit:

Vous pouvez télécharger la nouvelle version ici , nous espérons qu'elle vous ravira. Dans tous les cas, nous attendrons vos retours ! Une liste complète des correctifs est disponible sur cette page . Veuillez nous signaler tout problème dans le tracker .
Votre équipe JetBrains MPS
La volonté de se développer