Novidades no ReSharper 2021.3

O ReSharper 2021.3 suporta o recentemente lançado Visual Studio 2022. A análise de código melhora o suporte ao C# 10, incluindo namespaces com escopo por arquivo, diretivas 'using' globais, tipos de referências anuláveis e suporte geral ao C#. Esta versão também ganhou o Find Usages para operadores de conversão implícita definidos pelo usuário, novas marcas de medianiz e um recurso Copy Code Reference significativamente melhorado.

Baixar

Avaliação gratuita por 30 dias disponível

Suporte para o Visual Studio 2022

O ReSharper agora suporta a versão de lançamento do novo Visual Studio 2022. Você terá acesso ao mesmo rico conjunto de recursos que você já tinha se acostumado a ter em outras versões do Visual Studio. Mas como o Visual Studio 2022 é um processo x64, a quantidade máxima de memória que pode ser alocada a ele não tem mais limite. Como resultado, todos os recursos do ReSharper funcionam mais rapidamente.

Para usar o ReSharper com essa nova versão do Visual Studio, garanta que o ícone do VS2022 esteja selecionado no instalador do dotUltimate 2021.3.

C# 10

O C# 10 foi lançado recentemente e o ReSharper continua acrescentando o suporte a mais recursos do C# 10. Hoje temos o prazer de anunciar o suporte a namespaces com escopo por arquivo, ao 'using' global, ao atributo CallerArgumentExpression, ao conceito de "manipuladores de strings interpoladas" e a lambdas do C# 10.

Vamos começar com os namespaces com escopo por arquivo. Além de dar suporte à nova sintaxe propriamente dita, acrescentamos uma nova opção 'Syntax Style' que permite a você selecionar o estilo desejado (ReSharper | Options | Code Editing | C# | Syntax Style | Code body | Namespaces). Quando você escolher um estilo, o ReSharper mostrará o resultado de inspeções para código que terá que ser mudado para seguir o estilo e sugerirá as correções rápidas apropriadas. Você pode propagar as correções por todo o projeto ou até por toda a solução com apenas um clique.

Agora há duas ações de contexto que permitem a você voltar o seu código ao estilo anterior de sintaxe: Convert to file-scoped namespace e Convert to block-scoped namespace.

Saiba mais em: Namespaces com Escopo por Arquivo

Agora vamos dar uma olhada rápida nos 'using' globais. A análise de código do ReSharper é sensível a instâncias de 'using' com a palavra-chave global e usa essas instâncias para resolver os símbolos corretamente em todos os arquivos de código do projeto. O ReSharper também avisará se um 'using' global tiver sido colocado no lugar errado em um arquivo.

O ReSharper realçará como não utilizado instâncias de 'using' global que não estiverem sendo usadas no projeto e oferecerá uma correção rápida para remover a declaração.

O ReSharper traz um amplo suporte ao atributo CallerArgumentExpression, incluindo complementação e inspeções de código, para ajudar você a usar esse atributo corretamente.

Saiba mais em: CallerArgumentExpression

O C# 10 introduziu o novo conceito de "manipuladores de strings interpoladas". Para os usuários finais, isto significa que expressões de interpolação de strings geralmente funcionam mais rapidamente no .NET 6 e que os novos manipuladores também tornam possível usar valores Span<char> em lacunas de interpolação. Para os programadores de bibliotecas, este recurso permite controlar se expressões de interpolação de strings são ou não convertidas em strings. O ReSharper 2021.3 reconhece o padrão de "manipuladores de strings interpoladas" no código da biblioteca e agora pode sugerir usar expressões de interpolação de strings em mais lugares com segurança.

O ReSharper ajuda você a obter o melhor desempenho com record structs, sugerindo que você os marque como readonly. Para evitar a aglomeração desnecessária de declarações de tipo com modificadores, essa inspeção só é mostrada quando o tipo record tem membros de instância não mutáveis e não há mutações por meio de setters na solução (requer a análise habilitada em toda a solução).

O C# 10 permite que você simplifique um pouco a sintaxe da correspondência de padrões por permitir o acesso com a sintaxe de pontos em vez do aninhamento de padrões de objeto.

O ReSharper oferece a inspeção correspondente a essa sintaxe com uma correção rápida, e também uma ação de contexto para desfazer essa correção rápida.

E por último, mas não menos importante:

  • Melhoramos o suporte a lambdas no C# 10: não se espera que haja nem código vermelho, nem erros de falso positivo nos projetos da API Mínima do .NET 6. Como bônus, o ReSharper também ajuda você a usar a sintaxe correta e a acrescentar parênteses quando eles forem esperados pelo compilador.
  • O ReSharper agora aceita “Program” como nome de classe gerado válido para código com declarações top-level.
  • O suporte inicial para membros static abstract em interfaces já está disponível. A análise do código considera essa construção válida, o que significa que você não terá mais que lidar com código vermelho. O recurso Generate missing members é sensível a membros do tipo static abstract e lida com eles corretamente. Esta versão também inclui marcas de medianiz herdadas e a capacidade de navegar até símbolos de base ou derivados.

Tipos de referência anuláveis

Não é raro que as pessoas copiem trechos de código de outros recursos, como stackoverflow.com. Atualmente, com os tipos de referência anuláveis disponíveis no C#, algumas amostras de código já incluem a sintaxe NRT. Mas e se você não tiver a NRT ativada na sua solução? O ReSharper tem duas novas correções rápidas para ajudar você a se livrar dessa sintaxe depois de incorporar esse código ao seu projeto: Replace with JetBrains.Annotations attributes e Remove nullable annotations without ‘#nullable’ context.

Ocasionalmente, pode haver discordâncias na possibilidade de ser anulável entre os argumentos de tipo e suas restrições de anulação. Agora há correções rápidas para esses casos, incluindo as que:

  • Removem anotações passíveis de serem anuladas dos argumentos de tipo.
  • Removem restrições notnull dos argumentos de tipo.
  • Permitem valores anuláveis em parâmetros de tipo.
  • Proíbem valores anuláveis em parâmetros de tipo usados como argumentos de tipo.

Está disponível uma correção rápída em massa para anotações em parâmetros com valores-padrão anuláveis em todo um arquivo, projeto ou solução.

Há também uma correção rápida em massa que torna um parâmetro anulável se for verificado se ele é nulo dentro de um método.

Análise de código

Acrescentamos algumas novas correções rápidas e uma ação de contexto para funções locais ou anônimas do tipo static com closures:

  • A correção rápída Allow closures remove modificadores static de uma função local ou anônima contendo closures.
  • A correção rápida Pass closure as a parameter promove closures a parâmetros em funções locais estáticas.
  • A ação de contexto Pass closure as a parameter promove closures a parâmetros em funções locais não estáticas.

Há uma nova inspeção, Simplify string interpolation, com uma correção rápida correspondente, que substitui as chamadas de método .PadLeft() e .PadRight() com expressões de alinhamento dentro de espaços reservados para strings interpoladas.

Além de adicionar o novo record struct do C#10, também aprimoramos nosso suporte para structs regulares. Muitos desenvolvedores ainda usam classes com inicializadores de objetos em seus DTOs. Agora você pode transformar rapidamente todos esses usos em construtores com parâmetros. Isso pode ser feito na própria declaração record ou de qualquer inicializador de objeto. Observe que DTOs que definem um construtor com atribuição de propriedades também podem ser convertidos.

Já faz algum tempo, o ReSharper alerta a respeito de bloqueios inconsistentes em campos. Nesta versão, acrescentamos uma inspeção complementar que também leva em conta a ordem de vários recursos bloqueados, informando a você sobre possíveis ciclos de deadlock.

Agora o ReSharper verifica a plausibilidade de expressões aritméticas quanto a tipos adicionais de números inteiros, como byte, sbyte, short, ushort, uint, long, ulong e enum. Isto ajuda você a evitar branches inalcançáveis no código.

Para tornar condições longas e complexas mais fáceis de ler, acrescentamos o realce de elementos de condições. São realçados grupos de operadores lógicos, como cadeias de && e || no C#.

Desempenho da análise de código

Reduzimos o tempo que demora para executar correções rápidas e ações de contexto quando invocadas para uma pasta, projeto ou solução.

Se a opção Solution-Wide Error Analysis (SWEA) estiver ativa em Monitor warnings, o ReSharper agora usará os resultados da SWEA para simplesmente pular os arquivos sem os problemas correspondentes, reduzindo em muito o tempo gasto procurando problemas a corrigir.

Também temos boas notícias para aqueles que não executam a SWEA nas suas soluções! O ReSharper agora usa todos os núcleos de CPU disponíveis para executar a análise de código em paralelo. Isto reduz o tempo total de execução de correções rápidas e ações de contexto de escopo.

 

Melhoramos significativamente o desempenho do daemon em arquivos que contêm métodos muito grandes, tais como:

  • Métodos com expressões condicionais grandes ou aninhadas, expressões de tuplas pu expressões switch.
  • Métodos com muitas verificações de tipo, quando tipos de referência anuláveis estiverem desativados.
  • Métodos com muitos acessos de indexação, quando tipos de referência anuláveis estiverem ativados.
  • Métodos com um número muito grande de closures, quando tipos de referência anuláveis estiverem ativados.

Navegação e Find Usages

Novas marcas de medianiz

Adicionamos algumas novas marcas de medianiz para ajudar você a navegar rapidamente através da estrutura de herança de uma classe, interface ou struct. Os novos ícones ↑O e ↑I mostram respectivamente quando uma entidade de código herda ou implementa outra classe ou interface. Se a herança dessa entidade de código for complexa, ao se clicar em um desses ícones aparecerá um menu com todos os ancestrais acima daquela entidade, até o topo da hierarquia de herança. Se uma classe implementar ou herdar uma interface e uma classe ao mesmo tempo, o ReSharper mostrará um ícone ↑IO na medianiz.

Além disso, nesta versão ativamos por default as marcas de medianiz para membros de classes. O ReSharper adicionará o ícone ↓O na medianiz à esquerda de um membro de classe se este for sobreposto em classes derivadas. Clicar nesse ícone:

  • Fará você navegar até um membro de uma classe derivada que sobrepõe este membro.
  • Mostrará um menu com uma lista dos membros de outras classes que sobrepõem este membro.

Find Usages para operadores de conversão implícita definidos pelo usuário

Agora você pode chamar o Find Usages para operadores de conversão implícita definidos pelo usuário! A implementação deste recurso é baseada no mecanismo usado para dicas de conversão de tipos.

Este recurso permite que você descubra se operadores de conversão implícita definidos pelo usuário estão sendo usados ou não, e depois navegar até os blocos de código com as conversões.

Tenha em mente que este algoritmo não é rápido e pode demorar bastante para calcular os resultados e mostrá-los.

Navegação até implementações de interface em modo de depuração

Quando você chamar Go to Type of Symbol numa variável ou parâmetro de um tipo de interface em modo de depuração, o ReSharper levará você até a exata implementação desse tipo que estiver sendo usada no frame atual, em vez de até a declaração da interface.

Injeções de linguagens

Agora você pode marcar qualquer parâmetro, campo ou propriedade de uma função com o atributo de anotação [LanguageInjection]. O ReSharper considerará um valor de string de uma entidade de código marcada como sendo um fragmento de código em uma linguagem especificada. Podem ser injetadas as seguintes linguagens: CSS, HTML, JavaScript, JSON e XML. Assim que você adicionar o atributo, você obterá realce de sintaxe, complementação de código e outros recursos de maneira apropriada dentro da string. Você precisa adicionar a última versão do JetBrains.Annotations ao seu projeto para poder usar o atributo LanguageInjection.

Copy Code Reference

Esta versão traz muitas mudanças ao recurso Copy FQN. Em primeiro lugar, o recurso ganhou um novo nome: Copy Code Reference. Achamos que o novo nome reflete melhor o que este recurso faz.

Adicionamos novas funções se você usar o Git como seu sistema de controle de versões. Há elementos relacionados ao GitHub no pop-up do Copy Code Reference já como padrão para projetos clonados a partir do GitHub. Esses elementos geram um link apropriado para um repositório do GitHub, para que o código possa ser imediatamente compartilhado com qualquer pessoa.

Para outros repositórios que não o GitHub, agora você pode adicionar modelos personalizados de URI às suas configurações do ReSharper. Todos esses modelos aparecerão no pop-up Copy Code Reference. Um modelo de URI pode consistir de vários espaços reservados predefinidos, como Nome da Branch Atual, Nome do Arquivo, Número da Linha Atual, etc.

Por fim, o próprio pop-up foi significativamente reformulado. Seu design, ícones e formatação são totalmente novos.

Formatação

  • Adicionamos uma opção para indentar chaves { } de lambda ou padrões de propriedade dentro de condições de declarações, como dentro de if(), while(), etc.
  • Adicionamos uma opção para alinhar condições de declarações dentro dos parênteses em if(), foreach(), etc. Essa opção está ATIVA (ON) por default.
  • Adicionamos opções para dobrar, cortar, alinhar e desindentar padrões binários como, por exemplo, x is Foo or Bar or Baz.

Criação de novas classes do Unreal Engine

Com o ReSharper C++ 2021.3, você não precisa mais passar para o Unreal Editor para criar uma nova classe – agora, todos os modelos predefinidos de classes do Unreal Engine estão disponíveis na lista de modelos de arquivos do ReSharper.

Para criar uma nova classe, vá até o Solution Explorer e clique com o botão direito na sua pasta de projeto preferida para abrir o menu Add (ou use Ctrl+Alt+Insert). Depois de escolher um modelo do Unreal Engine na lista e dar um nome à sua nova classe, o ReSharper C++ gerará o cabeçalho e os arquivos de fonte com o código do modelo nas pastas apropriadas, dependendo de o contexto ser público ou privado.

Novidades no ReSharper C++ 2021.3

Suporte para C++20 ainda melhor

Você pode usar inicializadores designados do C++ 20 para gerar rapidamente código reutilizável na inicialização de aggregates. Basta selecionar o item correspondente da lista de complementação para inserir designadores para os membros de classes de dados e depois informar os valores iniciais.

Além disso, o ReSharper C++ 2021.3 traz inspeções para ajudar você a adotar novas funções de biblioteca para apagar elementos de qualquer container-padrão, verificando se um elemento existe em um container associativo e criando ponteiros inteligentes com uma valores iniciais predefinidos.

Novidades no ReSharper C++ 2021.3

Suporte a arquivos AnalyzerConfig

A partir do SDK do .NET 5, você pode usar arquivos globais AnalyzerConfig para configurar as opções do analisador do Visual Studio. O ReSharper 2021.3 pode ler dados de estilo de código desses arquivos globais AnalyzerConfig e usá-los para ajustar as regras do ReSharper de forma correspondente.

Dados amostrados de alocação de memória dotUltimate

O dotMemory agora pode obter dados amostrados de alocação de memória, baseados em eventos do ETW. A amostragem é menos precisa que a maneira tradicional (estatística) de coletar dados de alocação, mas oferece várias vantagens:

  • Os dados amostrados de alocação são coletados sem prejudicar o desempenho.
  • Você não precisa ativar explicitamente essa coleta de dados; ela está sempre ativa.
  • Os dados amostrados de alocação também podem ser coletados quando você anexa o profiler a um aplicativo que já está em execução.

Observe que este recurso só está disponível no Windows.

Novidades no dotMemory 2021.3

Baixar

Avaliação gratuita por 30 dias disponível