Novidades no MPS 2022.2

O MPS 2022.2 vem com anotações no Inspector, suporte aprimorado para Kotlin, API SModel aprimorada e muito mais.

Anotações no Inspector

Anotações no Inspector

Agora, anotações podem ser acessadas na janela Inspector, e o processo de anotação será iniciado para a raiz inteira. Essa ação pode ser acessada clicando com o botão direito do mouse na borda esquerda da janela do Inspector. A anotação será aberta no editor do Inspector e no editor principal.

Saiba mais

Suporte aprimorado no MPS Kotlin

Suporte aprimorado no MPS Kotlin

Muitos problemas de edição foram corrigidos para fornecer uma experiência de digitação muito melhor, como:

  • Escopos foram refatorados para oferecer suporte a mais casos de uso (por exemplo, tipos de receptores personalizados) e melhorar a filtragem (menos duplicações, acesso a funções ocultas).
  • Suporte para desconstruir operadores por sistema de tipos.
  • Literais numéricos: inserção mais fácil de números flutuantes e longos e transição entre números com e sem sinal.
  • Literais de string: todas as strings podem ser alteradas de uma para múltiplas linhas, pressionando Enter em um literal de string; alguns problemas de inserção foram corrigidos.
  • Os stubs Kotlin oferecem suporte ao carregamento de anotações e tipos de função com o receptor (por exemplo, T.() -> R que era carregado incorretamente como (T) -> R).
  • Literais lambda:
    • Suporte para o parâmetro implícito it.
    • Lambdas cujo tipo tem um receptor (por exemplo, Receiver.() -> Unit) usarão adequadamente esse tipo de receptor como um this implícito dentro do corpo do lambda.

Saiba mais

Linguagem SModel para o MPS Kotlin

Linguagem SModel para o MPS Kotlin

O suporte para SModel está agora disponível no MPS Kotlin com a nova linguagem jetbrains.mps.kotlin.smodel. Junto com o suporte para compilação aprimorado, ele permite o uso de código Kotlin em módulos de linguagem (como classes auxiliares, por exemplo).

Além dos tipos regulares (nós, conceitos, links e referências), ele aproveita a maior flexibilidade do MPS Kotlin para trazer parâmetros de tipos de Concept. Funções, variáveis e classes agora podem declarar e usar esses parâmetros e reutilizá-los em seus tipos internos, o que permite uma digitação mais fácil e aproveita as conversões inteligentes do Kotlin.

Atualizações de compilação do Kotlin

Atualizações de compilação do Kotlin

O suporte para compilação do Kotlin foi aprimorado com melhor persistência. Como resultado, as classes Kotlin não são mais apagadas quando o MPS é reiniciado.

Uma nova opção foi adicionada em scripts de build para marcar um módulo a ser compilado com o compilador do Kotlin. A inserção desse sinalizador é manual: nenhuma verificação automática está disponível no momento para defini-lo como "true". O sinalizador deve ser adicionado quando um módulo contendo arquivos Kotlin for compilado para a JVM.

Estilos de texto disponíveis em comentários de BaseLanguage

Estilos de texto disponíveis em comentários de BaseLanguage

Ao adicionar comentários a BaseLanguage, agora é possível personalizá-los ainda mais com estilos de texto. Comentários aceitam formatação em negrito (Ctrl + B), não-itálico (Ctrl + I), sublinhado (Ctrl + U) e negrito-não-itálico (Ctrl + B -> Ctrl + I).

Transformação pós-correção

Transformação pós-correção

Em BaseLanguage, agora é possível fazer transformações pós-correção que permitem transformar o código anexando algum texto à expressão. Isso economiza o tempo dos desenvolvedores, pois eles não precisam mover o cursor para a frente da expressão ou selecionar a expressão para aplicar uma transformação.

Descoberta adiada (lazy) de modelos com SModel

O MPS costumava descobrir modelos no momento em que eram registrados em um repositório. Descobrir um modelo em um módulo de projeto regular significava percorrer todo o sistema de arquivos para descobrir arquivos e seus tipos e ler pelo menos as informações de cabeçalho sobre o modelo.

Agora, os módulos não se envolvem mais na descoberta de modelos, a menos que modelos sejam solicitados. Há uma nova API do SModule (SModule.forEachRegisteredModel()) para acessar modelos já conhecidos por um módulo apenas, sem acionar a descoberta ou o carregamento dos modelos. Se você usa clientes da API SModel, especialmente as subclasses SRepositoryContentAdapter, convém adotar a nova API para se beneficiar dessa melhoria.

Melhoria nos links do tipo Association, também conhecidos como SReference

O MPS agora vem com uma API consistente para criar referências, além de uma apresentação interna atualizada. Essas mudanças visam melhorar o sistema de referência/persistência do modelo, que é esperado em versões futuras. No entanto, a mudança já permite reduzir o armazenamento na memória de qualquer modelo em aproximadamente 5%.

Stubs Java

O MPS agora respeita os arquivos jar versionados e expõe classes Java com uma versão que corresponde ao runtime Java real.

Migração de Log4j para o Java Util Logging (JUL)

Embora o MPS e a Plataforma IntelliJ estivessem usando uma versão simplificada da biblioteca Log4j sem problemas de segurança conhecidos, ambos mudaram o registro em log para o pacote padrão java.util.logging. Uma camada de compatibilidade é implementada (com base em SLF4J) para redirecionar solicitações da API Log4j para uma implementação do Java Util Logging (JUL).

A ação Configurações do Log de Depuração permite configurar níveis DEBUG e TRACE para categorias. Além disso, agora também existe um arquivo de configuração bin/log.properties que usa o conhecido formato de configuração JUL. Ao contrário de log.xml das versões anteriores, esse arquivo de configuração não é lido por padrão, mas os usuários podem solicitar acesso a essa configuração (ou a qualquer outra configuração externa) usando a propriedade do sistema idea.log.config.properties.file.

Make de linha de comando

Scripts de build Ant gerados pelo MPS a partir de declarações lang.build usam tarefas separadas para gerar e compilar fontes (<generate> própria do MPS e <javac> regular do Ant). Agora, há uma nova tarefa <mps.make> que corresponde ao processo Make iniciado a partir do IDE. Ela é responsável pela transição completa de um modelo para código compilado. A tarefa combina geração e compilação de código, o que economiza tempo, pois o MPS precisa de classes compiladas de qualquer maneira para o carregamento das classes do módulo (já que as tarefas <javac> geralmente duplicam os esforços de compilação já concluídos durante <generate>). Ela também torna os builds de linha de comando Ant e o processo Make iniciado a partir do IDE muito mais semelhantes entre si, aumentando assim a confiabilidade do seu processo de build.

Saiba mais

Testes de geradores

Testes de geradores foram aprimorados com opções de correspondência que permitem ignorar a ordenação dos nós. Há também uma nova ação para reordenar raízes de modelos, o que ajuda a levar modelos de teste de referência para o estado desejado.

Saiba mais

Configuração de tempo limite para TextGen

O MPS limita o tempo gasto na parte da transformação M2T (Model-to-Text) para resolver possíveis erros nos aspectos de TextGen. Antes, o limite era codificado. No entanto, ultimamente, alguns modelos grandes têm atingindo o limite, causando uma indesejada exceção de timeout. Agora, há uma configuração de IDE que você pode definir para controlar o tempo limite. O suporte para builds de linha de comando está planejado para versões futuras.

Gerenciamento de dependência BaseLanguage Java aprimorado para o processo Make

MPS usado para registrar dependências entre classes BaseLanguage geradas no arquivo "dependencies". O compilador Java depende delas para descobrir se classes dependentes da compilação precisam de uma atualização. Porém, quando o arquivo "dependencies" foi alterado na versão 2021.2 para manter dependências de nível superior, não havia mais a necessidade de coletar e armazenar nomes de classes por raiz. Isto ajudou o MPS a melhorar o tempo de TextGen para o código BaseLanguage (já que ele não precisa mais coletar dependências individuais) e o processo de compilação Java (já que ele não precisa mais analisar dependências de arquivos individuais, atribuir dependências de arquivos a módulos e classpath e propagar o estado "dirty").

Novo arquivo para manter as dependências de módulos

Um novo arquivo deps.cp agora armazena dependências por módulo, para permitir que o MPS deduza o gráfico de compilação do módulo. O arquivo mantém o estado da transformação, o que o torna "sealed" e personalizado (ele não lista as dependências que não foram utilizadas na transformação). Isso contrasta com o gráfico de dependências coletado em tempo de execução, que é baseado nas dependências reais do módulo.

Alterações na interface do usuário

O MPS não cria mais soluções de runtime/sandbox aninhadas sob um módulo de linguagem. Por padrão, esses módulos seriam irmãos do módulo de linguagem. Renomear o módulo de linguagem "main" ainda reconheceria esses módulos como "related" e os renomearia junto com o módulo "main".

Saiba mais

Chaves compostas para mapeamentos de rótulos

Para aprimorar a funcionalidade de chaves compostas de rótulos, introduzida em versões anteriores, o MPS é compatível com a manutenção de chaves compostas em modelos de checkpoint.

Recursos da plataforma

Barra de progresso Cloning repository

Barra de progresso Cloning repository

A barra de progresso Cloning repository agora aparece na tela de boas-vindas e é mostrada diretamente na lista de projetos, o que a torna mais clara e fácil de usar.

Nova ação Table of Contents

Nova ação Table of Contents

Agora, é possível gerar sumários rapidamente em arquivos Markdown com base nos cabeçalhos de documentos.

Assinatura GPG

Assinatura GPG

Agora, é possível criar uma assinatura GPG em um commit. A assinatura aparecerá na seção Commit Details da janela de ferramentas Git.

Execução de comandos a partir de arquivos Markdown

Execução de comandos a partir de arquivos Markdown

Ao trabalhar com arquivos Markdown que contêm instruções com comandos a serem executados, você pode executar esses comandos diretamente do arquivo usando os ícones de execução na medianiz.

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.