Recursos do ReSharper C++

O ReSharper C++ torna o Visual Studio um IDE muito melhor para desenvolvedores C++, fornecendo análises de código dinâmicas, correções rápidas, pesquisa e navegação avançadas, preenchimento de código inteligente, refatorações, uma variedade de opções de geração de código e outros recursos para ajudar a aumentar a sua produtividade diária.

Análise de código

O ReSharper C++ começa a analisar o código assim que você abre o projeto no editor do Visual Studio e continua analisando novamente os arquivos enquanto os edita, detectando erros e possíveis problemas antes mesmo de compilar.

Correções rápidas

Estão disponíveis mais de 40 correções rápidas para resolver instantaneamente muitos dos issues de código detectados. Sempre que você vir uma lâmpada à esquerda do seu código, pressione Alt+Enter para aplicar uma solução rápida sugerida.

Por exemplo, quando uma variável não inicializada for detectada, você poderá inicializá-la imediatamente com o valor padrão. Outras correções rápidas permitem adicionar diretivas #include ausentes ou remover qualificadores redundantes em uma instrução específica ou em um escopo maior, como um arquivo ou até mesmo a solução inteira.

Generating code from usage in ReSharper C++

Criar a partir do uso

Outro benefício das correções rápidas é que você pode começar a usar classes, métodos, variáveis, propriedades e campos antes de os declarar. Quando o ReSharper C++ detecta um símbolo não declarado, ele sugere correções rápidas para gerar a declaração de símbolo correspondente com base no seu uso.

Localize issues no seu código

Localize issues no seu código

Para qualquer escopo, como um arquivo, projeto ou solução, você pode solicitar ao ReSharper C++ para exibir todos os problemas de código detectados em uma janela de ferramentas dedicada.

Find Code Issues funciona em segundo plano, o que permite que você continue editando ou navegando em seu código enquanto o ReSharper C++ executa sua análise e preenche a janela de ferramentas Inspection Results.

Assim que os resultados estiverem prontos, você poderá agrupá-los por vários critérios e pesquisar para encontrar tipos específicos de issues. Você também pode salvar e carregar relatórios dos resultados de Find Code Issues.

Análise de código C++ na linha de comando

Análise de código C++ na linha de comando

As inspeções de código do ReSharper C++ também estão disponíveis em InspectCode, uma ferramenta gratuita de linha de comando que permite executar inspeções do ReSharper fora do Visual Studio.

Para usar o InspectCode, baixe e descompacte o pacote de ferramentas de linha de comando e execute InspectCode.exe com o arquivo de solução como parâmetro. Para saber mais sobre o uso de InspectCode, leia este artigo.

Configurações do Clang-Tidy

Clang-Tidy

O ReSharper C++ integra-se perfeitamente ao Clang-Tidy, uma poderosa ferramenta de análise de código open source baseada no compilador Clang. A integração fornece verificações de código e correções rápidas.

Estilo de sintaxe

O ReSharper C++ inclui uma coleção de configurações de estilo de sintaxe que você pode usar para fazer o ReSharper seguir seu estilo de código escolhido e aplicá-lo em toda a sua base de código.

Estilo de sintaxe

Você pode personalizar suas preferências de estilo de sintaxe na página Code Editing | C++ | Syntax Style. O valor da opção selecionada será usado para geração de código e para aplicação de estilo de código.

Correção rápida

O ReSharper C++ realçará violações de estilo e oferecerá correções rápidas para ajudar a eliminá-las. Todas as correções rápidas de estilo de sintaxe podem ser aplicadas no escopo, incluindo em escopos locais como corpos de função ou definições de classe.

Aplicar estilo de sintaxe

Para impor o estilo de sintaxe escolhido, você pode usar a limpeza de código ou a ação dedicada Apply Syntax Style, que corrigirá problemas de estilo de sintaxe na seleção, em todo o arquivo atual ou em um conjunto de arquivos dependendo do contexto atual.

Refatorações

O ReSharper C++ fornece várias refatorações mainstream em grande escala, como Rename, Extract Method e Change Signature. Além disso, ele oferece dezenas de ações de contexto, que são transformações de código local disponíveis com um único atalho.

Refatoração para renomear no ReSharper C++

Renomear

Modificar o nome de uma classe ou macro pode causar muitos problemas quando isso é feito manualmente. É por isso que, quando você invoca a refatoração Rename, o ReSharper C++ cuida de todas as verificações necessárias.

Todas as modificações são realizadas automaticamente ou uma lista de conflitos pode ser resolvida manualmente para garantir que apenas as alterações necessárias e apropriadas sejam feitas.

Juntamente com os símbolos de código reais aos quais você a aplica, a refatoração Rename pode renomear arquivos relacionados (o arquivo de origem e o de cabeçalho) e o texto relacionado em comentários e na documentação, além de atualizar os usos em diretivas #include.

Refatoração para extrair método no ReSharper C++

Extract Method

A refatoração Extract Method ajuda a criar um novo método com base em um fragmento de código selecionado. O ReSharper analisa o bloco de código selecionado e detecta variáveis que podem ser convertidas em parâmetros do método ou que representam seu valor de retorno.

Refatoração para alterar assinatura no C++

Change Signature

A refatoração Change Signature permite aplicar uma ou mais alterações à assinatura de uma função. Todos os usos, implementações e substituições da função serão atualizados de acordo.

Refatoração de variável embutida em C++

Introduzir variável e variável inline

A refatoração Introduce Variable permite criar uma nova variável local com base em uma expressão selecionada, inicializá-la com a expressão e finalmente substituir todas as ocorrências da expressão no código por referências à variável recém-introduzida.

Por outro lado, Inline Variable substitui todas as ocorrências de uma determinada variável ou constante local pelo seu inicializador.

Refatoração para introduzir campo no ReSharper C++

Introduce Field

A refatoração Introduce Field ajuda a criar um novo campo com base em uma expressão selecionada, atribuir a expressão original ao campo em seu próprio inicializador ou construtor e substituir ocorrências.

Introduzir alias de namespace

A refatoração Introduce Namespace Alias ajuda a definir nomes de atalho para namespaces profundamente aninhados.

Assim que você invoca a refatoração, ela sugere a definição de um escopo ao qual você deseja introduzir um alias de namespace.

Refatoração para introduzir typedef e typedef inline no ReSharper C++

Introduzir typedef e typedef inline no ReSharper C++

A refatoração Introduce typedef permite criar rapidamente um typedef para o tipo de dados selecionado e substituir esse tipo de dados e todas as suas ocorrências pelo typedef recém-criado.

A refatoração Inline typedef faz o inverso: ela substitui um typedef existente pelo tipo de dados real.

Ações de contexto

Além das refatorações, o ReSharper C++ fornece um conjunto de ações de contexto: transformações de código local que geralmente ajudam a alternar entre opções alternativas de sintaxe. Semelhante a correções rápidas, elas são disponibilizadas quando você pressiona Alt+Enter.

Por exemplo, você pode substituir rapidamente auto por um tipo explícito ou substituir por auto. Outras ações de contexto ajudam a mesclar instruções if aninhadas, gerar instruções case ausentes ao alternar uma enumeração, substituir uma chamada de macro ou typedef etc.

Assistência para codificação

O ReSharper C++ estende as maneiras do Visual Studio de realçar a sintaxe e combinar partes estruturais do código, fornece sua própria implementação de conclusão de código e ajuda a visualizar a documentação disponível para qualquer símbolo C++.

Realce automático para pontos de saída

Realce de sintaxe e estrutura

O ReSharper C++ reconhece arquivos *.c, *.cc, *.cxx, *.cpp, *.h e *.hpp na sua solução e realça o código-fonte nesses arquivos de acordo com um esquema de cores que você pode modificar a qualquer momento.

Além disso, o ReSharper C++ realça vários itens correspondentes quando você coloca o cursor em um item em um par, seja delimitadores correspondentes, macros ou um especificador de formato e argumento em uma chamada de função printf.

Quando você colocar o cursor em um dos pontos de saída de uma função, loop ou instrução switch (return, throw, break etc.), o ReSharper C++ agora realçará automaticamente todas as outras saídas de função ou loop.

Preenchimento automático para símbolos C++ não incluídos no arquivo atual

Complementação de código

Em arquivos C++, você pode usar preenchimento de código ao escrever seu código, o que às vezes sugere opções de geração de código entre outras opções.

O preenchimento de código pode até sugerir símbolos que ainda não estão incluídos no arquivo atual. Quando você seleciona um símbolo como este na lista de conclusão, a diretiva #include correspondente é adicionada automaticamente.

Resumo da documentação

O pop-up Quick Documentation exibe a documentação com base nos blocos de comentários Doxygen sem forçar você a navegar até a definição de um símbolo: basta pressionar Ctrl+Shift+F1 no mapa de teclas padrão.

Mesmo se não houver documentação Doxygen disponível para um símbolo, Quick Documentation mostrará a assinatura do símbolo.

O ReSharper C++ também pode exibir dicas de ferramentas realçadas em sintaxe para elementos de código C++. As dicas de ferramentas exibirão tipos de função e variável, além de documentação.

Às vezes, os comentários da documentação XML em estilo C# também são usados para símbolos C++. O ReSharper C++ os exibe corretamente no pop-up Quick Documentation e na dica de ferramenta de informações rápidas.

C++/CLI

Suporte para C++/CLI

O C++/CLI é um conjunto de extensões de linguagem C++ da Microsoft para facilitar a interoperabilidade entre o código gerenciado e o código nativo. Com amplo suporte para linguagens gerenciadas e C++, é natural que o ReSharper também ofereça ajuda para escrever código em C++/CLI.

No código C++/CLI, você pode acessar as mesmas refatorações e ações de intenção que no código C++ puro. Também é possível navegar entre os mundos C# e C++/CLI.

Com o ReSharper C++, encontrar seu caminho através do código-fonte fica muito mais fácil. Basta procurar declarações, membros, chamadas de método ou membros de uma hierarquia de herança com atalhos simples.

Navigate To menu in ReSharper C++

Navegação contextual

Para todos os símbolos que possuem declarações e definições separadas, o ReSharper C++ exibe o ícone Navigate to declaration/definition à esquerda (Navigate to declaration/definition icon in ReSharper C++). Clique no ícone ou pressione Ctrl+B para alternar rapidamente entre a declaração e a definição correspondente.

Outras opções de navegação sensíveis ao contexto no ReSharper C++ incluem a navegação de um símbolo selecionado para seus usos, símbolos de base ou derivados.

Navegação insensível ao contexto no ReSharper C++

Ir para qualquer coisa

O ReSharper C++ oferece um conjunto de comandos de navegação sem contexto, incluindo Go to File, Go to Symbol, Go to File Member e Go to Everything.

Todos esses comandos oferecem suporte para pesquisa e filtragem baseadas em lowerCamelCase por caminho. Por exemplo, inserir fc movie no pop-up Go to Everything retorna a lista de arquivos e membros de arquivos que possuem a string movie em seus nomes e que pertencem ao projeto FollowerC ou FollowerConstants (ambos correspondentes a fc).

Visualizar hierarquias

O ReSharper C++ pode fornecer uma visão geral da hierarquia de herança da qual qualquer tipo específico faz parte. Você pode ver os tipos de base e os herdeiros do tipo selecionado e navegar até qualquer um deles com um único clique.

Além disso, o ReSharper C++ vem com uma visualização de hierarquia que serve para visualizar e ajudá-lo a descobrir dependências introduzidas por diretivas #include.

Encontre usos de um símbolo com o ReSharper C++

Encontrar usos

Use Find Usages para procurar todas as referências de um símbolo específico no código C++ da sua solução.

Assim que a pesquisa for concluída, as ocorrências encontradas serão exibidas em uma janela de ferramentas com opções de agrupamento e filtragem, além de um painel de visualização.

Estrutura de arquivo em C++

Estrutura do arquivo

Com o ReSharper C++, você pode visualizar a estrutura do documento atual usando a janela File Structure, que simplifica bastante a navegação em arquivos grandes.

À medida que você muda para outra guia do editor, a janela de ferramentas exibe a estrutura do arquivo correspondente.

To-do Explorer in ReSharper C++

To-do Explorer

A janela de ferramentas To-do Explorer permite exibir, agrupar e filtrar comentários que contêm um dos 3 padrões de tarefas pendentes (Bug, Todo e Not Implemented) e quaisquer padrões personalizados que você queira configurar.

Se você usar a licença completa do ReSharper Ultimate e tiver uma solução multilíngue, o To-do Explorer reunirá itens de tarefas em todos os idiomas com suporte: C#, VB.NET, C++, JavaScript, XAML, HTML etc.

Geração de código

O ReSharper C++ fornece uma variedade de maneiras de gerar código padrão. Além de declarar e definir símbolos com base em seus usos existentes, ele pode criar membros de tipo, blocos de código circundantes e quaisquer trechos de código que você normalmente precisa na sua base de códigos.

Pop-up de geração de código no ReSharper C++

Gere código comum

O ReSharper C++ oferece uma maneira rápida de gerar membros ausentes, substituindo membros, operadores de igualdade ou relacionais, definições baseadas em declarações existentes, construtores e funções hash e swap.

Basta pressionar Alt+Ins no editor de texto para chamar o menu Generate e ver todas as opções disponíveis.

Surround templates in ReSharper C++

Modelos de código e arquivo

O ReSharper C++ vem com 29 modelos personalizáveis. Alguns deles são trechos de código regulares, outros são usados especificamente para envolver seleções de código.

Você também pode usar e criar modelos de arquivos. Pressionar Ctrl+Alt+Ins ajuda você a adicionar rapidamente uma classe ao projeto em que você está trabalhando.

Assistência para estilo de código

Com o ReSharper C++, o formatador de código aprende com o código existente e suas preferências de formatação e estilo de código podem ser compartilhadas com os membros da sua equipe.

Code style assistance in ReSharper C++

Formatador de código

O ReSharper C++ permite configurar e aplicar regras de formatação de código que você prefere usar ao trabalhar em uma solução específica.

Como alternativa à busca por todas as opções de formatação de código disponíveis, você pode selecionar um bloco de código e configurar apenas os aplicáveis a esse bloco específico.

Configurações de estilo de código para inicializador de ponteiro padrão

Configurações de estilo de código

Para garantir um estilo de código consistente por toda a sua equipe, você pode salvar suas preferências de formatação e nomeação em um arquivo de configurações e compartilhá-la entre os seus colegas.

O ReSharper C++ também permite definir outras partes de um padrão de codificação de equipe, como a ordem dos modificadores e o valor preferido para inicializadores de ponteiro. Por exemplo, você pode especificar 0, nullptr ou NULL como o estilo inicializador preferido, e o ReSharper C++ respeitará sua escolha quando gerar novos inicializadores para você.

Use as opções do ReSharper (Options | Code Editing | C++ | Naming Style) para selecionar um dos estilos de nomeação C++ predefinidos: STL, Google, LLVM, CamelCase ou Microsoft.

Detectando o estilo do código

Detecte configurações de formatação

Muitas vezes, é muito mais fácil personalizar as configurações de formatação simplesmente detectando-as no código existente. Use o menu de configurações ReSharper | Edit | Detect formatting para que o ReSharper detecte as configurações de formatação de código. Você verá a janela de ferramentas com os valores detectados, que podem ser revisados e aplicados às configurações do ReSharper na sua máquina. Ou você pode salvá-los em uma camada de configurações compartilhadas pela equipe, para que outros desenvolvedores da sua equipe tenham a mesma configuração de formatação de código ao abrir a solução atual.

Saiba mais

Testes de unidade

Um executor de testes de unidade integrado ao Visual Studio oferece suporte às estruturas Google Test, Boost.Test, Catch e Doctest.

Executor de testes de unidade

O ReSharper C++ vem com um executor de teste de unidade no Visual Studio que suporta as estruturas Google Test, Boost.Test, Catch e Doctest.

Você pode executar e depurar testes de unidade, bem como adicionar testes a diferentes sessões, diretamente do editor de texto, através do menu contextual Alt+Enter.

O ReSharper C++ fornece as janelas de ferramentas Unit Test Explorer e Unit Test Sessions para exibir, agrupar, filtrar e executar testes de unidade, bem como para criar e gerenciar sessões de testes de unidade.

Unreal Engine

Se você está criando jogos baseados no Unreal Engine, aproveite o suporte específico para Unreal Engine no ReSharper C++.

Convenção de nomenclatura do UE

Convenção de nomenclatura do UE

O ReSharper C++ acomoda a Convenção de nomenclatura do UE em todas as suas ações, incluindo as refatorações "Introduce Variable" e "Rename", geração de código para getters e setters e muitas outras opções. Ele também fica de olho nos nomes que você usa na sua base de código. Ele realça inconsistências com a convenção de nomenclatura do UE executando inspeções Inconsistent UE naming.

Saiba mais

Análise do UE

Análise de códigos do UE

Algumas verificações de análise de código também estão disponíveis para o código baseado em UE, especialmente visando as macros de reflexão do UE ausentes ou incorretamente definidas:

  • A declaração UCLASS deve herdar publicamente UObject ou uma classe derivada dela.
  • A classe marcada por UCLASS deve herdar apenas uma classe derivada de UObject ou UObject diretamente.
  • UCLASS deve ser uma classe / USTRUCT deve ser uma estrutura.
  • UInterface deve estar vazio.
  • Chamada de macro UCLASS / UINTERFACE / USTRUCT ausente na declaração do UE de classe / interface / estrutura.
  • Classes do UE não podem ser declaradas dentro de outra classe.
  • A chamada de macro UPROPERTY / UFUNCTION antes da declaração não tem efeito.
  • Objetos armazenados em membros que não pertencem à propriedade podem ser coletados como lixo a qualquer momento.
UnrealHeaderTool

UnrealHeaderTool

O ReSharper C++ oferece integração perfeita com o UnrealHeaderTool para ajudar você a detectar mais problemas com metadados de classes do Unreal Engine diretamente no editor. Ao trabalhar com um projeto Unreal Engine, o ReSharper C++ executa automaticamente o UnrealHeaderTool no arquivo que você está editando e exibe quaisquer erros ou avisos, assim como em outras inspeções. Veja a integração com o UnrealHeaderTool em ação.

Preenchimento de especificadores de reflexão do UE

Preenchimento de código para especificadores de reflexão

Para ajudá-lo a trabalhar facilmente com as macros de reflexão do Unreal Engine, o ReSharper C++ oferece preenchimento para especificadores de reflexão dentro de macros de reflexão.

Documentação sobre especificadores de reflexão do UE

Documentação de código para especificadores de reflexão

A documentação interna para especificadores de reflexão do UE é mostrada no pop-up de Documentação Rápida (Ctrl+Q) quando o cursor está localizado em um especificador.

Navegação RPC

Suporte para chamadas de procedimento remoto do UE

O ReSharper C++ identifica RPCs pelas palavras-chave Client, Server ou NetMulticast na instrução da declaração UFUNCTION. Para essas funções, o ReSharper C++ está ciente de que uma função _Implementation deve ser gerada, bem como uma função _Validate se WithValidation for definida. Ele pode gerar ambos se eles estiverem ausentes ou apenas um se apenas um estiver ausente.

Ao navegar até uma definição, ambas as funções (_Validate e _Implementation) serão sugeridas. Como alternativa, essas opções também estão disponíveis no menu Alt+Enter também, como "Funções do UE relacionadas".

Saiba mais

Verificações de cabeçalho geradas pelo UE

Importação automática e cabeçalhos gerados

Quando você usa um símbolo que não está disponível no escopo atual, o ReSharper C++ o realça em vermelho e sugere a adição do #include ausente, quando possível. Quando o #include estiver ausente em um arquivo de cabeçalho, ele será inserido antes de .generated.h, que deve ser o último na lista de inclusões. O código #include incorretamente colocado é realçado pela inspeção correspondente.

A refatoração Rename em projetos do Unreal Engine atualiza a diretiva de inclusão .generated.h correspondente com os prefixos A, F, E, T, S e U.

Geração de código do UE

Geração de código

O "novo" modelo postfix para UCLASSes se expande para uma chamada de função de fábrica apropriada (que registrará o objeto criado no coletor de lixo). Modelos ativos com os nomes correspondentes estão disponíveis para ajudá-lo a gerar rapidamente USTRUCT/UCLASS/UENUM/UENUMCLASS.

Arquivos USF

Arquivos USF

Os arquivos USF do Unreal Engine são baseados em HLSL e contêm o código de sombreamento de várias plataformas. Esses arquivos geralmente incluem caminhos de arquivos virtuais, e o ReSharper C++ pode trabalhar com eles e oferecer suporte a todas as ações usuais.

HLSL

SpatialOS GDK

O SpatialOS Game Development Kit é um fork do Unreal Engine 4 que ajuda você a executar e gerenciar jogos online na nuvem. O ReSharper C++ reconhece CrossServer, SpatialType, NonSpatialType e outros especificadores SpatialOS. Saiba mais.

HLSL

HLSL

O ReSharper C++ fornece suporte inicial para HLSL (High-Level Shading Language). O ReSharper C++ realça o código HLSL de acordo com seu esquema de cores padrão e exibe dicas de inserção e dicas de ferramentas para elementos de código com informações de tipo e documentação. Você também pode procurar e navegar rapidamente por estruturas, funções ou parâmetros em toda a sua solução, arquivos referenciados e bibliotecas padrão. E, para melhorar ainda mais a experiência com HLSL, o ReSharper C++ oferece preenchimento de código inteligente, delimitadores correspondentes de inserção automática e muito mais.

HLSL

Todo o poder da análise de fluxo de controle do ReSharper chega aos arquivos de shader HLSL, incluindo avisos sobre código inacessível, variáveis não inicializadas, saltos de fluxo de controle redundantes, desvios condicionais e muito mais.

Baixar

Avaliação gratuita por 30 dias disponível