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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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 .

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.

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.

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.

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.

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.

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:

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

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:

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