Olá Habr! Muitos já estão começando a se preparar para os feriados de Ano Novo, para comprar presentes, alguém está planejando uma viagem para os longos feriados de Ano Novo. E no JetBrains, ainda é um momento quente para lançarmos lançamentos de produtos. Hoje estou com pressa de compartilhar com você as notícias sobre o lançamento recentemente lançado do nosso ambiente de desenvolvimento de plataforma cruzada para C e C ++ - CLion 2019.3.
O principal objetivo deste lançamento era, por mais patético que pareça, qualidade. Decidimos focar nos problemas que incomodam nossos usuários há muito tempo - primeiro, a produtividade e a capacidade de resposta do editor e, em segundo lugar, os bugs, imperfeições e recursos muito populares, mas ausentes.
Para começar, brevemente sobre o que é mais importante nesta versão:
- Melhorias na velocidade e capacidade de resposta do editor, principalmente o preenchimento automático implementado em nosso mecanismo baseado no Clangd.
- Gerador Ninja no CMake, configurações padrão do CMake e outras melhorias no modelo de design.
- Atualizações na integração com depuradores.
- Nova ação para alternar entre arquivos de cabeçalho e arquivos sour.
- Análise de código mais precisa: uma nova verificação de funções virtuais, bem como verificação ortográfica nos comentários do CMake e do Doxygen.
- Suporte para conceitos do padrão C ++ 20.
- Métricas de cobertura de código.
- WSL2, convenções de formatação e nome da Microsoft, atualizações de suporte a VCS e muito mais.
Falaremos com mais detalhes abaixo, mas se você estiver pronto para experimentar agora, faça o download da versão em
nosso site . Como de costume, está disponível uma avaliação gratuita por 30 dias.
Desempenho do editor
A julgar pelas estatísticas que muitos de nossos usuários concordam em enviar, a ação mais usada no CLion é o preenchimento
automático . Foi nele que decidimos nos concentrar neste lançamento para torná-lo mais responsivo. Para fazer isso, adicionamos mais um, com base no Clangd, aos provedores de preenchimento automático já existentes no IDE. A conclusão é que todos os fornecedores trabalham em paralelo e, assim que os primeiros resultados estiverem prontos, o CLion exibirá uma lista suspensa de opções, continuando a carregar outras opções conforme necessário.
Obviamente, queríamos entender se essa abordagem híbrida oferece benefícios. As medições mostraram que, em projetos simples, a velocidade do fornecedor do CLion e do fornecedor baseado em Clangd não difere muito. Mas em projetos complexos como LLVM, Qt, Boost, Eigen, os primeiros cem resultados do Clangd aparecem muito mais rapidamente. Julgue por si mesmo:
Leia mais sobre medidas em um
artigo separado no blog em inglês do CLion.
Entre outras melhorias significativas, vale destacar a aceleração da plataforma no tempo de lançamento do IDE. Isso foi conseguido paralelando muitos processos no início, reorganizando as classes carregadas no início e otimizando o carregamento de fontes no macOS. Os números específicos para acelerar dependem das configurações do ambiente, carro, plataforma e outros fatores.
No CLion, para nosso grande pesar, ainda há travamentos na interface do usuário. Tentamos agrupá-los de acordo com o problema original e corrigimos um problema após o outro. Portanto, nesta versão, corrigimos os congelamentos nos casos de uma Visualização de usos aberta, ao mudar para uma declaração, ao renomear a diretiva
#include , ao usar migalhas de pão e exclusão segura, assim como em outros casos. As suspensões da interface do usuário continuam sendo o problema mais urgente para nós, portanto, definitivamente continuaremos esse trabalho em versões futuras.
E, finalmente,
renomear refatoração de aceleração . Essa refatoração pode renomear não apenas o uso do nome no código, mas também em literais e comentários de cadeias. Mas isso nem sempre é necessário, e a pesquisa pelo nome foi realizada antes do usuário do IDE indicar quais usos específicos seriam renomeados. Isso levou a longos atrasos na busca de um nome popular. Agora você pode primeiro selecionar uma pesquisa apenas por código e só então iniciar a pesquisa. Para fazer isso, vá para Configurações / Preferências | Editor Geral As refatorações devem ser desativadas "Ativar modo local". Nesse caso, quando a refatoração for chamada (Shift + F6 por padrão no Windows / Linux, ⇧F6 no macOS), o CLion abrirá imediatamente a caixa de diálogo Renomear, onde é possível especificar os parâmetros de pesquisa:
Melhorias no modelo de design do CMake
Aqui, muitos de vocês devem estar aguardando o anúncio do suporte para Makefiles. Até agora, porém, apenas uma
abordagem semi-automática para sua integração através do banco de dados de compilação está disponível. Mais suporte nativo ainda está em desenvolvimento, mas neste ciclo de lançamento fizemos grandes avanços e temos todas as chances de mostrar novo suporte para o próximo lançamento 2020.1, por volta do final de março de 2020.
Mas criamos a tão esperada oportunidade de oferecer suporte ao CMake - a capacidade de especificar qualquer gerador de CMake, incluindo o gerador
Ninja, tão esperado pelos usuários! Anteriormente, usamos Makefiles e geradores semelhantes, pois analisamos os arquivos resultantes (mais precisamente, eles eram
-G “CodeBlocks - Unix Makefiles” e no Windows
-G “CodeBlocks - MinGW Makefiles” e
-G “CodeBlocks - NMake Makefiles” ) Agora você pode especificar qualquer gerador no perfil CMake no CLion:
Isso é possível apenas ao usar o CMake versão 3.15 e superior, pois é implementado pela API do CMake File e funciona em todas as plataformas, remotamente, para WSL / WSL2.
Observo que geradores como Xcode e Visual Studio são geradores múltiplos, ou seja, eles geram arquivos para todos os tipos de montagens (Debug, Release, etc.), mas o CLion usará apenas o tipo de montagem especificado em CMake perfil.
Esta versão também introduziu
as configurações padrão do CMake . Isso significa que, para todos os novos projetos no CLion, você pode usar as mesmas configurações predefinidas, como o gerador CMake ou o diretório para gerar o CMake. As configurações podem ser especificadas em Arquivo | Outras configurações | Configurações para novos projetos ...
Das importantes melhorias no modelo de projeto do CMake, ainda vale ressaltar a capacidade de recarregar configurações válidas, mesmo que outras inválidas estejam presentes no projeto. Isso pode ser útil se você tiver configurado várias configurações remotas que estão indisponíveis no momento, mas deseja recarregar pelo menos configurações locais.
Atualização de integração do depurador
Nos depuradores, decidimos corrigir os problemas e deficiências que mais preocupam nossos usuários. Primeiro, o CLion agora lê
.gdbinit / .lldbinit no diretório do projeto . Isso é útil se você deseja personalizar algumas configurações do depurador ou adicionar impressoras bonitas, mas apenas para um projeto específico. Anteriormente, era necessário especificar essas configurações nos arquivos de configuração do depurador no diretório do usuário. Agora você pode configurar esses parâmetros específicos para o projeto. Mas, para que isso funcione, você deve habilitar esse comportamento no próprio depurador nas configurações no nível do diretório do usuário (leia como fazer isso no
GDB e no
LLDB ).
A integração com o LLDB está disponível no Linux e macOS. Na nova versão, atualizamos o LLDB embutido para a versão 9.0 e, ao mesmo tempo, analisamos globalmente todas as bonitas impressoras incorporadas. Graças a isso, o desempenho de contêineres padrão em ambas as plataformas melhorou significativamente. Comparativos detalhados podem ser encontrados em nosso
blog em inglês . Vale ressaltar que na plataforma macOS, a
biblioteca libc ++ lida com muito melhor que a
libstdcxx . Isso parece corresponder à popularidade dessas bibliotecas nesta plataforma, mas se você estiver usando a
libstdcxx no macOS, informe-nos mais sobre esses casos nos comentários.
O CLion agora tem
várias opções para trabalhar remotamente com um projeto e depurar. Desde a opção completamente remota, quando a montagem e a depuração do projeto ocorrem em uma máquina remota, até as opções em que apenas o projeto é depurado remotamente. É isso no segundo caso, adicionamos outra configuração ao CLion -
Remote GDB Server . Ao contrário da
depuração remota de longa data do
GDB (sim, não tínhamos nomes, concordamos), na nova configuração, o CLion cria o próprio projeto (talvez seja necessário definir configurações de compilação cruzada), baixe o arquivo executável na máquina remota e executa seu programa no gdbserver especificado. A configuração antiga agora é mais adequada para opções complexas, quando o código está em uma máquina, na montagem na segunda e na depuração na terceira. Ou se a compilação cruzada não for possível.
Vá para o cabeçalho / arquivos de origem
Sim fez! Finalmente, adicionamos uma ação separada para alternar entre arquivos de cabeçalho e arquivos azedos. Qual é a principal diferença da plataforma antiga
Ir para o símbolo relacionado ? O fato é que, como uma ação comum da plataforma,
Ir para o símbolo relacionado tenta ser muito preciso e escolher uma das opções mais corretas. Isso é longo e nem sempre correto no caso do C ++. A nova ação
Ir para cabeçalho / fonte se comporta de maneira diferente:
- Se em 500 ms não houver uma única opção correta, será exibida uma lista suspensa de opções adequadas, na qual o usuário poderá selecionar a mais adequada.
- Se o usuário já tiver navegado neste arquivo, o arquivo para o qual ele estava navegando estará no topo da lista.
- Mais adiante na lista, haverá arquivos do mesmo diretório com o mesmo nome.
- E então os resultados da pesquisa para declarações e definições correspondentes continuarão.
Vale a pena notar o recurso de pesquisa (como nossos usuários já o encontraram) - a pesquisa agora é realizada em arquivos incluídos / inclusos diretamente. Este é um limite de tempo necessário para não confundir caracteres com o mesmo nome de diferentes destinos.
Análise de código
Uma nova verificação apareceu no analisador de código no CLion. Ele captura situações em que funções virtuais são chamadas de construtores ou destruidores. Por que isso é ruim já
foi discutido muito . Agora o CLion alerta para esses casos:
O corretor ortográfico é um componente integrante de um ambiente de desenvolvimento integrado. Todos cometemos erros de ortografia e, em seguida, é difícil para nossos colegas ler o código e os comentários. Portanto, é bom quando o IDE destaca esses erros. Nesta versão, incluímos verificação ortográfica nos arquivos CMake e nos comentários da documentação no formato Doxygen:
Menos erros de ortografia - código mais legível!
Conceitos de C ++ 20
Nossa equipe está se esforçando muito no mecanismo de idiomas baseado no Clangd. E a comunidade global de C ++ está desenvolvendo ativamente o Clang. Nesta versão, unimos forças - pegamos o ramo experimental Clang com suporte para conceitos do C ++ 20, desenvolvido por Saar Raz, e o derramamos em nosso ramo Clangd. Assim, obtivemos o destaque do código com conceitos e verificações básicas do analisador Clang no CLion:
Mas não paramos por aí. E em nosso mecanismo baseado em Clangd, implementamos alguns casos úteis de preenchimento automático, verificando o uso de um conceito,
renomeando a refatoração de conceitos, ações de navegação e pesquisa.
Vá para Definição e localização de
usos .
Preenchimento automático para parâmetros de modelo sujeitos a restrições:
std::is_same<Other, T>
automático para
std::is_same<Other, T>
e
same_as<T, U>
:
Você pode ler mais sobre nosso trabalho conjunto sobre conceitos no
blog em
inglês . Há também uma gravação em vídeo do relatório do CppCon 2019, no qual Saar Raz apresentou sua implementação do conceito em Clang e nosso trabalho conjunto sobre suporte ao conceito no CLion.
Métricas de cobertura de código
A cobertura de código é uma oportunidade que os usuários do CLion têm esperado e pedido. Na última versão, a equipe do AppCode começou a trabalhar nessa direção, e nisso a selecionamos para casos de C ++ multiplataforma já no CLion.
As métricas de cobertura do código CLion funcionam através da integração com as ferramentas llvm-cov / gcov. Nesse caso, você pode executar testes de unidade e configurações regulares e, de acordo com a execução, a frequência de execução de determinadas linhas de código será calculada. Os resultados de vários lançamentos podem, se desejado, ser resumidos em um geral.
Você pode ver os resultados diretamente em uma janela especial de Cobertura:
... ou na lista à esquerda no editor.
Bem, e mais importante: para que isso funcione, você precisa passar opções especiais de compilação:
- Para o GCC:
-fprofile-arcs -ftest-coverage
--coverage
ou --coverage
. - Para Clang: os mesmos sinalizadores do GCC ou
-fprofile-instr-generate -fcoverage-mapping
. As diferenças estarão apenas no método de montagem das métricas de cobertura.
Por que o próprio CLion não está passando esses parâmetros? Principalmente porque temos uma regra para não interferir no processo de compilação. Sim, e nem sempre é claro para onde passar esses parâmetros, caso o CMake não seja. Mas agora estamos pensando em opções de como automatizar esses casos no futuro (temos um problema semelhante com os desinfetantes).
Você pode ler mais sobre as opções de compilação e sobre como exibir métricas no CLion em nossa
ajuda on-line .
Outras melhorias
Entre outras melhorias importantes nesta versão:
- Suporte para o subsistema WSL2. As configurações no CLion são as mesmas da primeira versão do WSL.
- Suporte para regras de formatação e nomeação da Microsoft. Este estilo está disponível no mesmo nível do Google, LLVM, Qt, GNU, Stroustrup e outros em Configurações / Preferências | Editor Estilo de código | C / C ++.
- Atualizações do IntelliJ Rust Plugin (uma publicação detalhada em nosso blog em inglês é dedicada a essas alterações).
- O VCS suporta atualizações, interface do usuário e outras alterações da plataforma IntelliJ.
Demo
Em conclusão, um vídeo tradicional sobre os novos recursos do CLion 2019.3 (em inglês):
Obrigado por ler até o fim! Certamente você tem perguntas, desejos, relatórios de bugs e apenas pensamentos - estamos esperando por eles nos comentários! Como sempre, teremos o maior prazer em responder e discutir suas idéias.
Sua equipe JetBrains CLion
O impulso para desenvolver