Novidades no ReSharper C++

O ReSharper C++ 2024.1 melhora o suporte a módulos do C++20 e implementa chamadas de saída no Call Tracking. As melhorias na assistência à codificação incluem, dentre outras, aperfeiçoamentos na refatoração Change Signature e suporte atualizado a comentários de documentação. Para desenvolvedores no Unreal Engine, o ReSharper C++ 2024.1 traz o suporte ao framework Slate UI e a complementação de caminhos de ativos no código em C++.

Baixar

Avaliação gratuita por 30 dias disponível

Suporte a módulos do C++ 20

Graças ao processo atualizado de descoberta de módulos, agora o ReSharper C++ oferece suporte a unidades internas de partições, ou seja, unidades de partições de módulos que não contribuem para a interface externa desses módulos. Em outras palavras, são partições de módulos sem uma declaração de export module associada.

Reformulamos a representação interna dos módulos do C++ 20 exportados, para facilitar referências transitivas a entidades importadas de outros módulos. Antes, essas entidades eram reexportadas a partir do módulo que as houvesse importado. Esperamos que esta mudança reduza significativamente o impacto dos módulos exportados e melhore o desempenho em projetos que utilizem módulos do C++ 20.

Unreal Engine

O ReSharper C++ 2024.1 introduz o suporte ao framework Slate UI, do Unreal Engine. Você pode confiar no formatador de código e na assistência à digitação do ReSharper para formatar o seu código no Slate de acordo com as convenções do Unreal Engine. Também foram atualizados recursos como Go to declaration, Find Usages e Rename, que agora compreendem a sintaxe declarativa do Slate.

A integração inteligente do ReSharper C++ com o recurso Blueprint continua, com o suporte à adição de core redirects ao renomear instâncias UENUM, além da complementação de caminhos de ativos nos nomes de recursos em código C++.

Agora há suporte a interfaces em HLSL usadas para vinculação dinâmica de shaders no código destes.

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 2024.1.

Chamadas de saída em Call Tracking

Agora o Call Tracking do ReSharper tem suporte à navegação através de cadeias de chamadas de saída em C++, além do suporte já existente ao rastreamento de chamadas de entrada. Para explorar chamadas de saída, posicione o cursor em qualquer função e selecione Inspect | Outgoing calls no menu de contexto. Alternativamente, você também pode pressionar Ctrl+Shift+Alt+A para invocar este recurso a partir do menu Inspect This.

Melhorias em Change Signature

Agora você pode alterar facilmente o tipo de um parâmetro de função entre um ponteiro, uma referência e um tipo de valor, usando Change Signature. O ReSharper automaticamente atualizará os usos dos parâmetros no corpo da função e ajustará os argumentos das funções em seus locais de chamada, removendo referências ou adicionando operadores de endereço onde necessário.

Agora, quando Change Signature é invocado em uma função que pode potencialmente ter usos em código dependente, a refatoração permite que você verifique as alterações e confirme quais usos precisam ser atualizados.

Agora você também pode especificar argumentos-padrão para novos parâmetros de função que tenham sido adicionados através de Change Signature.

Estas são algumas outras atualizações notáveis em Change Signature:

  • Melhor tratamento de modelos variádicos de funções
  • Atualização correta de argumentos de funções no caso de locais de chamada dentro de chamadas a macros.
  • Agora Change Signature preserva tipos de array e o especificador de tipo int em tipos unsigned int.

Comentários de documentação

Agora você pode personalizar o estilo dos comentários de documentação gerados, sem precisar editar um modelo dinâmico. Para configurar o estilo dos comentários de documentação, vá até Settings | Code editing | C++ | Code generation no ReSharper.

O JetBrains Grazie é o novo verificador gramatical e ortográfico incorporado ao ReSharper, introduzido na versão 2023.3. Na versão 2024.1, verificações ortográficas pelo Grazie também estão disponíveis dentro dos comentários de documentação em C++.

Agora a refatoração Change Signature mantém os comandos @param sincronizados com a lista de parâmetros de função. Essa refatoração exclui os comandos @param correspondentes a parâmetros removidos, adiciona comandos para novos parâmetros e reorganiza os comandos existentes para coincidirem com a ordem atualizada dos parâmetros incluídos.

Análise de código

Com base nos últimos resultados da extensa bateria de testes de ferramentas de refatoração para C++ mantida por Richard Thomson, o ReSharper C++ continua superando o desempenho das outras ferramentas, passando no maior número de casos de teste. Como parte do nosso trabalho constante para melhorar a qualidade das sugestões do ReSharper, no ReSharper C++ 2024.1 corrigimos vários problemas identificados em versões anteriores pela suíte de testes do Richard. Por exemplo, agora a correção rápida Create constructor from usage adiciona um construtor-padrão quando necessário.

Agora o ReSharper C++ 2024.1 sugere remover inicializadores idiomáticos redundantes com o valor zero na inicialização agregada. Várias novas inspeções encontram diversos problemas com membros estáticos de dados, como especificadores inline redundantes em membros de dados static constexpr.

A limpeza de código adiciona novos itens para remover especificadores de acessibilidade redundantes e criar classes sem herdeiros final. Agora Apply ‘auto’ style manipula variáveis globais e membros de classes, além de variáveis locais.

Antes, se você quisesse suprimir uma inspeção em um escopo específico, você podia usar comentários // ReSharper disable, específicos do ReSharper. Além disso, o ReSharper C++ 2024.1 reconhece os comentários NOLINT, NOLINTNEXTLINE e NOLINTBEGIN ... NOLINTEND usados pelo clang-tidy.

Formatação de código

O ReSharper C++ 2024.1 introduz várias novas opções de formatação:

  • Break line after goto labels e Indent goto labels, que melhoram a formatação de declarações com rótulos.
  • Configurações que controlam as quebras de linhas dentro de enumerações, em Arrangement of enumerations.
  • Empty braces formatting agora inclui a opção Do not change.

Agora, ao usar uma configuração .clang-format, o formatador do ReSharper respeita as configurações DisableFormat e IndentAccessModifiers. O estilo de clang-format nativo do GNU também já tem suporte.

Confira as Novidades no ReSharper para saber mais sobre as outras alterações introduzidas nesta versão.

Baixar

Avaliação gratuita por 30 dias disponível

ReSharper C++ 2023.3

O AI Assistant já saiu da versão prévia Disponibilidade Geral

Agora o AI Assistant da JetBrains está em disponibilidade geral, com diversos recursos novos e melhorados para aumentar a sua produtividade. Nosso último conjunto de melhorias inclui uma melhor sensibilidade ao projeto nas ações de IA e uma biblioteca de prompts.

Use o AI Assistant no ReSharper C++ como recurso suplementar com uma assinatura do JetBrains AI Service.

Atualizações para o HLSL e o Unreal Engine

O HLSL 2021 introduziu o suporte a modelos semelhantes aos do C++ para funções e tipos de dados. A última atualização do ReSharper C++ traz suporte total a modelos do HLSL.

O ReSharper C++ 2023.3 traz o suporte ao tipo incorporado RayQuery do HLSL e melhora a complementação de código sugerindo as sinalizações correspondentes.

Uma nova inspeção ajuda você a não cair em uma das armadilhas comuns da macro auxiliar AddDynamic. Agora você receberá um aviso quando uma função delegada dinâmica não estiver marcada com a macro UFUNCTION.

Se você ainda perceber que escreve código boilerplate de vez em quando, não esqueça que está disponível o atalho Alt+Insert para gerar automaticamente membros de tipos comuns. No ReSharper C++ 2023.3, refinamos a geração de funções de hash para seguirem as convenções do Unreal Engine.

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.3.

Suporte a C e C++

Se você precisar verificar se algum atributo específico está disponível na versão atual do padrão ou do compilador, o teste de recursos do C++ 20 está aí para resolver o problema. Usando __has_cpp_attribute(operand) nas condições do pré-processador, você pode testar se o compilador reconhece o atributo referenciado por aquele operando. Agora o ReSharper C++ trata __has_cpp_attribute corretamente, para dar um melhor suporte a anotações de atributos nas bibliotecas-padrão do C++.

Introduzimos o suporte para o pragma de pacotes usado com a palavra-chave __pragma. Às vezes, a sintaxe __pragma (pack) é usada dentro de definições de macros, já que não é possível usar diretivas #pragma nessas definições. Em casos como esse, agora o ReSharper C++ calcula corretamente o tamanho das estruturas empacotadas, para que você possa confiar nos resultados da análise de código.

O ReSharper C++ adiciona o suporte a vários recursos do C:

  • O qualificador de tipos restrict do C 99, que pode ser usado em declarações de ponteiros.
  • Dedução de tipos, constexpr e nullptr do C23.

Também introduzimos o suporte a várias novas funções intrínsecas do clang, como __is_const(), __is_member_pointer() e outras, para que o ReSharper C++ trabalhe melhor com código multiplataformas.

Para o desenvolvimento multiplataformas com C e C++, você pode experimentar uma versão inicial de demonstração do IDE stand-alone CLion Nova. Ele usa o ReSharper C++ e é absolutamente gratuito para usar neste estágio — basta se registrar, começar a programar e nos mandar o seu feedback!

Verificação gramatical e ortográfica

O JetBrains Grazie é o novo verificador gramatical e ortográfico embutido no ReSharper. O Grazie tem suporte a mais de 20 idiomas e detecta erros de linguagem natural dentro das linguagens de programação com suporte no ReSharper (C#, C++, VB.NET), em linguagens de marcação (HTML, XML, XAML) e em comentários. Para adicionar outros idiomas ao Grazie, vá até Options | Grammar and Spelling | General no ReSharper.

Observe que no momento, a verificação gramatical não está disponível em comentários do doxygen.

Trabalho com código inativo

Ao usar código específico de uma plataforma ou configuração, pode ser comum você se ver editando blocos de código atualmente inativos dentro de branches condicionais do pré-processador. Anteriormente, a complementação em código inativo oferecia apenas macros. No ReSharper C++ 2023.3, melhoramos a complementação de código nessas situações, incluindo símbolos do escopo global.

Find Usages agora encontra possíveis usos em código inativo e em corpos de macros. Anteriormente, se você quisesse encontrar esses usos, teria que usar Find Usages Advanced e procurar ocorrências exatas. Agora os resultados de Find Usages incluem usos potenciais em corpos de macros e código inativo, como padrão. Esses usos são agrupados em seções separadas, para distingui-los de usos em código ativo.

Análise de código

Você pode usar atributos do C++ específicos do ReSharper para que este analise a sua solução com mais precisão e insight. No ReSharper C++ 2023.3, adicionamos os prefixos [[jetbrains::...]] e [[rscpp::...]] aos atributos já existentes [[jetbrains::format]], [[jetbrains::guard]] e [[jetbrains::has_side_effects]].

O novo atributo [[jetbrains::pass_by_value]] permite a você suprimir a inspeção de parâmetros de funções Pass value by const reference. Saiba mais.

Introduzimos um conjunto de inspeções para o uso incorreto da palavra-chave export em módulos do C++ 20. Agora o ReSharper C++ sugere remover "export" quando esta declaração já estiver dentro de outro "export" ou quando ela não fizer parte de uma unidade de interface de módulo e não puder ser exportada. Se você tentar criar um modelo com a declaração export, em vez de exportar a declaração do modelo, você também receberá uma sugestão de mudar a declaração de lugar.

Atualizamos o binário clang-tidy incluído para o Clang 17, trazendo as atualizações da última versão da LLVM.

Algumas verificações do clang-tidy geram mais detalhes na saída, além do texto de alerta. Agora o ReSharper C++ mostra essas notas adicionais na dica de ferramenta.

Uma nova inspeção alerta sobre o uso de literais com vários caracteres. Esses literais têm suporte condicional, com valores definidos pela implementação, e devem ser usados com cautela em código que se queira portar.

Agora o ReSharper C++ sugere uma correção rápida para remover operadores condicionais redundantes e simplificar expressões condicionais ternárias.

Assistência para codificação

O menu Alt+Insert Generate ajuda você a criar código reutilizável rapidamente. No ReSharper C++ 2023.3, adicionamos à lista uma nova ação, permitindo que você gere um destrutor.

Ao ser invocada em uma classe polimórfica, essa ação usará configurações de estilo de sintaxe para inserir os especificadores virtual e/ou override necessários. Você pode configurar o estilo do corpo do destrutor gerado na página de opções Code Editing | C++ | Code Generation.

As diretivas #pragma region e #pragma endregion permitem que você especifique um bloco dobrável de código. De forma semelhante a outras diretivas de correspondência, agora você pode saltar entre as duas usando a ação Go to Declaration em uma diretiva #pragma ou uma nova dica de inserção com o nome da região.

Além disso, agora a janela File Structure permite que você dobre regiões e navegue até os blocos correspondentes de código, de forma conveniente.

No código em C, deve-se usar void na lista de parâmetros de uma função para indicar que aquela função não aceita nenhum argumento. Agora o ReSharper C++ preserva esse void especial quando você invoca a refatoração Extract method ou Change signature, gera uma definição para a função ou cria uma nova função a partir de seu uso.

Agora as dicas de inserção de referências têm um texto [>>] separado, para que você possa identificar referências de encaminhamento em um relance.

A nova ação Generate inline definitions permite que você gere rapidamente os corpos de várias funções ao mesmo tempo. Essa nova ação é semelhante à já existente Generate definitions e fica disponível quando se selecionam várias declarações de funções ou um nome de classe no editor.

Quando você invoca a refatoração Introduce variable ou Introduce field em uma expressão aninhada, agora o ReSharper C++ permite que você escolha explicitamente a expressão-alvo, em vez de usar automaticamente a expressão mais externa.

Para melhorar a experiência de navegação no código, agora os símbolos que se originaram de substituições de macros ficam ocultos de Go to e da janela File Structure. Isso é útil com macros que introduzem muitos símbolos auxiliares durante sua expansão, como declarações de casos de testes em frameworks populares de testes de unidades.

Formatação de código

O ReSharper C++ 2023.3 introduz várias novas opções de formatação:

  • Quebra de linha antes de -> em tipos de retorno à direita.
  • Quebra de linha depois de -> em tipos de retorno à direita.
  • Espaços dentro de blocos vazios.
  • Permitir comentários depois de {.

Também atualizamos o binário do clang-format incluído para o Clang 17 e implementamos o suporte à configuração InsertNewlineAtEOF do clang-format, tanto ao importar as configurações do formatador de um arquivo de configuração .clang-format quanto ao usar o clang-format em vez do formatador incorporado.

Confira as Novidades no ReSharper para saber mais sobre as outras alterações introduzidas nesta versão.

ReSharper C++ 2023.2

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.