Olá Habr! Lançamos recentemente o MPS 2018.3 . Nesta versão, existem muitos novos recursos com os quais o trabalho em projetos se tornará ainda mais eficaz. Melhoramos os planos de geração e a linguagem de descrição do editor, adicionamos novas construções à linguagem de montagem e empacotamento, atualizamos os elementos da interface para uma navegação conveniente na hierarquia de herança e fizemos muitas outras alterações no trabalho produtivo.

Idioma base
Ícones para navegar por conceitos super definidos / implementados
Ícones de conceitos redefinidos / implementados apareceram nos campos de conceitos e conceitos de interface, que simplificam a navegação para conceitos filhos.

Pacotes personalizados para classes BaseLanguage
Nas versões anteriores do MPS, o pacote Java das classes geradas era determinado exclusivamente pelo nome do modelo no qual os elementos de origem estavam localizados. A nova versão do Classificadores BaseLanguage adiciona a propriedade packageName, que permite substituir o nome do pacote Java final. A propriedade packageName faz sentido apenas para os classificadores BL de nível superior, como é o caso dos classificadores Java.

Novos recursos de gerador para extensões BaseLanguage
O BaseLanguage geralmente cria extensões. No entanto, para algumas extensões, pode ser difícil escrever um gerador adequado. Adicionamos vários conceitos novos ao BaseLanguage para simplificar o processo de gravação de geradores para extensões.
Gerando expressões de valor Lvalue
Uma expressão lvalue é uma variável na qual você pode ler ou escrever um valor. Em alguns casos, gerar uma expressão Lvalue é difícil, pois pode depender do contexto em que é usada. Um novo conceito auxiliar, generic lvalue-expression
simplificará o gerador e o tornará independente do contexto.

Converter expressões Lvalue em links
Algumas expressões incluem outras expressões Lvalue para operações mais complexas com variáveis (por exemplo, mais atribuições ou incrementos e expressões get). A introdução de construções com essa semântica foi difícil, porque não foi fácil para eles escrever o gerador certo.
Na nova versão, você pode @byRef
qualquer expressão @byRef
com @byRef
. O gerador BaseLanguage converte a expressão quebrada em uma expressão do tipo Reference<T>
, que fornece os métodos get e set para a variável quebrada.

Leia mais sobre novos conceitos neste artigo .
Suporte para métodos padrão
Na nova versão do MPS, você pode criar métodos padrão nas interfaces BaseLanguage. A palavra-chave padrão é implementada pelo conceito DefaultModifier, uma extensão do conceito Modifier. DefaultModifier está contido na linguagem jetbrains.mps.baseLanguage.jdk8, portanto, para criar um método padrão na interface, importe a linguagem jdk8.

Gerador
Linguagem do gerador (linguagem de transformação do modelo)
Removemos a macro $ INCLUDE $, substituindo seu uso por $ CALL $. A migração apropriada ajudará a atualizar seus projetos. A macro $ INCLUDE $ não oferece suporte a modelos com argumentos, e a presença de duas macros de funcionalidade semelhantes complica o idioma.
A macro $ WEAVE $ e as regras de tecelagem agora aprenderam a chamar padrões com argumentos. Além disso, corrigimos um defeito desagradável, embora não muito perceptível, que ocorre ao usar modelos compilados e interpretados. A “introdução” (tecer) de um modelo externo a partir do código interpretado sempre sempre leva à interpretação, mas agora o modelo compilado funcionará (é claro, desde que o uso de modelos compilados esteja incluído nas propriedades do gerador). Da mesma forma, o "tecido" do modelo externo interpretado do compilado funciona.
QueriesGenerated, um conjunto de consultas de modelo compilado para um modelo com modelos, sempre contava com uma convenção de nomenclatura e um mecanismo de reflexão Java para executar o código. Você pode ver isso nos rastreamentos de pilha, quando algo deu errado na consulta de modelo do gerador. Finalmente nos livramos desse mecanismo.
Elementos UI / UX
Suporte para MacBook Touchbar
Os proprietários de macbooks com uma barra de toque agora podem usá-lo para trabalhar no MPS: por exemplo, invoque ações para iniciar, criar e depurar um aplicativo a partir da barra de toque, além de selecionar rapidamente uma configuração de execução / depuração ou criar uma nova. Os controles da barra de toque podem ser configurados em Configurações / Preferências | Aparência e comportamento | Menus e barras de ferramentas.
E, é claro, os recursos da barra de toque podem ser expandidos! Basta adicionar a ação desejada ao InterfaceGroup
correspondente.

Tema de alto contraste
Como a plataforma IntelliJ, o MPS tem um novo tema de alto contraste. Ele pode ser ativado em Configurações / Preferências -> Aparência e comportamento.

Ferramentas para localizar código obsoleto
Na migração | Ações de código descontinuado são executadas para localizar código descontinuado e trabalhar com seus usos. Encontre os usos dos resultados da pesquisa de grupos reprovados pela versão pretendida da exclusão, o que ajuda a determinar a gravidade e selecionar qual dos usos deve ser removido primeiro.

Ícones para navegar por métodos de comportamento substituídos / implementados
Nos campos das classes de comportamento, adicionamos ícones para navegar pelos métodos de comportamento substituídos / implementados. A seguir, é apresentada uma lista dos métodos getPresentation () que substituem ou implementam o método selecionado. Na lista, você pode acessar facilmente qualquer um desses métodos.

Aprimoramentos pop-up para navegar por substituições
Os pop-ups de conceitos / classes / métodos substituídos / implementados tornaram-se assíncronos. Isso significa que o MPS adicionará resultados de pesquisa a um pop-up em segundo plano. Além disso, agora você pode filtrar os resultados da pesquisa pelo nome do objeto.

Alterações nos localizadores
Nesta versão, atualizamos e otimizamos os buscadores. Para execução assíncrona do localizador, use a expressão especial OnEachNodeFoundByExpression, que é uma simples chamada para o localizador com uma função de retorno de chamada para cada nó detectado.
As configurações de Localizar usos para conceitos também foram alteradas. Adicionamos as opções de pesquisa Conceito Ancestrais e Conceitos Derivados, que exibem uma lista dos conceitos pai e filho, respectivamente. Além disso, os recursos de pesquisa de métodos de comportamento foram aprimorados com as opções Métodos Substituídos e Métodos Substituídos.

Ignorando erros
No MPS, você pode ignorar erros nos nós. Isso é conveniente nos casos em que o erro é exibido no editor, mas em um contexto específico não faz sentido (por exemplo, nos modelos de gerador). Anteriormente, as possibilidades de suprimir esses erros eram inflexíveis. Se o nó foi anotado com o atributo 'SuppressErrorAnnotation', o efeito 'Suprimir erro para o nó ...' foi chamado. O uso dessa intenção suprimiu todos os tipos de erros nesse nó e em todos os seus descendentes - dessa maneira, erros reais podem ser ignorados.
Agora é possível ignorar apenas certos tipos de erros. O erro selecionado será ignorado para este nó e todos os seus descendentes, mas todas as outras mensagens serão exibidas. Leia mais sobre os novos recursos de gerenciamento de erros na documentação .

Linguagem de montagem e embalagem
Dicas e truques
Aplicativos RCP (Rich Client Platform) usados para adicionar dicas e truques do MPS por padrão. Agora, dicas e truques para seu aplicativo podem ser redefinidos usando o novo design de dicas e truques no script de construção. Como antes, você pode usar as dicas da distribuição MPS ou defini-las em um diretório ou módulo de solução e importar.

Dicas e truques Descrição Idioma
Para importar dicas e truques em um script de construção a partir de um módulo de solução, crie uma solução e importe os idiomas jetbrains.mps.build.tips e jetbrains.mps.core.xml. Em seguida, crie uma instância do conceito MPSTipsAndTricks e descreva suas dicas. Cada dica é um texto HTML e pode conter não mais que uma imagem.

Métodos de embalagem
Marcamos o empacotamento personalizado no BuildMps_IdeaPlugin como obsoleto. Em vez disso, use o método de empacotamento na construção BuildMpsLayout_Plugin.
O método de montagem de empacotamento automático coloca todos os módulos do idioma e do tipo de solução na pasta 'languages' do diretório raiz do plug-in, e a opção Empacotamento manual permite que o desenvolvedor defina a estrutura do plug-in por conta própria.

Novo design de linguagem de montagem e embalagem
Expandimos os recursos da configuração de teste na linguagem assembly e empacotamento. Agora é possível especificar plugins adicionais do IntelliJ IDEA que devem ser carregados para executar testes MPS a partir do Ant.
Em alguns casos, para executar o teste, é necessário um determinado plug-in, que a linguagem assembly não pôde calcular pelos módulos que contêm os testes. Agora você pode especificar o plug-in necessário para executar o teste no design de configuração de teste.

O editor
Reutilizar mapas de ação da célula
Os elementos do mapa de ação da célula de um mapa de ação existente podem ser reutilizados usando importações.

Outras melhorias
Tipos de dados totalmente compilados
Indo para idiomas totalmente compilados, criamos tipos de dados totalmente gerados. Todas as informações de tipos de dados gerados estão disponíveis por meio da API do SModel.
Salvando dados de migração em anotações
Implementamos uma nova maneira de salvar dados durante as migrações, que recomendamos usar no futuro. O nó derivado que contém os dados agora deve ser anexado a qualquer nó localizado próximo o suficiente ao local ao qual os dados pertencem.
No script de migração que cria nós com dados, você precisa declarar o conceito de tais nós e usar a construção putData () para inserir cada uma dessas anotações no modelo:

A recuperação de nós que contêm dados é a mesma de antes:

Alterações na caixa de diálogo de resolução de conflitos
Anteriormente, em um conflito, as mudanças podiam ser aplicadas apenas de um lado. Mas às vezes é importante não perder outras alterações.
Isso se aplica a alterações nos nós vizinhos que estão na mesma função plural. Agora, depois de aplicar as alterações em um lado do conflito, as alterações do outro ramo serão exibidas como uma adição. Para concluir a resolução do conflito, essa adição deve ser aplicada ou rejeitada.
Depois de aplicar as alterações no lado esquerdo do conflito, você pode aplicar ou ignorar a linha no lado direito:

Você pode baixar a nova versão aqui , esperamos que ela o encante. De qualquer forma, aguardaremos o seu feedback ! Uma lista completa de correções está disponível nesta página . Por favor, relate quaisquer problemas para nós no rastreador .
Sua equipe JetBrains MPS
O impulso para desenvolver