Novidades no ReSharper 2022.2

O ReSharper 2022.2 inclui suporte para recursos do C# 11, como membros obrigatórios, operadores checked definidos pelo usuário, strings brutas e padrões de listas. A análise por toda a solução tem um consumo de memória bastante otimizado. Além disso, esta versão também traz o Virtual Formatter, que permite a você visualizar código no seu formato preferido sem reformatar de fato o código-fonte no disco, e uma ferramenta de Disk Cleanup para remover arquivos temporários gerados pelo ReSharper enquanto ele trabalha no seu código.

Baixar

Avaliação gratuita por 30 dias disponível

C# 11

Esta versão traz o suporte a vários recursos adicionais da versão de demonstração do C# 11.

Membros obrigatórios

No C# 11, os tipos class, struct e record ganharam a capacidade de declarar uma lista de membros obrigatórios. Trata-se de uma lista de todas as propriedades e campos considerados obrigatórios e que precisam ser inicializados juntamente com a instância de um tipo. Os tipos herdam automaticamente essas listas dos seus tipos-base, proporcionando uma experiência suave que remove código pronto repetitivo.

Além de reconhecer a palavra-chave required para membros dentro de um tipo class, struct ou record, o ReSharper oferece suporte adicional à palavra-chave required:

  • Há uma palavra-chave required na complementação de código.
  • A maior parte dos erros e alertas do compilador está disponível.
  • O modificador required foi adicionado à opção Modifiers order na página ReSharper | Options | Code Editing | C# | Syntax Style.

Adicionamos uma nova correção rápida Add initializer for required members para casos em que você já criou o objeto de um tipo, mas ainda não inicializou os membros. Essa correção gera automaticamente todos os membros "required" que estiverem faltando no seu objeto – você só precisa preencher os valores dos membros com dados significativos.

Operadores "checked" definidos pelo usuário

Operadores checked definidos pelo usuário ajudam os desenvolvedores a criar operadores definidos pelo usuário que operam em tipos nos quais o overflow aritmético seja um conceito válido. O ReSharper mostra todos os erros e avisos do compilador. Para dar suporte total a operadores checked definidos pelo usuário, o ReSharper tem algumas inspeções adicionais e uma nova ação de contexto.

Atualizamos a inspeção Unchecked/checked context is redundant para levar em conta operadores checked quando eles forem usados neste contexto.

Se você tiver um conjunto de operadores definidos pelo usuário e alguns deles já tiverem uma versão checked, o ReSharper ajudará você a propagar os operadores checked a todo o conjunto. Uma nova inspeção, chamada The operator does not have a matching checked operator while other operators do, notificará a você quais operadores ainda não têm um operador "checked" e sugerirá uma correção rápida para gerar as versões checked automaticamente.

Se você ainda não tiver usado operadores checked na sua base de cócigo, mas quiser começar a adicioná-los, uma nova ação de contexto chamada Create matching checked operator será muito conveniente. Essa ação está disponível em cada operador definido pelo usuário e gera uma versão "checked" de um operador diretamente a partir do menu Alt+Enter com apenas um clique.

Strings brutas

O C# 11 tem uma melhor capacidade de incorporar outras linguagens ou formatos de texto no código C#, introduzindo o conceito de strings brutas.

O ReSharper tem suporte básico a strings "raw", incluindo erros de compilação, parsing correto e realce de cores para a sintaxe """", pares de aspas e marcadores dentro de strings interpoladas (sintaxe {{...}}).

Padrões de lista

O C# 11 continua expandindo os padrões de conjunto disponíveis na linguagem. Desta vez, o C# permite fazer correspondência em estruturas semelhantes a listas, tais como arrays, strings e coleções semelhantes a List<T>.

O ReSharper 2022.2 tem suporte total a padrões com verificação de erros, complementação e análise de código. Ainda estamos trabalhando para adicionar inspeções de código, para sugerir usar os padrões de lista no código existente, e ações adicionais de refatoração.

Mais recursos do C# 11

Mais recursos do C# 11

  • O ReSharper 2022.2 oferece suporte total ao novo operador unsigned right shift (deslocamento para a direita sem sinal) (>>>), incluindo suporte para sobrecarregamento do operador >>> definido pelo usuário.
  • O ReSharper 2022.2 tem suporte ao uso simplificado de valores Span<char> como substitutos para instâncias de strings, já que no C# 11 é possível fazer a correspondência direta de padrões entre constantes de string e os valores dos tipos Span<char> e ReadOnlySpan<char>.

Otimizações de análise por toda a solução

Nesta versão, otimizamos bastante a utilização de memória pelo ReSharper, em termos tanto do tráfego de memória (número de alocações de memória) quanto do consumo de memória, através do modo de Análise por Toda a Solução LIGADO.

O mecanismo da Análise por Toda a Solução usa a memória para armazenar a lista de problemas na solução e também as informações sobre o uso de tipos e membros para elaborar relatórios de uso abrangendo toda a solução (inspeções de código tais como "membro público nunca é usado"). Os dados de uso são "quentes", ou seja, precisam ser constantemente atualizados à medida que você edita o código e não podem ser descarregados para o disco. Isto pode consumir uma quantidade significativa de memória, se a sua solução contiver muitos tipos e membros. Revisamos os dados armazenados na memória e encontramos padrões que nos permitiram eliminar duplicações e normalizar os dados. Também usamos tipos especializados de coleções para reduzir o conjunto de trabalho mais ainda. Essas otimizações resultaram em uma melhora de 5-10x no consumo de memória e em um carregamento mais rápido da Análise por Toda a Solução.

Análise de código

Declarações top-level

O .NET 6 introduziu novos modelos de projetos com o uso de declarações top-level do C# 9. As declarações top-level simplificam declarar uma classe Program ou um método public static void Main(string[] args). Mas às vezes, a declaração explicita class Program é necessária na inicialização, ou mais desejável de ser usada. O ReSharper 2022.2 adiciona a nova ação de contexto To explicit 'Program' class, para executar uma transformação para o estilo antigo.

Ao mesmo tempo, se você tiver uma classe de inicialização Program já existente e quiser migrar para declarações top-level, poderá usar a nova ação de contexto Convert to top-level code.

Suporte a INotifyPropertyChanged atualizado

Nesta versão, reformulamos nosso suporte a INotifyPropertyChanged. Anotações externas não são mais necessárias para detectar APIs comuns para INotifyPropertyChanged. Isto nos permitiu dar suporte a mais frameworks MVVM e classes de base INotifyPropertyChanged automaticamente. Agora, emitimos um método SetField, que permite a sintaxe mais concisa possível para notificações INotifyPropertyChanged.

Agora também é possível adicionar notificações property change para todas as propriedades daquele tipo ou arquivo.

Refatorações no menu Alt+Enter

Para aumentar a possibilidade de refatorações serem descobertas, revisamos as refatorações de uso mais comuns e introduzimos ações de contexto relacionadas no menu Alt+Enter. Essas ações dependem do contexto atual.

Adicionamos a ação de contexto Extract method quando você chama o menu Alt+Enter em um trecho selecionado de código.

Agora as refatorações Change Signature, Transform Parameters, Convert to extension method e Convert Property To Method estão todas disponíveis como ações de contexto sobre assinaturas de membros.

Mais sugestões de uso de um operador nameof

Agora o ReSharper 2022.2 reconhece os registros de DependencyProperty em projetos de WPF e sugere usar um operador nameof para capturar o nome da propriedade CLR correspondente. Os modelos dinâmicos incorporados também foram atualizados para emitir nameof em vez de literais de string.

Muitas vezes, o ReSharper não consegue reconhecer o significado especial de um determinado literal de string usado para especificar o nome de alguma entidade do seu código, como o nome de um membro ou um tipo. Para esses casos, introduzimos uma nova ação de contexto Capture element name, para literais de string que podem referenciar uma entidade de código no contexto que contém o literal de string.

Busca e substituição estruturais

Agora, correções rápidas vindas de padrões de Busca e Substituição Estruturais (Structural Search And Replace, SSR) podem ser aplicadas no escopo de um arquivo, pasta, projeto, ou da solução inteira. Isto afeta padrões personalizados de usuário criados na página ReSharper | Options | Code Inspection | Custom Patterns, afeta inspeções de código incorporadas do ReSharper e as correções correspondentes baseadas em SSR.

Outros

Agora o ReSharper 2022.2 detecta alguns padrões de atribuição no seu código e sugere um código C# mais idiomático, com correspondência de padrões.

Agora o ReSharper 2022.2 consegue substituir alguns padrões is sob expressões ?: pela forma mais concisa as sob a expressão ??, na prática eliminando uma variável temporária.

Formatador Virtual

Introduzimos o Virtual Formatter — uma maneira de você visualizar código com a sua formatação desejada sem realmente reformatar o código-fonte no disco. Por exemplo, agora você pode alinhar parâmetros em colunas ou aumentar indentações, tudo virtualmente. Nosso objetivo com este recurso foi melhorar a legibilidade e a facilidade de manutenção do código, além de torná-lo mais acessível a deficientes visuais e desenvolvedores neurodivergentes. Para ativar o Virtual Formatter com configurações predefinidas, vá para ReSharper | Options | Environment | Inlay Hints | General. Para personalizar a formatação mais ainda com suas especificações exatas, marque a caixa de opção Use dedicated Virtual Formatter style settings e clique em C#.

Limpeza de disco

Agora você pode remover os arquivos temporários gerados pelo ReSharper enquanto ele trabalha no seu código. Adicionamos uma nova página nas Options, onde você pode:

  • Observar um conjunto de caminhos-padrão e arquivos que o ReSharper pode remover.
  • Adicionar um modelo de caminho personalizado para os arquivos que você deseja remover.
  • Especificar o tempo em dias após o qual o ReSharper deve considerar os arquivos desatualizados para cada modelo de caminho.
  • Verificar quanto espaço está sendo ocupado pelos arquivos correspondentes a cada modelo de caminho.
  • Criar rotinas de limpeza automática de arquivos desatualizados, para serem executadas periodicamente (o valor-padrão é 1 dia).
  • Executar a limpeza manualmente em diferentes escopos.

Suporte a JavaScript e TypeScript

Como muitos de vocês devem ter percebido, o suporte a JavaScript e TypeScript no ReSharper está desatualizado e é lento. Na implementação atual, é difícil seguir as mudanças na linguagem TypeScript e dar suporte a novas versões rapidamente. Então, estamos procurando uma maneira melhor de darmos suporte a essas linguagens. Depois de uma longa discussão interna, decidimos suspender nosso suporte atual a JS e TS. Como resultado, desativamos o suporte a TS e JS como padrão nesta versão. Se você ainda quiser usar esse suporte, poderá reativá-lo aqui: ReSharper | Options | Environment | Products & Features | caixa de opção "JavaScript and TypeScript".

Unreal Engine

O ReSharper C++ introduz dicas de inlay específicas para Blueprint e permite que você veja o panorama mais amplo por detrás do seu código:

  • Fique ciente das classes do Blueprint derivadas e confira a lista de todos os herdeiros.
  • Identifique se uma UFunction tem implementações em Blueprints e procure por todos esses casos.
  • Verifique rapidamente o estado de uma UProperty, incluindo se ela foi substituída e qual valor está definido no arquivo Blueprint.

Também introduzimos inspeções para informar se há inconsistências entre os especificadores de função específicos para Blueprint usados no código e os próprios Blueprints.

Suporte melhorado a chamadas nativas do sistema dotUltimate

Agora o dotTrace dá mais detalhes para chamadas nativas do sistema na Timeline Call Tree, incluindo chamadas ao kernel do Windows (ntoskrnl.exe), chamadas a drivers de dispositivos (*.sys) e outras.

Respeito às configurações de StyleCop.Analyzers

Agora o ReSharper consegue detectar se o pacote StyleCop.Analyzers é referenciado por um projeto e pode ler suas configurações nos arquivos stylecop.json e .ruleset. Cabeçalhos de arquivos e configurações de indentação são obtidos de stylecop.json, enquanto as regras do StyleCop são aplicadas de acordo com a configuração do arquivo .ruleset ativo.

Assemblies ReadyToRun e NGen

  • A maneira como as assemblies ReadyToRun (R2R) e NGen são apresentadas no Assembly Explorer foi aperfeiçoada. Agora, junto ao nome de cada assembly, é mostrado um pequeno ícone com um símbolo de processador e o rótulo ngen or R2R.
  • A árvore Metadata tem o cabeçalho ReadyToRun.
Baixar

Avaliação gratuita por 30 dias disponível