Novidades no ReSharper C++ 2023.2

O ReSharper C++ 2023.2 introduz a refatoração Safe Delete para permitir que você remova símbolos do código-fonte com segurança. Para projetos C++ modernos, vários novos recursos do C++20 e do C++23 agora são suportados, incluindo módulos de biblioteca padrão do C++23. Esta versão também vem com o AI Assistant do ReSharper, projetado especificamente para ajudar você nas tarefas de programação.

Baixar

Avaliação gratuita por 30 dias disponível

AI Assistant Acesso limitado

O AI Assistant não é distribuído juntamente com o ReSharper e precisa ser instalado separadamente. Por enquanto, há uma lista de espera para o acesso ao recurso do AI Assistant.

Saiba mais sobre o AI Assistant e sobre como instalá-lo através do Toolbox App ou do instalador do dotUltimate na nossa página de ajuda na Web.

O ReSharper C++ 2023.2 traz o AI Assistant do ReSharper - um chat orientado por IA projetado especificamente para responder a perguntas de programação e ajudar você na solução de problemas, refatoração, documentação e outros workflows de desenvolvimento.

O AI Assistant do ReSharper leva em consideração a linguagem e as tecnologias usadas no seu projeto. Essa percepção de contexto adapta suas respostas logo de cara, economizando tempo e esforço.

Sinta-se à vontade para incluir partes do código-fonte nas suas consultas. O ReSharper detectará o código que você enviou ou colou no chat e o formatará adequadamente, enquanto o modelo de IA explicará a lógica por detrás do código e ajudará você a refatorar, encontrar problemas ou documentá-lo.

Suporte para C++23

A instrução if consteval é um novo recurso de avaliação constante no C++23 que desenvolve ainda mais a ideia de consteval e std::is_constant_evaluated() do C++20. Se a avaliação da instrução if consteval ocorrer durante uma avaliação de constante, a seguinte instrução composta será executada. Caso contrário, o branch else será executado.

O ReSharper C++ apresenta suporte para if consteval e traz um conjunto de inspeções relacionadas:

  • consteval if é sempre constante.
  • std::is_constant_evaluated sempre é avaliada como uma constante.
  • if pode ser substituído por if consteval.

Agora, o ReSharper C++ oferece suporte aos módulos nomeados std e std.compat introduzidos na biblioteca padrão do C++23. Se você usa o Visual Studio 17.6 ou posterior, agora pode usar import std ou import std.compat para importar toda a biblioteca padrão em vez de usar um cabeçalho pré-compilado ou incluir cabeçalhos específicos da biblioteca padrão.

Antes do C++23, todos os operadores tinham que ser funções-membro não estáticas. No entanto, os operadores de chamadas geralmente são usados com objetos de função sem membros, e permitir que os operadores sejam estáticos nesse caso pode resultar em um código mais eficiente. O C++23 permite que operator() e operator[] sejam estáticos.

Suporte para C++20

Temos trabalhado arduamente para aprimorar o suporte a módulos do C++20, corrigindo vários problemas secundários em projetos do mundo real que usam módulos. Ao processar módulos internamente, o ReSharper C++ agora implementa o descarte de declarações que não podem ser acessíveis por declaração, melhorando significativamente o desempenho em módulos que incluem muitos cabeçalhos no fragmento de módulo global.

Além disso, implementamos várias alterações para oferecer melhor suporte a módulos em projetos CMake. Agora, o ReSharper C++ reconhece arquivos .cppm como interfaces de módulo e inclui suporte experimental para módulos localizados fora da pasta do projeto.

O novo atributo [[no_unique_address]] do C++20 indica que um endereço exclusivo não é necessário para um membro de dados não estático de uma classe, permitindo que o compilador organize os membros da classe de uma forma mais eficiente. Agora, o ReSharper C++ leva [[no_unique_address]] em consideração ao calcular o tamanho de um objeto.

O ReSharper C++ 2023.2 também implementa o relatório de defeitos do C++20 recentemente aceito, que permite a inicialização de um array de char ou unsigned char com um literal de string UTF-8.

Refatoração Safe Delete

O ReSharper C++ introduz a refatoração Safe Delete para permitir que você remova símbolos do seu código-fonte com segurança. Essa refatoração está disponível para classes, funções, variáveis, enumeradores, namespaces e até mesmo conceitos.

Para invocar a refatoração, coloque o cursor no símbolo que você deseja excluir e pressione Alt+Del ou selecione Safe Delete no menu Refactor This.

Antes de excluir um símbolo, o ReSharper C++ pesquisa seus usos e permite visualizar as alterações no código-fonte, para que você possa ter certeza de que todas as remoções são intencionais. Se você tentar excluir uma entidade complexa, como uma classe ou um namespace, o ReSharper C++ verificará recursivamente os usos de todos os seus membros.

Unreal Engine

Este lançamento traz melhorias de desempenho para indexação de Blueprints. Na primeira vez que você abre um projeto, o ReSharper C++ indexa todos os ativos do Blueprint para ativar recursos como Find Usages e mostrar os valores dos dados serializados diretamente no o editor de texto.

Antes, o ReSharper C++ indexava esses recursos com a mesma prioridade do seu código C++, o que significava que demorava mais até que o projeto estivesse pronto para funcionar. O ReSharper C++ 2023.2 indexará recursos em segundo plano depois de indexar seu código C++ sem interferir no seu trabalho.

Melhoramos a complementação inteligente para tipos de wrapper com a semântica de atribuição padrão. Por exemplo, ao atribuir a uma variável do tipo TEnumAsByte, a complementação sugerirá enumeradores do tipo de enumeração subjacente.

Para projetos do Unreal Engine 5.1, introduzimos suporte para a macro UE_INLINE_GENERATED_CPP_BY_NAME, que permite integrar arquivos inline gerados no seu módulo para melhorar o tempo de compilação.

Assistência para codificação

Com a complementação aprimorada de código dependente, agora você obterá itens de complementação quando o tipo for restrito por um conceito ou uma característica. Agora, o ReSharper C++ considera as características de tipo padrão std::is_same/std::is_base_of, seus aliases de valor _v, os conceitos correspondentes std::same_as/std::derived_from e a característica TIsSame do Unreal Engine.

Para sugestões de complementação de código mais úteis, o ReSharper C++ agora também extrai requisitos de tipo e valor de cláusulas requires, if constexpr e SFINAE.

Há duas novas ações de contexto complementares para ajudar você a mover uma restrição de parâmetro de template para a cláusula requires e converter uma cláusula requires em uma restrição de parâmetro de template.

Se você tiver uma chamada recursiva, o ReSharper C++ irá marcá-la na medianiz, tornando-a mais visível.

A lista de complementação de código agora filtra os identificadores reservados e os sugere somente depois de ReSharper C++. Isso significa que você não precisa mais ler as sugestões das bibliotecas padrão, a menos que precise delas.

O ReSharper C++ 2023.1 introduziu realce e formatação adequados para substituição de macros no pop-up Quick Documentation e dicas de ferramentas ao passar o mouse. Na versão 2023.2, essas melhorias também funcionarão para definições de macro e Informações do parâmetros na complementação de código.

Melhoramos o mecanismo de avaliação para oferecer suporte à inicialização agregada de arrays constexpr.

Melhoramos a compatibilidade com os compiladores GCC e Clang e com as bibliotecas padrão libc++/libstdc++. Isso inclui suporte para mais recursos integrados, como __integer_pack, __is_convertible/__is_nothrow_convertible, e atualizações para os compatíveis anteriormente.

Quando você especifica a direção do parâmetro com o atributo [in], [in,out] ou [out] do comando param, do Doxygen, as dicas de ferramentas agora os obtêm a partir do seu comentário.

Análise de código

O ReSharper C++ 2023.2 adiciona uma nova inspeção que detecta o desreferenciamento redundante e operadores address-of. Ela oferece várias correções rápidas para simplificar o acesso de membros e remover operadores redundantes.

Outra nova inspeção realça argumentos de template redundantes que correspondem ao argumento de template padrão correspondente e podem ser omitidos.

Uma nova inspeção de compatibilidade avisa sobre declarações de enumerações ao estilo C sem um tipo subjacente, que são proibidas pelo padrão C++, mas aceitas pelo MSVC, potencialmente levando a código sem portabilidade.

Agora, o ReSharper C++ realça as diretivas de pré-processador de diagnóstico #error e #warning de acordo com seu nível de gravidade.

Também atualizamos o binário clang-tidy incluído para o Clang 16, fornecendo novas verificações e correções.

O MSVC pode usar o pré-processador tradicional ou o novo em conformidade com o padrão, dependendo do valor do argumento /Zc:preprocessor do compilador. O ReSharper C++ agora lê o valor desse argumento a partir das propriedades do projeto e ajusta o comportamento do pré-processador incorporado de acordo.

Navegação

O ReSharper C++ 2023.2 traz várias melhorias em Go to declaration para uma navegação de código mais consistente e direta sem etapas extras:

  • Quando invocado em um nome de classe em uma chamada de construtor, Go to declaration agora navega até o construtor em vez da classe que o contém.
  • Go to declaration agora navega até a primeira declaração de alias de tipo ou typedef em vez de mostrar o menu com todas as declarações.
  • Go to declaration em um nome de módulo salta entre a interface e as unidades de implementação para o mesmo módulo.
  • Go to declaration em uma pasta em um caminho #include abre a pasta.

Além disso, Type of symbol agora está disponível em símbolos não declaradores. A maneira como ele funciona lá é semelhante à de Go to declaration.

Assistente de formatação e digitação

Ao gerar comentários de documentação, o ReSharper C++ agora ajustará o template de documentação de acordo com o estilo de comentário do editor. Para /**, a assistência de digitação irá gerar o comentário no estilo /** */ e, para ///, o comentário estará no estilo ///.

Este lançamento traz várias melhorias para a formatação dos membros do campo de bits. As opções para alinhar inicializadores e nomes de declaração em colunas agora oferecem suporte a campos de bits. Há também duas novas configurações de formatação para espaços antes e depois dos dois pontos em declarações de campo de bits e para alinhamento de tamanhos de campos de bits em colunas.

Uma nova opção de assistência de digitação permite desativar a geração de comentários de documentação para evitar conflitos com o gerador integrado do Visual Studio (ReSharper | Options | Environment | Editor | Behavior | C++, C, HLSL | Generate documentation comments).

Também atualizamos o binário clang-format incluído e corrigimos o mecanismo clang-format para evitar que ele remova a nova linha no final de um arquivo.

Confira as Novidades do ReSharper para saber mais sobre as outras alterações introduzidas nesta versão. Por exemplo, o ReSharper apresenta o depurador preditivo, que prevê todos os estados possíveis acionados pela execução de um programa sem precisar realmente executá-lo.

Baixar

Avaliação gratuita por 30 dias disponível