MPS 2024.1 incorpora una nueva implementación asíncrona del panel Logical View en la ventana de herramientas Project, mejoras sustanciales en la compatibilidad con Kotlin para varias plataformas y tiempos de ejecución de pruebas notablemente más rápidos. También encontrará bifurcaciones condicionales en los planes de generación, el desuso de rutas de proyecto en TestInfo
, mejoras en la nueva interfaz de usuario y gran cantidad de actualizaciones de la plataforma.
Consulte la lista detallada de mejoras a continuación.
La compatibilidad con Kotlin en MPS se diseñó inicialmente para admitir solo código común. Sin embargo, el único caso de uso posible en MPS era la compilación para la JVM, y la distinción entre código común y código de JVM no estaba clara.
En esta versión, introducimos la configuración del conjunto de fuentes de la plataforma para los nodos Kotlin. Esto permite identificar qué plataformas de destino admiten un trozo de código y ocultar las declaraciones de código incompatible.
En un proyecto de Kotlin normal, puede utilizar conjuntos de fuentes para separar el código destinado a diferentes plataformas. En MPS, hemos introducido esto en el nivel raíz, con la opción de especificar el conjunto de plataformas compatibles para cada nodo raíz de Kotlin. Estos conjuntos de fuentes pueden configurarse a nivel de nodo raíz con la ayuda de una acción de intención.
En la práctica, esto significa que:
De forma predeterminada, el código de Kotlin sin una plataforma explícita utiliza la JVM, con el fin de mantener la compatibilidad con las versiones anteriores.
Se han mejorado los stubs para que sean compatibles con los nuevos casos de uso multiplataforma. En el pasado, MPS ofrecía opciones separadas para los stubs de Kotlin y Kotlin/JVM, que cargaban stubs comunes y de JVM, respectivamente.
Estas dos opciones se han unificado ahora en la opción para stubs de Kotlin, que ahora determina automáticamente si un artefacto proporcionado expone código común, código de JVM o código para otras plataformas.
Como las declaraciones entre bibliotecas comunes y específicas de una plataforma son redundantes (dado que ambos artefactos contienen todas las declaraciones necesarias), hemos introducido un nuevo mecanismo para filtrar la duplicación y mantener los stubs ordenados. Cuando las bibliotecas específicas de la plataforma se declaran bajo el mismo módulo, pueden acceder a las declaraciones comunes, por lo que no es necesario declararlas de nuevo.
La configuración de dependencias es la misma que antes:
Por ejemplo, para escribir código común es necesario utilizar una biblioteca común para los stubs, utilizando el conjunto de fuentes comunes, pero también hay que declarar el artefacto de Java en la faceta de Java.
El código de Kotlin en MPS generaba muchos errores de ámbito y typesystem
cuando el complemento Typesystem de Kotlin, basado en CodeRules, no estaba disponible. Para mejorar la legibilidad y la capacidad de pruebas, estas comprobaciones y errores se silencian ahora cuando el complemento typesystem basado en CodeRules no está disponible.
En dichos casos, todos los ámbitos de los lenguajes de Kotlin se sustituyen por un ámbito predeterminado que incluye todos los nodos de conceptos compatibles. Esto elimina cualquier error de falso positivo, dado que todos los nodos válidos se encuentran en el ámbito.
Las pautas para trabajar con el código de Kotlin siguen siendo las mismas que antes:
El panel Logical View se basa ahora en una arquitectura asíncrona, que ayuda a mantener la respuesta de la interfaz de usuario y contribuye al rendimiento general del IDE. La nueva implementación también permite extensiones y modificaciones más sencillas. Para obtener más información, consulte nuestro artículo en la base de conocimientos titulado ProjectPane implementation on top of ProjectViewTree.
Esta nueva implementación ha dado lugar a algunos cambios destacables:
Hemos introducido un nuevo estilo en BaseLanguage
que permite que las celdas constantes sirvan como marcadores de posición si falta algún valor (un nodo secundario o una referencia). Por ejemplo, cuando no hay ningún constructor presente en una clase, se puede mostrar una celda de marcador de posición <no default constructor>
en su lugar. El estilo hace que las celdas constantes muestren el comportamiento que cabría esperar de dichas celdas de marcador de posición. El cursor solo puede situarse en la primera posición y no es posible modificar el valor. Solo se permiten las modificaciones proporcionadas por los menús de transformación adjuntos.
La opción booleana doNotCompile
de los módulos en el lenguaje de compilación se ha sustituido por una enumeración de Java para distinguir mejor los casos en que:
Ambos casos estaban representados por el valor true
.
La nueva enumeración de Java tiene tres valores posibles:
compile in MPS
compile externally
no code
Al migrar a la versión 2024.1, el valor original false
de doNotCompile
se migrará a compile in MPS
, mientras que el valor true
de doNotCompile
se migrará a compile externally
.
Una nueva y pequeña funcionalidad experimental permite añadir una bifurcación a un plan de generación sin modificar el plan original que se está bifurcando. Un plan de generación puede marcarse como bifurcación de otro plan de generación. El plan marcado se tratará como si se hiciera referencia a él explícitamente con la instrucción fork
estándar insertada al principio del plan de generación bifurcado.
Además, al definir una bifurcación, puede utilizar un modificador de cadena que servirá como desencadenante. La bifurcación solo se producirá si el modelo que se está generando pertenece a un módulo que tenga una faceta de destino de generación con un ID de faceta que coincida con el desencadenante de cadena.
Las pruebas de JUnit en MPS ahora pueden generar informes de pruebas no solo en los formatos de Vintage y Jupiter, sino también en el formato de Open Test Reporting. Hay una nueva opción disponible en las opciones de prueba del lenguaje de compilación para controlar si el informe de Open Test se incluye en los informes generados. Si la opción está configurada con el valor true
, se crearán archivos de informe llamados junit-platform-events*-$BUILD_NAME$.xml
en el directorio del proyecto.
Si la opción está configurada con el valor false
, se crean los informes heredados para los motores de Vintage y Jupiter.
Los informes de prueba de MPS ahora respetan la anotación @DisplayName
de JUnit y propagan el nombre a los informes que se muestran en la ventana de herramientas de informes de prueba.
Al ejecutar una prueba de nodo o editor, MPS copiaba todo el modelo de prueba en modelos transitorios y hacía copias adicionales de cada nodo de caso de prueba (empezando por la raíz NodeTestCase
o EditorTestCase
). En el caso de los modelos de prueba de gran tamaño, esto tenía un impacto notorio en el rendimiento. También daba lugar a una configuración bastante extraña con nodos de prueba duplicados. En MPS 2024.1, los modelos con pruebas ya no se copiarán; solo se copiarán los TestNode
secundarios de NodeTestCase
o EditorTestCase
, junto con sus respectivos nodos de entorno (los destinos de sus referencias).
Las declaraciones TestInfo
ya no son necesarias para las pruebas que necesitan un proyecto MPS abierto. Esto se aplica a todos los enfoques de ejecución de las pruebas de JUnit:
<launchtests>
, se puede especificar project path como una opción adicional de la ruta del proyecto de la tarea. Si no se especifica, se utiliza ${basedir}
, que corresponde al directorio principal del proyecto actual.
-Dmps.test.project.path
.Las declaraciones TestInfo
existentes siguen siendo compatibles y pueden conservarse.
En nuestro esfuerzo por separar la carga de clases del acceso al modelo y la depreciación de ReloadableSModule
, hemos cambiado la forma en la cual funciona la carga de clases para los módulos. Aunque hemos trabajado arduamente para evitar cambios perceptibles a los usuarios finales, las actualizaciones pueden dar lugar a problemas de carga de clases que antes no existían.
Como parte de esta renovación, MPS ahora se ciñe a las dependencias declaradas en module.xml
para los módulos implementados sin intentar calcularlas al inicio basándose en información dispersa en los archivos de módulos. Durante la fase de diseño, las dependencias se derivan de la información recopilada durante la fase de transformación del modelo, y tampoco se vuelven a calcular aquí. La antigua lógica que analizaba las dependencias de los módulos a partir de los archivos .mpl
o .msd
sigue en su lugar como alternativa en caso de que falle el nuevo método.
Estos cambios forman parte de un esfuerzo continuo por mejorar las facetas de módulos de Java y las facetas de módulos en general.
Cuando se recurre al cálculo del ámbito predeterminado, los nodos de destino potenciales comentados ahora se excluyen automáticamente del ámbito.
BaseLanguage
.MPS 2024.1 presenta un terminal renovado con mejoras tanto visuales como funcionales para agilizar las tareas de línea de comandos. Esta actualización aporta un aspecto renovado a esta conocida herramienta, con comandos separados en bloques diferentes, junto con un conjunto de funcionalidades ampliado, como navegación fluida entre bloques, finalización de comandos y un fácil acceso al historial de comandos. Obtenga más información en este artículo del blog.
A partir de esta versión, MPS ya no admite proyectos que utilicen versiones de Gradle anteriores a la 4.5, y el IDE no realizará la sincronización de Gradle para proyectos con versiones de Gradle no compatibles.
MPS 2024.1 agiliza el flujo de trabajo de revisión de código ofreciendo una vista centrada en los cambios relacionados con las ramas. Ahora es posible ver los cambios de GitHub, GitLab y Space en una rama determinada en una pestaña Log por separado dentro de la ventana de herramientas Git. Para ello, haga clic en el nombre de la rama en la ventana de herramientas Pull Requests y seleccione Show in Git Log en el menú.
Después de hacer push de sus cambios con éxito en el sistema de control de versiones, el IDE le avisará ahora con una única notificación informándole del push exitoso y sugiriéndole una acción para crear una solicitud de fusión/incorporación de cambios.
Hemos introducido indicadores visuales para informarle sobre las actualizaciones pendientes dentro de su flujo de trabajo de revisión de código. Cuando haya cambios que requieran su atención, aparecerá un punto en el icono de la ventana de herramientas. Las solicitudes de incorporación de cambios no vistas se marcarán con un punto azul, lo que le garantizará que no se pierda las actualizaciones en su proceso de revisión del código.
En la ventana de herramientas Git, el botón Show all branches se ha sustituido por un filtro de ramas, que le permite revisar los cambios realizados en un archivo dentro de una rama determinada. También hemos ajustado la orientación de la barra de herramientas, colocándola en horizontal para mejorar su uso.
En el visor diff, ahora puede especificar las carpetas y archivos que deben ignorarse durante el proceso de comparación para centrarse únicamente en los cambios relevantes. Solo tiene que hacer clic con el botón derecho en cualquier archivo o carpeta que no desee que aparezca en los resultados de la comparación y seleccionar Exclude from results en el menú contextual.
Para cada versión principal, preparamos instrucciones sobre cómo migrar desde versiones anteriores de MPS para asegurarnos de que todo se realiza sin problemas. Puede consultarlas con mayor detalle en la guía de migración actualizada.