Novedades de MPS 2022.2

MPS 2022.2 incorpora anotaciones en Inspector, mejor compatibilidad con Kotlin, API de SModel mejorada, y mucho más.

Anotaciones en Inspector

Anotaciones en Inspector

Las anotaciones son ahora accesibles desde la ventana Inspector, y el proceso de anotación se iniciará para toda la raíz. Se puede acceder a esta acción haciendo clic con el botón derecho del ratón en el extremo izquierdo de la ventana Inspector. La anotación se abrirá tanto en el editor de Inspector como en el editor principal.

Más información

Compatibilidad mejorada con MPS Kotlin

Compatibilidad mejorada con MPS Kotlin

Se han corregido muchos problemas de edición para ofrecer una mejor experiencia de escritura, como por ejemplo:

  • Se han refactorizado los ámbitos para admitir más casos de uso (p. ej., tipos de receptores personalizados) y mejorar el filtrado (menos duplicaciones, acceso a funciones ocultas).
  • Compatibilidad con operadores de deconstrucción por sistema de tipos.
  • Literales numéricos: inserción más fácil de flotantes y largos, y transición entre números sin signo y con signo.
  • Literales de cadena: Todas las cadenas pueden pasar de una a varias líneas pulsando Intro en un literal de cadena; se han solucionado algunos problemas de inserción.
  • Los stubs de Kotlin admiten la carga de anotaciones y tipos de función con receptor (p. ej., T.() -> R que se cargaba incorrectamente como (T) -> R).
  • Literales lambda:
    • Compatibilidad con el parámetro implícito it.
    • Las lambdas cuyo tipo tiene un receptor (p. ej., Receiver.() -> Unit) utilizarán correctamente ese tipo de receptor como un this implícito dentro del cuerpo de la lambda.

Más información

Lenguaje SModel para MPS Kotlin

Lenguaje SModel para MPS Kotlin

La compatibilidad con SModel está ahora disponible en MPS Kotlin con el nuevo lenguaje jetbrains.mps.kotlin.smodel. Junto con la compatibilidad con compilación mejorada, permite el uso de código Kotlin en módulos del lenguaje (como clases de ayudantes, por ejemplo).

Además de los tipos normales (nodos, conceptos, enlaces y referencias), aprovecha la mayor flexibilidad de MPS Kotlin para aportar parámetros de tipo Concept. Las funciones, variables y clases ahora pueden declarar y utilizar dichos parámetros y reutilizarlos en sus tipos internos, lo que permite una escritura más fácil y aprovecha los castings inteligentes de Kotlin.

Actualizaciones de la compilación de Kotlin

Actualizaciones de la compilación de Kotlin

Se ha mejorado la compatibilidad con la compilación de Kotlin con una mejor persistencia. Como resultado, las clases Kotlin ya no se borran cuando se reinicia MPS.

Se ha añadido una nueva opción en los scripts de compilación para marcar un módulo para que se compile con el compilador de Kotlin. La inserción de este marcador es manual; actualmente no hay ninguna comprobación automática para establecerla como verdadera. El marcador se debe añadir cuando un módulo que contiene archivos Kotlin va a ser compilado a JVM.

Estilos de texto disponibles en los comentarios de BaseLanguage

Estilos de texto disponibles en los comentarios de BaseLanguage

Al añadir comentarios a BaseLanguage, ahora es posible personalizarlos aún más con el estilo del texto. Los comentarios admiten los estilos de negrita (Ctrl + B), no cursiva (Ctrl + I), subrayado (Ctrl + U), y estilos de negrita y no cursiva (Ctrl + B -> Ctrl + I).

Transformación post fix

Transformación post fix

En BaseLanguage, ahora es posible efectuar transformaciones post-fix que le permiten transformar el código añadiendo algún texto a la expresión. Esto ahorra tiempo a los desarrolladores, ya que no tienen que mover el signo de intercalación al frente de la expresión ni seleccionar la expresión para aplicar una transformación.

Descubrimiento de modelos diferidos con SModel

MPS solía descubrir los modelos en el momento en que se registraban en un repositorio. Descubrir un modelo en un módulo de proyecto normal significaba recorrer el sistema de archivos para encontrar los archivos y sus tipos, y leer al menos la información de encabezado del modelo.

Ahora, los módulos no participan en el descubrimiento de modelos a menos que se soliciten. Hay una nueva API de SModule (SModule.forEachRegisteredModel()) para acceder solo a los modelos ya conocidos por un módulo, sin activar el descubrimiento o la carga de modelos. Si utiliza clientes de la API SModel, especialmente las subclases SRepositoryContentAdapter, es posible que desee adoptar la nueva API para sacar partido de la mejora.

Mejora de los enlaces de asociación, también conocidos como SReference.

MPS cuenta ahora con una API coherente para crear referencias, así como una representación interna de estas actualizada. Estos cambios tienen como objetivo mejorar el sistema de referencia/persistencia de los modelos, que está previsto para posteriores versiones. No obstante, el cambio ya permite reducir el almacenamiento en memoria de cualquier modelo en aproximadamente un 5 %.

Stubs de Java

MPS ahora respeta las entradas jar versionadas y expondrá las clases Java con una versión que coincida con el tiempo de ejecución real de Java.

Migración de Log4j a Java Util Logging (JUL)

Aunque MPS y la plataforma IntelliJ utilizaban una versión reducida de la biblioteca Log4j sin problemas de seguridad conocidos, ambos han cambiado el registro al paquete estándar java.util.logging. Se implementa una capa de compatibilidad (basada en SLF4J) para redirigir las peticiones de la API Log4j a una implementación de Java Util Logging (JUL).

La acción Debug Log Settings permite configurar los niveles de DEBUG y TRACE para las categorías. Además, ahora también hay un archivo de configuración bin/log.properties que utiliza el conocido formato de configuración JUL. A diferencia del log.xml de versiones anteriores, este archivo de configuración no se lee de forma predeterminada, pero los usuarios pueden solicitar el acceso a esta (o cualquier otra configuración externa) utilizando la propiedad del sistema idea.log.config.properties.file.

Make desde la línea de comando

Los scripts de build de Ant que MPS genera a partir de las declaraciones lang.build utilizan tareas por separado para generar y compilar las fuentes (<generate> propia de MPS y <javac> regular de Ant). Ahora hay una nueva tarea <mps.make> que corresponde al proceso Make lanzado desde el IDE. Es responsable de la transición completa de un modelo a código compilado. La tarea combina tanto la generación de código como la compilación, lo que ahorra tiempo ya que MPS necesita clases compiladas de todos modos para sus propósitos de carga de clases de módulo (ya que las tareas de <javac> a menudo duplican los esfuerzos de compilación ya completados durante <generate>). También hace que las compilaciones de línea de comandos de Ant y el proceso de Make lanzado desde el IDE sean mucho más similares entre sí, aumentando así la fiabilidad de su proceso de compilación.

Más información

Pruebas del generador

Se han mejorado las pruebas del generador con opciones coincidentes que permiten ignorar el orden de los nodos. También hay una nueva acción para reordenar las raíces de los modelos, que ayuda a llevar los modelos de prueba de referencia al estado deseado.

Más información

Configuración del tiempo de espera para TextGen

MPS limita el tiempo empleado en la parte de transformación de Modelo a Texto (M2T) para solucionar posibles errores en los aspectos de TextGen. El límite previamente estaba incluido en el código. Sin embargo, últimamente algunos modelos grandes han llegado al límite, provocando una excepción de tiempo de espera no deseada. Así que ahora, hay una configuración del IDE que puede definir para controlar el tiempo de espera. Está previsto que en futuras versiones se puedan utilizar los builds de línea de comando.

Mejora de la gestión de dependencias del BaseLanguage de Java para el proceso Make

MPS solía registrar las dependencias entre las clases generadas de BaseLanguage en el archivo «dependencies». El compilador de Java se basa en ellas para averiguar si las clases dependientes de la compilación necesitan una actualización. Pero cuando las dependencias se cambiaron en la versión 2021.2 para contener las dependencias de nivel superior, ya no era necesario recoger y almacenar los nombres de las clases por raíz. Esto ayudó a MPS a mejorar el tiempo de TextGen tanto para el código de BaseLanguage (puesto que ya no necesita recoger las dependencias individuales) como para el proceso de compilación de Java (ya que no necesita analizar las dependencias individuales de los archivos, atribuir las dependencias de los archivos a módulos y a ruta de clase, y propagar el estado «dirty»).

Nuevo archivo para mantener las dependencias de los módulos

Un nuevo archivo deps.cp almacena ahora las dependencias por módulo para permitir que MPS deduzca el gráfico de compilación del módulo. El archivo mantiene el estado de la transformación, lo que lo deja «sellado» y a medida (no enumera las dependencias que no se utilizaron en la transformación); esto contrasta con el gráfico de dependencias recogido en tiempo de ejecución, que se basa en las dependencias reales de los módulos.

Cambios en la IU

MPS ya no crea soluciones de tiempo de ejecución/entorno de pruebas anidadas bajo un módulo de lenguaje. De forma predeterminada, estos módulos serían hermanos del módulo de lenguaje. Renombrar el módulo de lenguaje «main» seguiría reconociendo estos módulos como «related» y los renombraría junto con el módulo «main».

Más información

Claves compuestas para la asignación de etiquetas

Para mejorar la funcionalidad de la clave de etiqueta compuesta introducida en versiones anteriores, MPS admite el mantenimiento de claves compuestas en modelos de puntos de control.

Funcionalidades de la plataforma

Barra de progreso Cloning repository

Barra de progreso Cloning repository

La barra de progreso Cloning repository aparece ahora en la pantalla de bienvenida y se muestra directamente en la lista de proyectos, lo que la hace más clara y fácil de usar.

Nueva acción Table of Contents

Nueva acción Table of Contents

Ahora es posible generar rápidamente tablas de contenido en archivos Markdown basadas en los encabezados del documento.

Firma GPG

Firma GPG

Ahora es posible realizar una firma GPG en una confirmación. La firma aparecerá en la sección Commit Details de la ventana de herramientas de Git.

Ejecutar comandos desde archivos Markdown

Ejecutar comandos desde archivos Markdown

Al trabajar con archivos Markdown que contengan instrucciones con comandos para ejecutar, puede ejecutar dichos comandos directamente desde el archivo utilizando los iconos de ejecución en el medianil.

Guía de migración

En cada uno de nuestros grandes lanzamientos, elaboramos instrucciones para migrar desde versiones más antiguas de MPS y asegurarse de que todo funciona correctamente. Léalas atentamente.