ReSharper - força chaves em torno de uma linha


100

Posso configurar o ReSharper para corrigir o código C # quando as chaves não são usadas para circundar um bloco de código de linha única, como este:

if (blnSomeCondition)
   DoSomething();  // complain

if (blnSomeOtherCondition)
{
   DoSomethingElse(); // don't complain
}

obrigado


3
Boa pergunta, mas o que há de errado com a primeira sintaxe? Chaves curl são desnecessárias.
Micah

43
Alguns desenvolvedores argumentam que é melhor incluir chaves ao redor de um bloco de código de linha única, pois ele pode ser mais legível e mais fácil de manter.
Ryan Berger

33
Além disso, já vi quantas vezes não usar chaves de ondulação pode causar bugs. Alguém faz uma alteração, vê o if e adiciona uma nova linha, sem perceber que ela não será executada como parte da condicional. É sutil, mas aconteceu.
Hadi Hariri,

2
Eu realmente não tenho problemas com o primeiro formato, mas posso ver que pode levar a bugs no cenário que Hadi mencionou. Nossa equipe decidiu que é um padrão de codificação que desejamos aplicar, e é por isso que faço a pergunta.
Booberry,

5
Minha preferência pessoal é não usar as chaves para uma única linha 'if's, mas colocar o' if 'e a seguinte instrução na mesma linha física, por exemplo,' if (blnSomeCondition) Do Something (); '.
Paul Ruane,

Respostas:


148

Na nova versão do ReSharper (2016.x) foi movido para o Estilo de Código. ReSharper 2016.1.1

UPD1: para ReSharper 2017.x ReSharper 2017.1.2

UPD2: para ReSharper 2018.x ReSharper 2018.1

UPD3: para ReSharper 2019.x ReSharper 2019.1

UPD4: para ReSharper 2020.x insira a descrição da imagem aqui


35

Ryan está correto (observe, entretanto, que o link dele se refere à ajuda do R # 2.0). O procedimento específico é o seguinte:

  1. Vá para ReSharper> Opções> Idiomas> C #> Estilo de formatação> Layout de colchetes
  2. Defina "Chaves em" if-else "instrução" para "Usar colchetes para várias linhas"
  3. Depois de salvar as alterações, selecione um escopo para reformatar (pode ser uma seleção de código, arquivo, pasta, projeto, solução - qualquer coisa que você quiser).
  4. Escolha ReSharper> Ferramentas> Código de limpeza.
  5. Lucro.

Lembre-se de que o Code Cleanup faz várias coisas e elas não estão apenas relacionadas à formatação do código (veja os detalhes em http://www.jetbrains.com/resharper/webhelp/Code_Cleanup__Index.html ), então use o recurso com sabedoria.


28

A solução de Gorohoroh está próxima, mas em vez de selecionar "Usar colchetes para várias linhas", tive que selecionar "Adicionar colchetes" para forçá-lo a adicionar colchetes no cenário de linha única. E eu tive que definir isso em todos os seis menus suspensos em "Chaves de força" para capturar todos os cenários:

texto alternativo

O que eu realmente esperava era ser capaz de configurar o ReSharper para emitir um aviso amarelo ou erro vermelho quando a regra fosse violada, mas não encontrei uma maneira de fazer isso. Porque você está certo, Gorohoroh, o código de limpeza faz um monte de coisas e eu gostaria de ter a opção de olhar e corrigir as violações de regra uma de cada vez.

Obrigado pela ajuda!


8

Para ReSharper 2016.2.2 .

Você deve editar seu perfil para limpeza. O item apropriado é chamado Adicionar / Remover colchetes para instruções únicas em "if-else", "for", "foreach", "while", "do-while", "using" . Este item pode ser encontrado no item C # => Estilos de código .

Se o item estiver marcado, colchetes serão adicionados; se desmarcado, os colchetes serão removidos.

Nota: adicionar não funciona agora (não sei por que - talvez, uma versão muito nova do ReSharper). No entanto, se você desmarcar o item mencionado, os colchetes existentes em torno das declarações simples não serão removidos.

UPD: O problema foi resolvido, veja os dois primeiros comentários nesta postagem.


2
Isso funciona em 2016.3.2 de maneira um pouco diferente - em Opções, vá para Edição de código -> C # -> Estilos de código -> Chaves -> Na instrução "If" e, em seguida, selecione "Aplicar sempre" em Preferência. Outras opções são "Não impor", "Aplicar se o corpo for multilinha", "Aplicar se a declaração for multilinha", etc.
Chait de

Agradável. Obrigado! E depois dessas configurações, a limpeza por mim descrita funciona bem.
Jordânia


1

Só se isso puder ajudar outra pessoa a economizar tempo, em uma máquina da minha empresa, seguir os conselhos de Sergey não foi suficiente, apesar da ótima qualidade de sua postagem.

Na configuração em questão (VS2017, R # 2019, ambos atualizados), essas configurações no lado R # já eram boas, mas também tive que modificá-las nas opções do Visual Studio:

  • Na janela Opções, vá para Editor de texto -> C # -> Estilo de código -> Formatação -> Geral ,
  • Marque " Executar limpeza de código adicional durante a formatação " e " Adicionar / remover colchetes para instrução de controle de linha única "

0

Bem, ele é movido novamente. O novo local está na versão Syntax Style on ReSharper 2020.01.

Vamos para ReSharper > Options > Code Editing > C# > Syntax Style > Braces

Aqui está a captura de tela de ReSharper 2020.01

insira a descrição da imagem aqui

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.