MPS 2018.3: planes de generación, mejoras en el lenguaje de ensamblaje y empaquetado y en el lenguaje del editor, interfaz actualizada

Hola Habr! Recientemente lanzamos MPS 2018.3 . En esta versión hay muchas características nuevas con las cuales trabajar en proyectos será aún más efectivo. Mejoramos los planes de generación y el lenguaje de descripción del editor, agregamos nuevas construcciones al lenguaje de ensamblaje y empaquetado, actualizamos los elementos de interfaz para una navegación conveniente en la jerarquía de herencia e hicimos muchos otros cambios para un trabajo productivo.


imagen

Idioma base


Iconos para navegar por conceptos sobredefinidos / implementados


Han aparecido iconos de conceptos redefinidos / implementados en los campos de conceptos y conceptos de interfaz, que simplifican la navegación a conceptos secundarios.


imagen

Paquetes personalizados para clases de BaseLanguage


En versiones anteriores de MPS, el paquete Java de las clases generadas estaba determinado únicamente por el nombre del modelo en el que se ubicaban los elementos fuente. La nueva versión para BaseLanguage Classifiers agrega la propiedad packageName, que le permite redefinir el nombre del paquete Java final. La propiedad packageName solo tiene sentido para los clasificadores BL de nivel superior, como es el caso de los clasificadores Java.


imagen

Nuevas características de generador para extensiones de lenguaje base


Para BaseLanguage, a menudo se crean extensiones. Sin embargo, para algunas extensiones puede ser difícil escribir un generador adecuado. Hemos agregado varios conceptos nuevos a BaseLanguage para simplificar el proceso de escribir generadores para extensiones.


Generando Expresiones de Lvalue


Una expresión lvalue es una variable en la que puede leer o escribir un valor. En algunos casos, generar una expresión de Lvalue es difícil porque puede depender del contexto en el que se usa. Un nuevo concepto auxiliar, generic lvalue-expression simplificará el generador y lo hará independiente del contexto.


imagen

Convertir expresiones de Lvalue en enlaces


Algunas expresiones incluyen otras expresiones de Lvalue para operaciones más complejas con variables (por ejemplo, más asignación o incremento y obtención de expresiones). Introducir construcciones con tal semántica fue difícil porque no fue fácil para ellos escribir el generador correcto.


En la nueva versión, puede ajustar cualquier expresión de @byRef con @byRef . El generador de BaseLanguage convierte la expresión ajustada en una expresión de tipo Reference<T> , que proporciona los métodos get y set para la variable ajustada.


imagen

Lea más sobre nuevos conceptos en este artículo .


Soporte para métodos predeterminados


En la nueva versión de MPS, puede crear métodos predeterminados en las interfaces BaseLanguage. La palabra clave predeterminada se implementa mediante el concepto DefaultModifier, una extensión del concepto Modificador. DefaultModifier está contenido en el idioma jetbrains.mps.baseLanguage.jdk8, por lo que para crear un método predeterminado en la interfaz, importe el idioma jdk8.


imagen

Generador


Lenguaje generador (lenguaje de transformación modelo)


Eliminamos la macro $ INCLUDE $, reemplazando su uso con $ CALL $. La migración adecuada ayudará a actualizar sus proyectos. La macro $ INCLUDE $ no admite plantillas con argumentos, y la presencia de dos macros de funcionalidad similar complica el lenguaje.


Macro $ WEAVE $ y las reglas de tejido ahora han aprendido a llamar patrones con argumentos. Además, arreglamos un defecto desagradable, aunque no muy notable, que ocurre al usar plantillas compiladas e interpretadas. La "introducción" (tejido) de una plantilla externa del código interpretado siempre condujo a la interpretación, pero ahora la plantilla compilada funcionará (por supuesto, siempre que el uso de plantillas compiladas esté incluido en las propiedades del generador). Del mismo modo, el "tejido" de la plantilla externa interpretada del compilado funciona.


QueriesGenerated, un conjunto de consultas de modelos compilados para un modelo con plantillas, siempre se basó en una convención de nomenclatura y un motor de reflexión Java para ejecutar el código. Podrías ver esto en los rastros de la pila, cuando algo salió mal en la consulta del modelo desde el generador. Finalmente nos deshicimos de este mecanismo.


Elementos UI / UX


Soporte para MacBook Touchbar


Los propietarios de macbooks con una barra táctil ahora pueden usarla para trabajar en MPS: por ejemplo, invocar acciones para iniciar, construir y depurar una aplicación desde la barra táctil, así como seleccionar rápidamente una configuración de ejecución / depuración o crear una nueva. Los controles de la barra táctil se pueden configurar en Configuración / Preferencias | Apariencia y Comportamiento | Menús y barras de herramientas.


Y, por supuesto, las capacidades de la barra táctil se pueden ampliar. Simplemente agregue la acción deseada al grupo de InterfaceGroup correspondiente.


imagen

Tema de alto contraste


Al igual que IntelliJ Platform, MPS tiene un nuevo tema de alto contraste. Se puede habilitar en Configuración / Preferencias -> Apariencia y comportamiento.


imagen

Herramientas para encontrar código obsoleto


En la migración | Se toman acciones de código obsoleto para encontrar código obsoleto y trabajar con sus usos. Encuentre los usos de los resultados de búsqueda de grupos obsoletos según la versión de eliminación prevista, lo que ayuda a determinar la gravedad y seleccionar cuáles de los usos deben eliminarse primero.


imagen

Iconos para navegar por métodos de comportamiento anulados / implementados


En los campos de las clases de comportamiento, agregamos íconos para navegar por métodos de comportamiento anulados / implementados. La siguiente es una lista de métodos getPresentation () que anulan o implementan el método seleccionado. De la lista, puede acceder fácilmente a cualquiera de estos métodos.


imagen

Mejoras emergentes para navegar anulaciones


Las ventanas emergentes de conceptos / clases / métodos anulados / implementados se han vuelto asíncronos. Esto significa que MPS agregará resultados de búsqueda a una ventana emergente en segundo plano. Además, ahora puede filtrar los resultados de búsqueda por nombre de objeto.


imagen

Buscador de cambios


En esta versión, tenemos buscadores actualizados y optimizados. Para la ejecución asíncrona del buscador, use la expresión especial OnEachNodeFoundByExpression, que es una simple llamada al buscador con una función de devolución de llamada para cada nodo detectado.


La configuración de Buscar usos para los conceptos también ha cambiado. Hemos agregado las opciones de búsqueda Ancestros conceptuales y Conceptos derivados, que muestran una lista de conceptos primarios y secundarios, respectivamente. Además, las capacidades de búsqueda de métodos de comportamiento se han mejorado con las opciones Métodos anulados y Métodos anulados.


imagen

Ignorando errores


En MPS, puede ignorar los errores en los nodos. Esto es conveniente en los casos en que el error se muestra en el editor, pero en un contexto específico no tiene sentido (por ejemplo, en plantillas de generador). Anteriormente, las posibilidades de suprimir tales errores eran inflexibles. Si el nodo se anotó con el atributo 'SuppressErrorAnnotation', entonces se llamó al 'Suprimir error para nodo ...'. El uso de esta intención suprimió todo tipo de errores en este nodo y todos sus descendientes, de esta manera los errores reales podrían ignorarse.


Ahora es posible ignorar solo ciertos tipos de errores. El error seleccionado se ignorará para este nodo y todos sus descendientes, pero se mostrarán todos los demás mensajes. Lea más sobre las nuevas funciones de gestión de errores en la documentación .


imagen

Lenguaje de ensamblaje y empaque


Consejos y trucos


Las aplicaciones RCP (Rich Client Platform) se utilizan para agregar consejos y trucos de MPS de forma predeterminada. Ahora los consejos y trucos para su aplicación se pueden redefinir utilizando el nuevo diseño de consejos y trucos en el script de compilación. Como antes, puede usar los consejos de la distribución MPS o definirlos usted mismo en un directorio o módulo de solución e importar.


imagen

Consejos y trucos Lenguaje de descripción


Para importar sugerencias y trucos en un script de compilación desde un módulo de solución, cree una solución e importe los idiomas jetbrains.mps.build.tips y jetbrains.mps.core.xml. Luego, cree una instancia del concepto MPSTipsAndTricks y describa sus sugerencias. Cada sugerencia es texto HTML y no puede contener más de una imagen.


imagen

Métodos de embalaje


Marcamos empaquetado personalizado en BuildMps_IdeaPlugin como obsoleto. En su lugar, use el método de empaquetado en la construcción BuildMpsLayout_Plugin.


El método de ensamblaje Empaquetado automático coloca todos los módulos del idioma y el tipo de solución en la carpeta 'idiomas' del directorio raíz del complemento, y la opción Empaquetado manual permite al desarrollador establecer la estructura del complemento de forma independiente.


imagen

Nuevo diseño de lenguaje de ensamblaje y empaque


Hemos ampliado las capacidades de la configuración de prueba en el lenguaje de ensamblaje y empaquetado. Ahora es posible especificar complementos adicionales de IntelliJ IDEA que deben cargarse para ejecutar pruebas MPS desde Ant.


En algunos casos, para ejecutar la prueba, se requiere un cierto complemento, que el lenguaje ensamblador no pudo calcular por módulos que contienen las pruebas. Ahora puede especificar el complemento necesario para ejecutar la prueba en el diseño de configuración de prueba.


imagen

El editor


Reutilizar mapas de acción celular


Los elementos del mapa de acción de celda de un mapa de acción existente se pueden reutilizar mediante importaciones.


imagen

Otras mejoras


Tipos de datos completamente compilados


Avanzando hacia lenguajes totalmente compilados, creamos tipos de datos totalmente generados. Toda la información de tipos de datos generada está disponible a través de la API SModel.


Guardar datos de migración en anotaciones


Hemos implementado una nueva forma de guardar datos durante las migraciones, que recomendamos usar en el futuro. El nodo derivado que contiene los datos ahora debe estar conectado a cualquier nodo ubicado lo suficientemente cerca del lugar al que pertenecen los datos.


En la secuencia de comandos de migración que crea nodos con datos, debe declarar el concepto de dichos nodos y usar la construcción putData () para insertar cada anotación en el modelo:


imagen

La recuperación de nodos que contienen datos es la misma que antes:


imagen

Cambios en el diálogo de resolución de conflictos.


Anteriormente, en un conflicto, los cambios podían aplicarse solo en un lado. Pero a veces es importante no perder otros cambios.


Esto se aplica a los cambios en los nodos vecinos que están en el mismo rol plural. Ahora, después de aplicar los cambios en un lado del conflicto, los cambios de la otra rama se mostrarán como una adición. Para completar la resolución del conflicto, esta adición debe aplicarse o rechazarse.


Después de aplicar los cambios en el lado izquierdo del conflicto, puede aplicar o ignorar la línea en el lado derecho:


imagen

Puede descargar la nueva versión aquí , esperamos que lo deleite. En cualquier caso, ¡esperamos sus comentarios ! Una lista completa de soluciones está disponible en esta página . Por favor, infórmenos cualquier problema en el rastreador .


Su equipo JetBrains MPS
El impulso para desarrollar

Source: https://habr.com/ru/post/es436652/


All Articles