Novidades no ReSharper 2020.2

O ReSharper 2020.2 traz novas inspeções e correções rápidas para tipos de referência C#8 e nulos, o tão esperado "Code Cleanup on Save", um Executor de testes de unidade reformulado, além de melhorias de acessibilidade. Além disso, o ReSharper C++ leva você ao próximo nível de desenvolvimento em Unreal Engine e vem com muitas melhorias para suporte a C++/CLI, navegação e análise de código.

Baixar

Avaliação gratuita por 30 dias disponível

Análise de código

A análise de código de nulidade agora reconhece mais casos e pode rastrear a nulidade incorreta através da desconstrução e do ciclo foreach. Ele também fornece uma correção rápida correspondente.

A análise de código agora leva em conta os atributos JetBrains.Annotations (ambos NotNull e CanBeNull) para a API, mesmo no código em que tipos de referência anuláveis estão desabilitados (#nullable disable).

Ações de contexto para converter foreach em LINQ e LINQ em código também estarão disponíveis em IAsyncEnumerable<T> se você tiver o pacote NuGet System.Linq.Async instalado para seu projeto.

Agora, é possível gerar facilmente implementações IEqualityComparer<T> e IComparer<T> com as correções rápidas apropriadas.

A análise de código agora leva em consideração as anotações do compilador (como AllowNull e DisallowNull) ao verificar a nulidade de membros implementados ou substituídos.

Existem novas inspeções e correções rápidas para tornar variáveis e tipos de retorno "not nullable" caso elas nunca tenham retido ou retornado valores anuláveis.

A análise de código agora pode seguir as regras dotnet_diagnostic do arquivo .editorconfig. Especifique a gravidade das inspeções no arquivo .editorconfig, por exemplo, dotnet_diagnostic.CS1058.severity = hint, e o ReSharper exibirá as inspeções adequadamente.

O suporte para o recurso de implementações padrão em interfaces foi aprimorado neste lançamento. A medianiz à esquerda no editor de código mostra que um método é implementado ou substituído, e nossas refatorações e navegação estão cientes desse recurso da linguagem C#.

As dicas de inserção agora estão disponíveis no código XAML. Fornecemos dicas para nomes de propriedades de marcação e DataContext, bem como para margens e preenchimentos, o que é útil se você não deseja memorizar suas ordens.

A correção rápida Suppress nullable warning with ! pode ser desativada para uma solução por meio do menu Alt+Enter.

Limpeza de código

Agora, você pode configurar o ReSharper para iniciar a Limpeza de código automaticamente ao salvar um arquivo! Até que enfim!

Plug-ins de terceiros não são mais necessários para essa funcionalidade. Esse recurso pode ser habilitado na página de opções ReSharper | Options | Code Editing | Code Cleanup.

Existem escopos novos e mais granulares para executar a Limpeza de código, como arquivos recentemente modificados e arquivos recentemente abertos, que podem reduzir significativamente o tempo necessário para obter um resultado, pois a Limpeza de código não precisa ser executada na solução inteira. Para um ajuste mais preciso, você pode especificar o que é qualificado como "recentemente".

Salve automaticamente os arquivos após a limpeza do código. Esse recurso pode ser habilitado na página de opções ReSharper | Options | Code Editing | Code Cleanup.

Existem algumas melhorias para reduzir o tempo de execução da Limpeza de código:

  • A limpeza não executa analisadores ao coletar código para limpar, a menos que as caixas de seleção correspondentes estejam marcadas no perfil Cleanup. Por exemplo, se um perfil tiver a opção "Remove redundancies" desmarcada, os analisadores relacionados à pesquisa de redundâncias não serão executados.
  • Várias correções de código são executadas ao mesmo tempo para um arquivo. Ele não inicia mais o novo realce do arquivo após cada correção.

Testes de unidade

Reformulamos nosso Executor de testes de unidade para que o .NET Framework e o .NET Core tenham o mesmo executor para ambos os tempos de execução que rodam fora do processo do Visual Studio. Ele nos ajuda a resolver vários problemas com a descoberta, execução e depuração de testes de unidade, além de fornecer controle total sobre hierarquias de teste de unidade para testes do .NET Core.

O novo executor de teste tem suporte integrado para:

  • MSFakes para os frameworks de teste de unidade NUnit, xUnit, MSTest v2.
  • TypeMock Isolator para NUnit, xUnit e MSTest v2.

O mais notável na interface do usuário é que agora o ReSharper oferece suporte ao atributo DisplayName em testes do .NET Core para os frameworks xUnit e NUnit.

Aplicar filtros à árvore de testes de unidade, por exemplo, Passed/Failed/etc significa que os contadores fornecem dois números separados: o número total de todos os testes e o número de testes que atendem aos critérios de filtro.

Existem duas novas ações no menu Navigate To:

  • Mostrar todas as sessões de teste de unidade que incluem este teste.
  • Mostrar o teste na janela da ferramenta Unit Test Explorer.

Introduzimos suporte ao método Assert.Multiple do NUnit, que possibilita verificar várias asserções sem que o código saia após a primeira falha.

Os intervalos de tempo para agrupar por duração podem ser editados diretamente nas opções.

Melhorias de acessibilidade

Essa versão acompanha suporte aprimorado para leitores de tela como o JAWS, o NVDA e o Microsoft Narrator. Esses leitores de tela agora têm melhor acesso a:

  • Lista e componentes de árvore dentro das janelas de ferramentas do ReSharper.
  • Elementos dentro da caixa de diálogo Options.
  • Elementos no menu Alt+Enter.
  • Todas as caixas de diálogo Go To.
  • O pop-up de complementação de código.

Suporte para x:Bind

Temos boas notícias para desenvolvedores UWP – o suporte para associações compiladas com x:Bind está finalmente aqui!

O ReSharper resolve o código x:Bind corretamente e oferece várias inspeções e correções rápidas correspondentes. Ele avisa sobre a falta de setters de propriedades, atributos BindBack e quando há colisões de sobrecarga. Além disso, há um conjunto de correções rápidas Create from Usage para gerar um campo, propriedade ou método adequado dentro do C# code-behind.

Há complementação de código e informações de parâmetros para os atributos propertyPath, BindBack e UpdateSourceTrigger dentro de uma expressão x:Bind.

As refatorações Change Signature e Safe Delete agora reconhecem o uso do método no código XAML e o atualizam de acordo. Além disso, as refatorações Make Static/Const e Encapsulate Field funcionam diretamente do código XAML e atualizarão os usos XAML corretamente se você as chamar do C# code-behind.

O reconhecimento de nulidade é integrado à análise de código x:Bind. O ReSharper agora mostra inspeções relacionadas a nulos diretamente no código XAML quando há atributos CanBeNull e NotNull no código C#, por exemplo, “Possible System.NullReferenceException” e “Possible null assignment to non-nullable entity” para argumentos em um método usado em um propertyPath.

Outros recursos do ReSharper, como Find Usages e Go to Declaration, também estão cientes de associações x:Bind.

ReSharper Command Line Tools

Em 2020.1, o Rider migrou do Mono para o .NET Core no macOS e Linux. Nesta versão, as Ferramentas de linha de comando ReSharper são executadas no .NET Core no Windows, Linux e macOS.

Observe que as Ferramentas de linha de comando do ReSharper não incluem mais o Mono, e as ferramentas para macOS e Linux agora exigem o .NET Core 3.1.

Outra vantagem de usar o .NET Core como runtime em vez do Mono é que as Ferramentas de linha de comando do ReSharper podem ser instaladas como uma ferramenta global do .NET Core. Execute o seguinte comando para instalá-las:

dotnet tool install -g JetBrains.ReSharper.GlobalTools --version 2020.2.0-*

E execute a ferramenta com jb tool_name [options], por exemplo:

jb inspectcode yourSolution.sln -o=<pathToOutputFile>

Diagramas de dependências de tipos e projetos

Nesse lançamento, o motor yFiles usado para desenhar o gráfico foi atualizado para a versão mais recente. Essa nova versão do yFiles, além de nossas otimizações, melhora significativamente o desempenho do desenho do gráfico resultante.

Agora, é possível exportar o gráfico resultante para novos formatos:

  • Formato de arquivo GraphML para análises adicionais em ferramentas externas.
  • Formato de arquivo XPS para imprimir diagramas grandes que não são possíveis de exportar no formato PNG.

A janela de ferramentas de diagramas finalmente é compatível com o tema escuro do Visual Studio.

Atualizações de navegação

Agora é muito mais fácil navegar para usos de tipos de assemblies externos no código. O ReSharper pode navegar diretamente dos resultados de pesquisa de Go to Type até Find Usages. Para experimentar, procure um tipo, realce-o na lista com o teclado ou o mouse e chame Find Usages ou Go to Usage usando os respectivos atalhos.

A partir do lançamento v2020.2, várias ações do ReSharper podem ser chamadas, como chamar a documentação rápida diretamente das caixas de diálogo Go to Symbol e Go to File Member e usar atalhos mapeados para essas ações em seu esquema de mapa de teclas favorito.

Novas ações Peek

Um conjunto de novas ações Peek foi adicionado para mostrar o resultado de algumas ações comuns do ReSharper em uma visualização Peek Definition.

Chame a ação Peek Implementation para abrir uma exibição Peek da implementação clicando na roda do mouse enquanto mantém pressionadas as teclas Ctrl+Alt ou ao pressionar Ctrl+Alt+Q com o sinal de intercalação em um símbolo.

Chame a ação Peek Base Symbols para observar todos os símbolos base dentro de uma exibição Peek. Basta pressionar Shift+Alt+Q em um símbolo para executá-lo.

Chame a ação Peek Usages para ver usos dentro de uma exibição Peek, clicando na roda do mouse em um símbolo enquanto mantém pressionada a tecla Ctrl.

Refatorações

Neste lançamento, a caixa de diálogo Conflicts foi reprojetada como uma etapa separada na interface Refactorings. A lista simples de antes foi substituída por uma árvore agrupada por arquivo.

Ao chamar refatorações Introduce parameter ou Introduce field em uma expressão, o ReSharper pergunta em qual parte da expressão a refatoração deve ser aplicada.

Recursos aprimorados do Unreal Engine

Unreal Engine

O ReSharper C++ 2020.2 apresenta suporte para o modelo de projeto Unreal Engine, trazendo sugestões mais inteligentes de importação automática para diretivas include e suporte para diferentes configurações de soluções. O ReSharper C++ também segue mais de perto as diretrizes do Unreal Engine, ajustando as ações de gravidade da inspeção e geração de código.

Para facilitar a navegação, o Search Everywhere/Go To agora trata símbolos de fontes de motor como símbolos de biblioteca. Existem também várias novas inspeções que aplicam as diretrizes do Unreal Engine e lembram que você deve atualizar os arquivos do projeto no Unreal Editor.

Melhor suporte para C++/CLI

C++/CLI

Como a licença do ReSharper agora abrange os produtos ReSharper e ReSharper C++, o suporte para C++/CLI - uma ponte entre as linguagens - está recebendo muitas atualizações e uma melhor interoperação entre C++/CLI e C#.

O ReSharper C++ encontrará símbolos derivados no código C#, enquanto Go to Base Symbols e Go to Derived Symbols agora funcionam em entidades CLR importadas.

O ReSharper C++ agora inspeciona a maneira como você aloca memória e sugere uma solução rápida para substituir gcnew por new (e vice-versa) quando o tipo de destino não é válido. Outra inspeção avisa quando você tenta usar o especificador C++ final em uma classe ou interface gerenciada, com uma correção rápida para torná-lo sealed em vez disso. Além disso, agora você pode usar uma correção rápida para converter uma cast no estilo C em safe_cast.

Novidades do ReSharper C++

Assembly Explorer

  • Feeds de pacote do NuGet v3 agora têm suporte em Open from NuGet, Open from NuGet packages cache e Open NuGet packages.config.
  • Agora, itens com nomes semelhantes estão recolhidos nas caixas de diálogo Open from NuGet e Open from NuGet packages cache.
  • Os pacotes NuGet são classificados em ordem alfabética.

Outros recursos

Formatação

Agora, o ReSharper agora alinha corretamente as colunas de código semelhante, mesmo quando apenas parte do grupo alinhado está sendo formatado. Portanto, adicionar um ponto-e-vírgula ou uma chave não interrompe mais o alinhamento.

Ferramentas e extensões .NET

dotCover dotUltimate

Existem algumas melhorias no executor de console do dotCover:

  • O parâmetro --reportype=SummaryXml permite criar um novo tipo de relatório de Summary, que inclui dados sobre quantas classes, métodos e instruções são cobertos no total.
  • O executor agora pode gerar relatórios de vários tipos ao mesmo tempo: --reporttype=HTML,SummaryXml --output=report.html;summary.xml
  • O executor para Linux (Debian, Ubuntu) agora pode executar análises em sistemas ARM64.

Saiba mais

dotTrace dotUltimate

O dotTrace autônomo e o dotTrace no Rider são capazes de criar um perfil da parte nativa de aplicativos Mono/Unity no Windows. Basta iniciar uma sessão com a opção 'Enable native profiling', e você verá pilhas de chamadas nativas e gerenciadas em snapshots de desempenho. Esse recurso pode ser benéfico para analisar gargalos de desempenho em jogos Unity.

Existem algumas melhorias no profiler de console do dotTrace:

  • O profiler permite controlar a sessão de criação de perfil (tirar snapshots, desanexar do processo de criação de perfil etc.) enviando comandos para stdin ou para um arquivo.
  • O profiler para Linux (Debian, Ubuntu) agora é capaz de criar um perfil de aplicativos em sistemas ARM64.

Saiba mais

dotMemory dotUltimate

Agora, você pode abrir objetos afixados como um conjunto de objetos separado e pode abrir objetos que não são acessíveis a partir das raízes de GC como um conjunto de objetos separado.

As melhorias no profiler de linha de comando do dotMemory incluem:

  • Agora, além do Windows, o profiler de linha de comando também está disponível no Linux e macOS.
  • O profiler para Linux (Debian, Ubuntu) é capaz de criar um perfil de aplicações não apenas no x64, mas também em sistemas ARM64.

Saiba mais

dotPeek 

O dotPeek continua aprimorando seu suporte para as versões mais recentes do C#, e o novo lançamento traz o seguinte:

  • Membros com corpo de expressão.
  • Expressões Throw.
  • Parâmetros padrão e argumentos nomeados.
  • Atributo NullablePublicOnly.

Saiba mais

Baixar

Avaliação gratuita por 30 dias disponível