Novedades de MPS 2023.2

MPS 2023.2 aporta mejoras a la generación de lambdas de BaseLanguage, compatibilidad con JUnit 5, anulación de reglas de inferencia del sistema de tipos y mucho más.

Compatibilidad con JUnit 5

JUnit 5

Las pruebas en MPS se generan ahora como pruebas JUnit 5. Se sigue proporcionando una compatibilidad limitada con JUnit 4.

  • Cualquier clase Java debidamente anotada puede ejecutarse como prueba.
  • Ambas opciones para ejecutar pruebas MPS ―en proceso y generadas― están disponibles.
  • Las raíces de prueba existentes se generan con anotaciones JUP Jupiter API:
    • BTestCase
    • NodeTestCase
    • EditorTestCase
    • MigrationTestCase
    • PatternTest
    • GeneratorTest

Tarea Ant para lanzar pruebas de módulos con JUnit 5

Una nueva tarea launchtests Ant está disponible con compatibilidad con los siguientes elementos:

  • library
  • macro
  • complemento
  • testmodules

Admite la ejecución de todos los artefactos de prueba, a excepción de JUnit 3, y sirve como nuevo objetivo para la parte de compilación de la configuración de prueba.

Ejecución de pruebas desde MPS

  • Cualquier clase Java debidamente anotada puede ejecutarse como prueba.
  • Ahora solo existe un soporte limitado para JUnit 4.
  • Son posibles tanto las ejecuciones en proceso como las generadas.

API de la plataforma de pruebas

Esta API le permite ampliar los tipos de pruebas disponibles en MPS, así como implementar oyentes para las sesiones de prueba.

Las clases en jetbrains.mps.baseLanguage.unitTest.platform forman la API de la plataforma de pruebas MPS:

TestPlatform Define la API para la plataforma de pruebas MPS.
TestDescriptor Representa una única prueba en la plataforma de pruebas MPS.
TestSource Representa el origen de la prueba, como un SNode.
TestSession Representa una sesión de prueba.
TestDiscoveryParticipant Permite unirse al proceso de descubrimiento de pruebas.
TestSessionListener Permite recibir notificaciones de la sesión de prueba.

Compatibilidad experimental con motores de prueba personalizados

JUnit 5 incorpora, entre otras cosas, compatibilidad con la implementación de pruebas que se ejecutan con un motor personalizado. Un ejemplo popular de este tipo de motor es jqwik , un marco de pruebas basado en propiedades.

Compatibilidad mejorada con la anulación de reglas del sistema de tipos
Patrocinado por clientes

Anulación del sistema de tipos

Recientemente hemos añadido una funcionalidad que permite que las reglas del sistema de tipos anulen las reglas definidas en los superconceptos. Esto puede hacerse en los casos en que los subconceptos se definan en un lenguaje que amplíe el lenguaje que contiene el superconcepto. La funcionalidad es compatible con las reglas de inferencia.

Mejoras en BaseLanguage

En una actualización anterior, MPS recibió compatibilidad mejorada con las referencias a métodos y la conversión de cierres en lambdas Java. Hemos ampliado esta compatibilidad con numerosas funcionalidades menores y correcciones de errores.

Lambdas

Generación de cierres como lambdas

Los cierres utilizados en las operaciones de recogida se generan ahora como lambdas Java, lo que inicialmente solo estaba disponible para las llamadas a funciones regulares que utilizaban interfaces Java. Para mantener la compatibilidad con versiones anteriores, hay casos en los que un cierre se seguirá generando como una clase anónima:

  • Cuando el nombre de una variable choca con el de una variable externa, ahora se muestra una advertencia que sugiere que se le cambie el nombre.
  • Cuando la versión de Java de destino es la versión 8 o inferior.
  • Cuando se utilizan tipos brutos, estos no funcionan bien con las lambdas de Java.

Generalmente, esto se traduce en una mejora de la calidad del código generado, ya que las lambdas, además de ser más legibles, tienen menos probabilidades de generarse incorrectamente. Por otro lado, MPS permite funcionalidades con tipos brutos que Java no permitiría, ya que detectar tales instancias sigue siendo un reto. Como resultado, en lugares donde se emplean tipos brutos, la generación puede fallar.

Parámetros de cierre

Parámetros de cierre

Los parámetros de cierre tenían antes varias formas posibles: ~param, <type> param, param y var param. Añadir parámetros omitiendo el tipo era engorroso. En esta versión, hemos dejado obsoleta la forma ~param en favor del parámetro simple sin tipo, que ahora se inserta de forma predeterminada. Además, cuando se inserta un cierre en una llamada a una función, se insertarán parámetros predeterminados del tipo de función esperado. Por último, si su tipo se omite en el código fuente, los parámetros generados omitirán ahora el tipo, mejorando así aún más la calidad de la compilación.

Flujos

Interoperabilidad de los flujos

Aunque las secuencias se utilizan mucho en MPS, hay ocasiones en las que también deben utilizarse los flujos de Java. Esta actualización ofrece una inferencia mejorada para mitigar los problemas del sistema de tipos relacionados con los métodos complejos que puede utilizar la API Stream. Hemos añadido dos operaciones para unir flujos y secuencias:

  • <stream>.asSequence convertirá una secuencia en un flujo.
  • <sequence>.toStream(parallel=...) hará lo contrario.

Además de permitirle elegir qué API utilizar, esto le permite combinar las ventajas de las secuencias (repetibilidad) con las de los flujos (varios colectores, más operadores).

Mejoras en las colecciones

Anteriormente introdujimos el operador diamante (new ArrayList<>()) para los constructores BaseLanguage, pero los creadores de colecciones quedaron excluidos de esta mejora. En esta actualización, ahora puede omitir los parámetros de tipo de las nuevas colecciones, lo que simplifica el proceso de escritura de código:

  • Tipo inferido a partir de los valores iniciales: var myList = new arraylist<> {myInitialValue}
  • Tipo inferido a partir de la declaración de variables: map<int, string> myMap = new hashmap<>

Además, hemos mejorado la compatibilidad con la varianza en las colecciones. Por ejemplo, ya no es posible asignar una notación ? extends Number. Sin embargo, el sistema de tipos ya no se opondrá al uso de tales tipos acotados cuando sean válidos. El tipo sequence<> seguirá siendo covariante de forma predeterminada, ya que no tendrá consecuencias no seguras al no poder insertarlo en una secuencia de elementos que no sean de su tipo. Esto puede suponer nuevos problemas de comprobación de tipos en los que antes no se detectaba el código no seguro. Estos pueden resolverse con tipos acotados list<? extends node<>> o tipos de secuencia sequence<node<>>.

Ajustes de configuración

Disable Make

Disable Make On Startup

Hemos añadido una nueva opción, Disable Make On Startup, que está disponible en Settings | Project Settings | Make. Cuando se selecciona esta opción, MPS no generará todos los módulos del proyecto al arrancar. Esto puede resultarle útil si desea aumentar la velocidad de arranque en situaciones en las que el proceso inicial de creación tarda demasiado o es probable que falle, ya que es necesaria una configuración manual antes de que el proyecto pueda realizarse con éxito.

Editar biblioteca

Edite las rutas de la biblioteca y de origen en las propiedades Java del módulo

Se ha añadido una nueva opción Edit a la pestaña Java del cuadro de diálogo de propiedades del módulo. Es difícil de ver, pero muy práctica. Cuando necesite modificar el conjunto de bibliotecas jar de su módulo, solo tiene que utilizar esta nueva opción, y no tendrá que realizar una tediosa secuencia de una eliminación de entrada seguida de una incorporación.

Otros

Comentario TODO

Capacidad TODO para comentarios personalizados

La ampliación del concepto IGenericComment permite que los conceptos que representan comentarios en lenguajes personalizados participen en la funcionalidad TODO de MPS. Los comentarios que representan los TODO serán recogidos por el TODO Finder, enumerados en el TODO Viewer, y comprobados durante el proceso de confirmación.

Aspectos lingüísticos: gestión de acciones Create New

Para crear instancias en un modelo de aspecto, MPS ha seguido hasta ahora una lógica general que implicaba conceptos no abstractos enraizables, ordenados por nombre o bandera. Ahora se puede especificar una configuración opcional junto con una declaración de aspecto, lo que permite a los diseñadores lingüísticos controlar qué conceptos se presentan al usuario, así como su agrupación y ordenación.

La comprobación «Please re-export dependency...» está obsoleta

Esta confusa advertencia solía mostrarse cuando un ClassConcept extendía o exponía de otro modo su uso de un ClassConcept de otro módulo. Antes de la versión 2023.2, MPS se basaba en las dependencias de módulos especificadas en los descriptores de módulos para construir el gráfico de dependencias. Ahora que MPS construye la información sobre las dependencias basándose en los generadores y lenguajes reales que intervienen en la transformación de un modelo, ya no es necesario especificar estas dependencias explícitamente, por lo que ya no es necesaria la comprobación.

Funcionalidades patrocinadas por los clientes, recuperadas de versiones anteriores

Compartir es un gesto útil en cualquier comunidad. Las siguientes funcionalides se han implementado a partir de las peticiones de usuarios comerciales de MPS que patrocinaron su desarrollo. Ahora, usted también puede sacar el máximo partido de estas prácticas novedades.

Comprobador de modelos en paralelo

El comprobador de modelos ahora puede utilizar eficazmente hardware paralelo, acelerando así el proceso. Dependiendo de la configuración en Settings | Tools | Model Checker, puede generar varios suprocesos al iniciar este proceso.

Mejora del rendimiento de la persistencia de File-per-root

El método FilePerRootDataSource.getStreamByName() se ha optimizado para mejorar el rendimiento de la carga de datos de modelos. Si utiliza la persistencia de File-per-root para almacenar modelos bastante voluminosos, este cambio será notable.

Cuadro de diálogo de búsqueda

Compatibilidad mejorada con Find text in project

Se ha mejorado la acción de búsqueda de texto en un proyecto Find text in project existente, que ahora también busca referencias de nodos con nombre, con lo que se obtienen más resultados relevantes. Se ha añadido un panel de vista previa que le permite ver los resultados directamente en el cuadro de diálogo de búsqueda. Los textos con contenido HTML se muestran ahora como texto sin formato en los resultados y no como HTML como en versiones anteriores.

Omitir la migración de dependencias en las tareas Ant

Al migrar un proyecto utilizando tareas Ant proporcionadas por MPS, es posible que las dependencias no se migren correctamente. Hemos añadido un indicador para continuar la migración de un proyecto incluso en tales casos. Detener el proceso de migración en cuanto se descubre una dependencia no migrada sigue siendo el comportamiento predeterminado. Para utilizar este indicador, añada haltOnDependencyError="false" a su tarea migrate de Ant.

Actualizaciones de la plataforma

Zoom completo en el IDE

En la v2023.2 es posible usar el zoom en el IDE completo, para aumentar o disminuir el tamaño de todos los elementos de la interfaz de usuario a la vez. En el menú principal, seleccione View | Appearance y ajuste la escala del IDE. Además, puede asignar accesos directos personalizados para llamar a estas acciones en Settings/Preferences | Keymap | Main Menu | View | Appearance.

Nuevo ajuste Remember size for each tool window

En MPS 2023.2, hemos introducido una nueva opción de diseño que le permite unificar la anchura de las ventanas de herramientas laterales o conservar la posibilidad de ajustar libremente sus tamaños a medida que personaliza su diseño. La nueva casilla de verificación Remember size for each tool window está disponible en Settings/Preferences | Appearance & Behavior | Appearance | Tool Windows. Conozca cómo funciona esta configuración para la nueva y la antigua interfaz de usuario en este artículo del blog.

Resaltado de sintaxis en las descripciones de inspecciones

Resaltado de sintaxis en las descripciones de inspecciones

En Settings / Preferences | Editor | Inspections, las muestras de código incluyen ahora resaltado de sintaxis, lo que facilita la comprensión de lo que desencadena una inspección y la decisión de si desea que esté activa o inactiva.

Fill Paragraph para archivos Markdown

Fill Paragraph para archivos Markdown

La acción del editor Fill Paragraph es ahora compatible con los archivos Markdown, lo que le permite dividir textos largos en varias líneas de longitud uniforme. Para ello, coloque el signo de intercalación en el párrafo que desea editar y busque el comando Fill Paragraph mediante Find Action (Ctrl+Mayús+A).

Mejora de la ventana emergente Branches

Mejora de la ventana emergente Branches

Hemos mejorado la usabilidad de la ventana emergente Branches. Por ejemplo, navegar entre ramas ahora es más fácil, ya que están agrupadas y almacenadas en listas desplegables.

Autocompletado en la ventana emergente Create New Branch

Autocompletado en la ventana emergente Create New Branch

MPS 2023.2 incorpora autocompletado en la ventana emergente Create New Branch. Una vez que empiece a escribir un nombre para su nueva rama, el IDE le sugerirá prefijos relevantes basándose en los nombres de las ramas locales existentes.

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 va sobre ruedas. Léalas atentamente.