Novedades de MPS 2024.1

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.

Compatibilidad de la plataforma mejorada para Kotlin

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.

Conjuntos de fuentes

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:

  • El código bajo un determinado conjunto de fuentes solo puede acceder a declaraciones con plataformas compatibles. Por ejemplo, el código específico de la JVM solo puede acceder al código específico de la JVM y al código común dirigido a la JVM.
  • Las fuentes generadas están estructuradas en directorios específicos del conjunto de fuentes. Si no se especifica un directorio, se utiliza el conjunto de fuentes predeterminado, que corresponde al predeterminado del módulo.
  • Ahora se admiten declaraciones esperadas y reales.

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.

Carga y compilación para stubs

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:

  • Tanto las bibliotecas comunes como las específicas de la plataforma pueden utilizarse como stubs.
  • Las bibliotecas de JVM son necesarias para compilar código común en la JVM y deben declararse en la faceta de Java.

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.

Mejora de la legibilidad de Kotlin sin el complemento typesystem de CodeRules

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:

  • Escribir y comprobar código de Kotlin debe hacerse con CodeRules activado y el complemento Typesystem de Kotlin instalado.
  • La lectura de Kotlin y su generación pueden realizarse con seguridad sin ellos.

Reimplementación del panel Logical View

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:

  • Los indicadores de error y advertencia ya no están disponibles.
  • Tanto los errores como las advertencias encontrados en la jerarquía aparecen subrayados en rojo.
  • La opción Show Descriptor Models afecta a todos los modelos de descriptores.
  • Algunas operaciones de arrastrar y soltar funcionan de forma diferente.
  • Los ajustes del panel Logical View se han reorganizado parcialmente.

Celdas de marcador de posición

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.

Cambios en el lenguaje de compilación

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:

  • El módulo no contiene código en absoluto.
  • El módulo contiene código, pero el código se compila con herramientas que no sean MPS.

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.

Bifurcaciones condicionales en planes de generación

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.

Informes XML de JUnit5 en MPS

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.

Anotación @DisplayName de JUnit5 propagada a los informes de pruebas

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.

Mejoras en el tiempo de ejecución de las pruebas

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).

La ruta del proyecto en TestInfo ya no es necesaria

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:

  • Si la prueba se ejecuta desde el IDE, ya sea en el proceso o fuera de este, se utilizará el proyecto abierto en ese momento.
  • Si la prueba se ejecuta con la tarea <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.
  • Para casos especiales en los que no se puede utilizar ninguno de los enfoques anteriores, puede especificar la ubicación del proyecto a través de la propiedad del sistema -Dmps.test.project.path.

Las declaraciones TestInfo existentes siguen siendo compatibles y pueden conservarse.

Renovación completa de la carga de clases de módulos

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.

Excluir nodos comentados del ámbito (también disponible en 2022.3.2)

Cuando se recurre al cálculo del ámbito predeterminado, los nodos de destino potenciales comentados ahora se excluyen automáticamente del ámbito.

Otros

  • Se ha introducido un literal largo hexadecimal en BaseLanguage.
  • Cuando un proyecto requiere migración y hay incompatibilidades de versión de módulo/modelo (por ejemplo, si el módulo menciona una versión de lenguaje diferente de la versión mencionada en un modelo), se muestra una ventana emergente de notificación con una acción que muestra todos los módulos con incompatibilidades. Esto resulta útil a la hora de fusionar código migrado, dado que puede asegurarse de que el estado fusionado refleja las versiones correctas del lenguaje y del módulo.
  • Los módulos bajo un devkit en el panel Logical View se muestran como nodos de referencia a módulos. Esto es similar a cómo se presentan los módulos de ejecución bajo un módulo de lenguaje.

Gran cantidad de correcciones de errores

  • Como es habitual, esta compilación corrige una serie de errores. Puede consultar una lista completa de todos los problemas que hemos corregido aquí.

Actualizaciones de la plataforma

Nuevo terminal en la nueva interfaz de usuario

Beta

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.

Opción para reducir todo el IDE

Ahora puede reducir la escala del IDE al 90 %, 80 % o 70 %, lo que le da flexibilidad tanto para aumentar como para reducir el tamaño de los elementos del IDE.

Actualización de compatibilidad con versiones de Gradle

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.

Numerosas funcionalidades de VCS

Opción de mostrar los cambios de la rama de revisión en una pestaña Log

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ú.

Compatibilidad con reacciones sobre comentarios de revisión de código

MPS 2024.1 permite publicar reacciones a los comentarios de revisión para solicitudes de incorporación de cambios de GitHub y solicitudes de fusión de GitLab, con un conjunto de emojis ya disponibles para elegir.

Crear solicitudes de fusión/incorporación de cambios a partir de notificaciones push

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.

Indicadores visuales de actualizaciones pendientes de GitHub

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.

Impedir que se confirmen archivos de gran tamaño a los repositorios

Para ayudarle a evitar rechazos en el control de versiones debidos a archivos de gran tamaño, el IDE incluye ahora una comprobación previa a la confirmación que le impide confirmar dichos archivos y le notifica la restricción.

Filtro de rama para la pestaña History en la ventana de herramientas Git

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.

Búsqueda mejorada en la ventana emergente Branches

En la ventana emergente Branches, ahora puede filtrar los resultados de la búsqueda por acciones y repositorios para una navegación más rápida y precisa dentro de su sistema de control de versiones.

Opción de fusión Allow unrelated histories

El cuadro de diálogo Merge into dispone ahora de una opción Allow unrelated histories en el menú desplegable. Cuando se selecciona, permite fusionar dos ramas aunque no tengan un historial común.

Opción de excluir carpetas y archivos de la comparación

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.

Guía de migración

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.