Novidades no ReSharper 2021.1

ReSharper 2021.1 traz atualizações em análise de código, suporte para modelos de rota ASP.NET, renomeação de componentes de tupla e muito mais.

Baixar

Avaliação gratuita por 30 dias disponível

Análise de código

Mais padrões para merge

A inspeção Merge into pattern agora pode lidar com muitos mais padrões de código. Mescle verificações de nulos com outras verificações em uma única verificação de padrão:

Reescreva verificações de expressões conditional?.Access para correspondência de padrões aninhados:

Reduza o aninhamento de instruções if mesclando as verificações:

Finalmente, você pode mesclar padrões dentro de um simples padrão de desconstrução var (a,b), expandindo-os para formas completas:

Mais suporte para C# 9.0

Adicionamos mais suporte para registros C# 9.0. As refatorações Extract interface e Extract superclass agora funcionam com declarações de record, assim como File Layout e os recursos que têm a ver com a documentação XML.

Criamos um conjunto de novas inspeções e ações. A declaração de propriedade explícita redundante para propriedades em declarações record pode ser útil ao migrar seu código para usar registros com parâmetros posicionais e declarações de propriedade implícitas. Uma correção rápida correspondente, Remove explicit property, está incluída.

Se você decidir transformar um record em uma class, a ação To class cuidará dos parâmetros posicionais e do construtor primário. Também há uma ação To record que funciona da maneira oposta.

Sempre que você precisar reescrever parâmetros posicionais e um construtor primário para propriedades comuns, construtor e um método Deconstruct() explícito, considere usar a ação de contexto To explicit constructor.

Também há algo para manter as coisas organizadas: a inspeção Redundant 'record' type declaration body e a correção rápida correspondente substituirão o corpo da declaração do tipo record vazio por um ponto-e-vírgula.

Agora, Find usages procura os usos do construtor primário de um registro e os usos de um método Deconstruct() implícito.

Converter uma variável temporária em valor inline

É com grande satisfação que apresentamos uma nova inspeção, Inline temporary variable. Às vezes, você se pega usando o mesmo valor repetidamente com nomes diferentes em seu programa. Esse código pode ser mais transparente? Com certeza, e o ReSharper está aqui para ajudar.

Ele pode até mesmo ajudar a encontrar bugs se a variável temporária deveria ser inicializada com algum outro valor ou se ela sofrer mutação posteriormente no código.

Outras facilidades

Padrões lógicos not podem ajudar você a facilitar bastante a leitura das suas verificações de tipo. O ReSharper oferece o descarte da sintaxe !() em favor de um padrão “not”.

Agora, o ReSharper sugere o uso do operador de intervalo em vez de Slice e Substring, se isso simplificar o código.

A inspeção Namespace does not correspond to file location foi suprimida em arquivos com código de nível superior.

Há outra nova inspeção que verifica se uma propriedade automática pode ser substituída por uma propriedade calculada, junto com uma correção rápida para fazer essa substituição.

Para suporte ao C# 10.0, demos alguns primeiros passos e ensinamos o ReSharper a trabalhar com o recurso Constant string interpolation.

Fique ligado em uma postagem de blog dedicada com todos os detalhes sobre Análise de código na versão 2021.1!

Modelos de rota do ASP.NET Core

Os modelos de rota são amplamente usados em aplicativos MVC para configurar como as solicitações HTTP são correspondidas aos endpoints executáveis da aplicação. Na versão 2021.1, estamos introduzindo suporte para modelos de rotas: o ReSharper agora oferece navegação estrutural, inspeções e correções rápidas. Vamos ver alguns exemplos.

As inspeções mais básicas verificam os erros de sintaxe do modelo de rota: colocar acidentalmente uma rota de parâmetro catch-all no meio do modelo, declarar o parâmetro catch-all como opcional, adicionar um valor padrão para o parâmetro opcional e assim por diante.

Parâmetros de rota dão origem a situações interessantes. E se você declarar um parâmetro com o mesmo nome no controlador e na ação? O ReSharper avisará você sobre isso.

Por outro lado, parâmetros podem estar faltando. Neste caso, o ReSharper sugerirá que você os adicione, seja a partir do atributo do controlador ou da ação. Se houver uma restrição de tipo, ela será usada para inferir o tipo do parâmetro.

Falando em restrições, elas são um bom lugar para análise de código. O ReSharper verifica se a própria restrição aplicada está correta e se um parâmetro realmente satisfaz a restrição.

O ReSharper também tenta analisar se o tipo de parâmetro pode ser mais rigoroso, com base na restrição, e pode sugerir a alteração do tipo. Se você usava o tipo diferente para o parâmetro de propósito, basta descartar a sugestão.

O ReSharper também está ciente das restrições personalizadas. Se, em alguns casos, elas não forem reconhecidas, anote sua classe de restrição com o atributo [RouteParameterConstraint] fornecido por JetBrains.Annotations.

Quanto a outros recursos de nosso pacote padrão, há complementação de código, navegação estrutural e reorganização do código.

A renomeação dos parâmetros de rota não precisa mais ser manual: a refatoração Rename está aqui para você.

Por enquanto, todos os itens acima funcionam para roteamento baseado em atributos. Estamos ansiosos para ouvir seus comentários sobre essa novidade.

Para obter mais detalhes sobre os modelos de rota ASP.NET Core, consulte esta postagem de blog.

Renomeação em tuplas

Tuplas nomeadas estão conosco desde o C# 7, mas renomear os componentes continuou sendo uma operação manual. Colocamos um fim nisso, e agora você pode chamar a refatoração.

Navegação

Agora, você tem uma nova ação de navegação – Navigate to Windows Explorer. Você vai encontrá-la no menu Navigate | Navigate to ou pressionando Ctrl+Shift+A e digitando seu nome. Isso pode ser útil quando você está fazendo algo com o próprio arquivo, como copiá-lo ou copiar o caminho dentro do repositório, ou se preferir visualizar o histórico VCS do arquivo usando extensões Git para o Windows Explorer.

Desempenho

Embora ainda estejamos desmontando o ReSharper para o modo "fora do processo" e montando-o novamente, nunca paramos de corrigir problemas de desempenho específicos sempre que possível. Aqui estão alguns destaques.

  • Aceleramos a digitação de arquivos Razor em soluções grandes.
  • Aceleramos a digitação de qualquer arquivo grande em que os analisadores ReSharper estejam funcionando.
  • Melhoramos o desempenho e a capacidade de resposta das dicas de dados do depurador.
  • Otimizamos como o ReSharper lida com documentos compartilhados e, portanto, agora ele consome menos memória.
  • Implementamos melhorias de desempenho para testes de unidade de JavaScript e TypeScript.

Estilos de formatação e código

Adicionamos algumas novas configurações:

  • Agora, você pode escolher se deseja definir um espaço antes e dentro dos parênteses em new() com tipo de destino.
  • Você pode especificar a quebra antes do operador de atribuição.
  • É possível recuar instruções de rótulo à direita.

Para regras de nomenclatura personalizadas, atualizamos a ordem em que elas são aplicadas: as mais específicas agora são aplicadas primeiro.

Por fim, adicionamos uma nova ação para a seleção de formato. Agora, você pode instruir o ReSharper a ajustar apenas os recuos do código selecionado, em vez de realizar todo o processo de reformatação.

Também corrigimos um conjunto de bugs - você pode encontrar os detalhes em nosso rastreador de issues.

EditorConfig

O EditorConfig está se tornando uma ferramenta popular na comunidade .NET e estamos continuamente aprimorando como ele funciona com o ReSharper. Aqui está o que mudamos:

  • Melhoramos a forma como o ReSharper lê as configurações de regras de nomenclatura do EditorConfig e grava as regras de nomenclatura definidas pelo usuário no EditorConfig.
  • Se as regras de nomenclatura forem substituídas no EditorConfig, o ReSharper mostrará uma notificação na página de configurações de nomenclatura.
  • Adicionamos suporte para a opção csharp_indent_case_contents_when_block no EditorConfig.

Testes de unidade

  • We’ve implemented support for VSTest adapters – a feature that allows you to discover and run tests from a third party framework. Agora você não está limitado pelos frameworks aos quais oferecemos suporte direto. Habilite o recurso em ReSharper | Options | Tools | Unit Testing | Test Frameworks | VSTest.
  • Implementamos suporte para MSTest em projetos da Plataforma Universal do Windows para Visual Studio 2019.
  • Alguns de vocês encontraram o problema dos “spawned processes”: às vezes, o executor de teste conclui seu trabalho, mas um processo iniciado por ele ainda fica ativo. Adicionamos uma configuração para o curso de ação padrão neste caso. Agora, você pode escolher entre ser questionado sobre o que fazer, não fazer nada e encerrar o processo gerado. E quando você está sendo questionado sobre um processo e decide o que fazer com ele, sua decisão é salva em ReSharper | Options | Tools | Unit Testing | Test Runner. Você sempre poderá excluí-la se estiver errada.
  • Implementamos um conjunto de inspeções para a biblioteca AutoFixture no NUnit. O ReSharper agora verifica se o tipo de valor de teste está correto, verifica se não há argumentos redundantes no atributo [InlineAutoData] e avisa se não houver um atributo [TestFixture] ou [Test] na classe ou método de teste.
  • Atualizamos nosso suporte para QUnit para a versão 2.14.0.

Suporte para C++

O ReSharper C++ 2021.1 traz suporte para vários novos recursos de linguagem C++20 e C++17: tipos de classe em parâmetros de modelo não-tipo, regras de dedução de argumento de modelo de classe C++20 e noexcept como parte do tipo de função. Há também novos itens de complementação de código para corrotinas disponíveis tanto na complementação de código básica quanto como modelos de complementação postfix: co_await, co_yield e co_return.

Estilo de sintaxe C++

Introduzimos uma coleção de configurações de estilo de sintaxe que você pode usar para impor o estilo de código escolhido para as construções de sintaxe. Com as inspeções de suporte, correções rápidas e as ações de contexto Apply Syntax Style e Cleanup selection, você pode aplicar o novo estilo à base de código com facilidade e manter o novo código consistente.

Outras atualizações

  • Adicionamos uma ação para copiar links do GitHub com o recurso Copy FQN. Quando você chama Copy Fully-qualified name do menu principal (ReSharper | Edit) ou de Ctrl+Shift+A, o ReSharper faz a cópia e abre um menu de contexto onde você pode escolher entre uma variedade de formatos, caso precise de um não padrão. Esse menu agora inclui links do GitHub.
  • Se você usa expressões regulares em strings em C#, VB.NET ou JavaScript, mesmo em páginas do Razor, provavelmente curtirá o recurso para estender/recolher seleção, que agora funciona também em injeções.
  • Adicionamos dicas de conversão de tipo para conversões de tupla.
  • Uma nova restrição Body está disponível para métodos em File Layout. Ela permite que você especifique regras diferentes para métodos com corpo em bloco e métodos com corpo em expressão.

Nova tela inicial no dotTrace e no dotMemory dotUltimate

Reformulamos completamente a tela inicial no dotTrace e no dotMemory. Agora, é muito mais fácil configurar e iniciar novas sessões de definição de perfil, trabalhar com snapshots e realizar outras operações básicas.

Baixar

Avaliação gratuita por 30 dias disponível