Pré-visualização de substituições de macros

Ao passar o mouse sobre uma macro, agora você pode ver a pré-visualização da sua expansão na dica de ferramenta, com realce completo da sintaxe e formatação adequada do código. Você ainda pode usar a ação de contexto Substitute macro call para expandir a macro diretamente no editor, mas a pré-visualização instantânea facilita trabalhar com macros.

O pop-up Quick Documentation (Ctrl+Shift+F1) também permite que você clique em qualquer entidade da pré-visualização da substituição e veja sua documentação. Se a expansão da macro contiver algum identificador desconhecido, ele será realçado na pré-visualização da substituição, tanto na dica de ferramenta ao passar o mouse quanto no pop-up da Documentação Rápida, para ajudar você a identificar problemas.

Módulos C++20

O ReSharper C++ 2022.3 introduziu um suporte inicial a módulos do C++ 20. Nesta atualização, refinamos nossa implementação para manipular mais casos atípicos e dar melhor suporte a projetos do mundo real que os usem. Também expandimos os recursos do ReSharper C++ que ajudam a escrever código modular.

Find usages agora permite que você encontre todos os locais para onde um determinado módulo foi importado.

A refatoração Rename ajuda você a renomear módulos e suas partições com segurança, atualizando todas as declarações e importações pertinentes no seu código.

A complementação de código oferece suporte melhorado à sintaxe de módulos do C++ 20. Nomes de módulos conhecidos são sugeridos ao usar uma operação import, e a lista de complementação também inclui as palavras-chave relacionadas ao módulo importado, quando forem permitidas.

Também atualizamos vários recursos de assistência à codificação para suportar os módulos do C++ 20. O formatador de código e a opção Rearrange code agora processam blocos de exportação e entidades exportadas. Para reordenar elementos de código, pressione Ctrl+Shift+Alt, com o cursor de texto no elemento de código ou com um trecho de código selecionado, e depois pressione a tecla de seta correspondente.

Suporte para C++23

Recentemente, o Comitê de Padronização ISO para o C++ terminou o trabalho técnico no C++ 23. Como muitos recursos do C++ 23 já estão disponíveis nos principais compiladores, o ReSharper C++ 2023.1 chegou para ajudar você a experimentá-los.

Deducing this é um recurso importante do C++23 que introduz uma nova maneira de especificar funções-membro. Agora você pode tornar o parâmetro do objeto explícito com a palavra-chave "this", o que simplifica a implementação de várias expressões idiomáticas do C++. Por exemplo, agora você pode substituir sobrecargas idênticas de funções, que difiram apenas nos seus qualificadores "const" e "reference", com uma só função, que deduz o tipo e a categoria de valor do parâmetro do objeto.

O C++ 23 introduz novas maneiras de usar "auto". Com auto(x) e auto{x}, você pode fazer uma cópia do argumento, como se ele fosse passado como um argumento de função, pelo valor.

O ReSharper C++ também dá suporte às seguintes atualizações do C++ 23, que representam otimizações da sintaxe existente da linguagem:

  • Parênteses vazios () em lambdas agora são opcionais em muitos casos.
  • Declarações "alias" agora são permitidas em declarações "init".
  • Agora, rótulos são permitidos ao final de declarações compostas.

Unreal Engine

Agora você pode adicionar rapidamente um teste do Unreal Engine, simples ou complexo, usando os novos modelos de arquivos incorporados. Basta ir até o Solution Explorer e clicar com o botão direito na sua pasta de projeto preferida para abrir o menu Add (ou então usar Ctrl+Alt+Insert).

O ReSharper C++ também oferece um novo modelo dinâmico UINTERFACE, para complementar os modelos UCLASS, USTRUCT e UENUM, já existentes. Basta selecionar o item correspondente na lista da complementação de código para adicionar uma nova classe de interface, ao trabalhar em um projeto do Unreal Engine.

Agora você pode especificar mapeamentos de pastas com código-fonte a serem usadas para resolver diretivas #include em arquivos de shader. Se você tiver o RiderLink instalado no projeto do jogo ou mecanismo, você também poderá carregar mapeamentos de shaders diretamente do Unreal Engine.

Um novo item de complementação permite que você gere uma expressão lambda onde um delegado TFunction ou argumento TFunctionRef seja esperado.

Se você estiver interessado em um IDE multiplataformas independente para desenvolvimento com Unreal Engine, considere o Rider. O suporte para Unreal Engine no Rider e no ReSharper C++ está alinhado, e você pode esperar as mesmas melhorias na atualização do Rider 2023.1.

Rastreamento de chamadas

O recurso Call tracking do ReSharper finalmente chegou ao ReSharper C++! Agora você pode visualizar cadeias de chamadas e navegar por elas na hierarquia das chamadas entrantes. Basta posicionar o cursor de texto em qualquer função e selecionar Inspect | Incoming calls no menu de contexto, ou pressionar Ctrl+Shift+Alt+A para invocar essa opção no menu Inspect This.

Na janela de resultado do rastreamento de chamadas, você pode dar um duplo clique em um item da hierarquia para navegar até a chamada correspondente no editor ou para expandir qualquer nó e verificar suas chamadas de entrada.

O rastreamento de chamadas de saída não é suportado no momento.

Análise de código

Introduzimos uma inspeção que assinala parâmetros de funções de tipos "custosos para copiar" passados pelo valor. Nesses casos, o ReSharper C++ sugere passar o parâmetro pela referência const. Por outro lado, a correção em Create function from usage agora preferirá passar parâmetros de tipos que usam poucos recursos para serem copiados pelo valor.

As novas inspeções de código a seguir alertarão você sobre código suspeito em potencial:

  • Uma inspeção identifica parâmetros não usados em modelos e aliases de tipos em escopos locais, além de inicializadores redundantes de classes-base.
  • Uma outra inspeção marca valores não usados de retorno em funções que retornem um código de erro HRESULT ou NTSTATUS.

Uma terceira inspeção informa quando falhar a dedução de argumentos de modelos de classes no C++ 17, permitindo que você adicione rapidamente os argumentos necessários através de uma correção.

O ReSharper C++ 2023.1 também inclui muitos aperfeiçoamentos no mecanismo de avaliação do tempo de compilação, como a avaliação de loops "for" baseados em faixas e um melhor suporte a uniões.

Refatorações

Agora você pode acessar facilmente a maior parte das refatorações a partir do menu Alt+Enter, além do pop-up dedicado Refactor This (Ctrl+Shift+R).

A nova correção Create parameter fornece um atalho conveniente para a refatoração Change signature. Quando você precisar adicionar um novo parâmetro a uma função que contenha outra, basta invocar a correção e digitar o tipo do novo parâmetro. A refatoração atualizará todas as declarações e usos de funções, alertando você sobre quaisquer conflitos.

Ficou mais simples chamar as refatorações Extract method e Change signature.

  • Se você precisar extrair uma função de uma só linha, não será mais preciso selecionar a linha inteira, porque agora a refatoração extrai toda a linha atual quando não houver uma seleção ativa.
  • Agora pode-se invocar Change signature com o cursor de texto posicionado em qualquer lugar na assinatura da função, em vez de apenas no nome da função, como antes.

Outras melhorias

Agora o ReSharper C++ tem suporte à macro __VA_OPT__, que foi introduzida no C++ 20 para ajudar a definir macros variádicas. Se a lista de argumentos de variáveis não estiver vazia, esta macro funcional especial será expandida até seus argumentos; caso contrário, não se expandirá.

Como padrão, os caminhos dos arquivos são colocados antes das pastas ao classificar diretivas #include. Se você preferir ter todos os "includes" em ordem alfabética, agora você pode desativar a nova opção Put files before folders.

Um novo modelo postfix permite que você faça rapidamente uma referência const com std::as_const ou AsConst em projetos do Unreal Engine.

Comentários iniciados em /* não são mais fechados automaticamente com */ como padrão. Você pode habilitar a inserção automática do fechamento do comentário com a nova opção de assistência à digitação Insert */ after /*.

Confira as Novidades do ReSharper para saber mais sobre as outras alterações introduzidas nesta versão. Por exemplo, agora o suporte a CSS está desativado como padrão.