Novidades no MPS 2022.3

O MPS 2022.3 vem com melhorias em regras de restrição, migração de sincronização com extensões MPS, stubs Kotlin para a JVM e muito mais.

Atualização das regras de restrição
Patrocinado pelo cliente

A linguagem das Regras de Restrição foi criada para resolver as deficiências na linguagem de restrições. Neste lançamento, as Regras de Restrição deram um passo adiante para melhorar a usabilidade da linguagem.

  • Agora é possível fazer referência às definições de regras de restrição a partir de NodeTestCases. Isto antes não era possível.
  • As definições experimentais de regras de restrição permitem que mensagens de registro em log sejam especificadas na janela Inspector para melhor rastreamento e depuração.
  • A mensagem de erro para regras de restrição pode ser direcionada para propriedades ou referências de nós específicos. Em vez de fazer o realce de erros de todo o nó, o recurso pode ser configurado para realçar apenas uma propriedade ou uma referência.

Carregamento aprimorado de classes de módulos

Os módulos do MPS atendem a propósitos diferentes, desde uma sandbox para experimentar com a sua linguagem até um código de plug-in ativo para alterar o comportamento do MPS ou da plataforma IntelliJ IDEA. No MPS 2022.3, agrupamos tudo isso em um único local. A página Java Facet do módulo Solution foi reformulada para abrigar todas as configurações relevantes e identificar cenários comuns para ajudar designers e usuários da linguagem a reconhecer facilmente o uso pretendido de um módulo. O IDEA Plugin Module Facet foi descontinuado e não será mais usado. Expusemos as configurações somente para os módulos Solution. Os módulos Language e Generator adotam a mesma abordagem, mas têm suas configurações definidas implicitamente. Saiba mais.

Sincronização de migração com extensões MPS

O MPS sempre teve uma comunidade ativa que agrega valor ao ecossistema, e sempre incentivamos os usuários a usar bibliotecas externas para enriquecer a funcionalidade do produto. Third-party libraries, such as MPS Extensions, have been key to improving the user experience for products built with MPS. Embora isso tenha trazido muitos benefícios para a comunidade, há uma desvantagem significativa: o usuário precisa aguardar a migração da biblioteca de terceiros para atualizar a versão do MPS. Estamos trabalhando em conjunto com a itemis, nossa parceira oficial e principal mantenedora de extensões MPS, para sincronizar nossos lançamentos e facilitar a migração para a versão mais recente do produto.

Métodos utilitários adicionais na definição da linguagem

Agora, os designers de linguagens podem reduzir a quantidade de código repetitivo extraindo-o em métodos auxiliares diretamente no nó raiz da definição. Esses métodos adicionais podem ser definidos em:

  • Restrições
  • Ações de transformação e substituição
  • Regras de inferência e verificação
  • Correções rápidas
  • Intenções

Intenções também permitem campos adicionais para preservar os valores calculados no método isApplicable a ser usado no método execute.

Stubs Kotlin para JVM

Stubs Kotlin para JVM

Agora, é possível importar stubs de bibliotecas Kotlin/JVM compiladas, enquanto anteriormente apenas era possível importar bibliotecas Kotlin/Common. Com essa melhoria, é possível usar bibliotecas compiladas para JVM (Java, Kotlin ou mistas) por meio da raiz do modelo Kotlin JVM nas opções do módulo. Saiba mais.

Melhorias na edição do Kotlin

Várias pequenas alterações e melhorias foram agrupadas com esta nova versão do MPS:

  • Agora, classes Kotlin são nós que podem ser raízes e têm seus próprios ícones.
  • O código Kotlin agora pode fazer referência a entradas de enum Java.
  • A expressão this agora pode fazer referência corretamente a um rótulo (por exemplo, this@SomeClass).
  • Sinalizadores withKotlin em scripts de build agora solicitam uma macro $kotlinc_home em vez de um local previamente codificado.
  • Os stubs foram melhorados:
    • Ações de excluir/incluir pacotes nas opções do stub agora funcionam como nos stubs Java.
    • Foram corrigidos vários métodos com IDs instáveis, levando a referências quebradas.
Transformação para criar um construtor a partir de um tipo

Transformação para criar um construtor a partir de um tipo

Agora, é possível criar uma chamada de construtor para uma determinada chamada usando uma transformação à direita digitando o parêntese esquerdo. Isso funciona para qualquer tipo de Kotlin compatível com essa operação (extensível para tipos de usuário) e pode facilitar a criação de uma expressão padrão para um determinado tipo, como ao criar um Lambda a partir de um tipo de interface funcional.

Melhorias nas funções de extensão em escopos

Melhorias nas funções de extensão em escopos

As funções de extensão em escopos foram alteradas para não excluir métodos compatíveis em escopos. Isso vem com o custo de ter alguns itens em escopos que não são aplicáveis devido ao desempenho do tipo atual de implementação do sistema.

A resolução automática de referências de função pode corrigir referências caso uma função não aplicável seja selecionada.

Nova intenção para redefinir o classpath e as opções da VM

Nova intenção para redefinir o classpath e as opções da VM

Uma nova intenção atualiza o nó MPSStartupScript e configura as opções de VM e os valores de classpath com os valores atuais de MPS. As opções de VM e os valores de classpath de MPS mudam a cada nova versão. Antes, o usuário tinha que atualizar manualmente os projetos de build para um IDE stand-alone.

Guia de Migração

No lançamento de cada grande atualização, preparamos instruções para migrar a partir de versões mais antigas do MPS, para garantir que tudo corra sem problemas. Por favor, revise-as com cuidado.