ReSharper: fuerza las llaves alrededor de una sola línea

100

¿Puedo configurar ReSharper para corregir el código C # cuando no se utilizan llaves para rodear un bloque de código de una sola línea, como este:

if (blnSomeCondition)
   DoSomething();  // complain

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

Gracias

Booberry
fuente
3
Buena pregunta, pero ¿qué pasa con la primera sintaxis? Los tirantes de rizo son innecesarios.
Micah
43
Algunos desarrolladores argumentan que es una mejor práctica incluir llaves alrededor de un bloque de código de una sola línea, ya que puede ser más legible y más fácil de mantener.
Ryan Berger
33
Además, he visto cuántas veces no usar rizadores ha dado lugar a errores. Alguien hace un cambio, ve el if y agrega una nueva línea, sin darse cuenta de que no se ejecutará como parte del condicional. Es sutil pero ha sucedido.
Hadi Hariri
2
Realmente no tengo ningún problema con el primer formato, pero puedo ver que podría provocar errores en el escenario que Hadi mencionó. Nuestro equipo ha decidido que es un estándar de codificación que deseamos hacer cumplir, por eso hago la pregunta.
Booberry
5
Mi preferencia personal es no usar las llaves para una sola línea 'if's, sino colocar el' if 'y la siguiente declaración en la misma línea física, por ejemplo,' if (blnSomeCondition) Do Something (); '.
Paul Ruane

Respuestas:

148

En la nueva versión de ReSharper (2016.x) se ha movido al 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 ingrese la descripción de la imagen aquí

Sergey G.
fuente
35

Ryan tiene razón (tenga en cuenta, sin embargo, que su enlace se refiere a la ayuda de R # 2.0). El procedimiento específico es el siguiente:

  1. Vaya a ReSharper> Opciones> Idiomas> C #> Estilo de formato> Diseño de llaves
  2. Establezca "Llaves en la instrucción" if-else "" en "Usar llaves para varias líneas"
  3. Después de guardar los cambios, seleccione un ámbito para reformatear (podría ser una selección de código, archivo, carpeta, proyecto, solución, cualquier cosa que desee).
  4. Elija ReSharper> Herramientas> Código de limpieza.
  5. Lucro.

Recuerde que Code Cleanup hace muchas cosas y no solo están relacionadas con el formato de código (consulte los detalles en http://www.jetbrains.com/resharper/webhelp/Code_Cleanup__Index.html ), así que use la función con prudencia.

Jura Gorohovsky
fuente
28

La solución de Gorohoroh está cerca, pero en lugar de seleccionar "Usar llaves para multilínea" tuve que seleccionar "Agregar llaves" para forzarlo a agregar las llaves en el escenario de una sola línea. Y tuve que establecer eso en los seis menús desplegables en "Force Braces" para capturar todos los escenarios:

texto alternativo

Lo que realmente esperaba era poder configurar ReSharper para que hiciera una advertencia amarilla o un error rojo cuando se violó la regla, pero no he encontrado la manera de hacerlo. Porque tienes razón, Gorohoroh, Cleanup Code hace muchas cosas y me gustaría tener la opción de revisar y corregir las violaciones de las reglas una a la vez.

¡Gracias por tu ayuda!

Booberry
fuente
8

Para ReSharper 2016.2.2 .

Debes editar tu perfil para limpiarlo. El elemento adecuado se llama Agregar / Quitar llaves para declaraciones individuales en "if-else", "for", "foreach", "while", "do-while", "using" . Este elemento se puede encontrar dentro del elemento C # => Estilos de código .

Si el elemento está marcado, se agregarán llaves; si no se marca, se quitarán los frenos.

Nota: agregar no funciona ahora (no sé por qué, tal vez, una versión demasiado nueva de ReSharper). Sin embargo, si desmarca el elemento mencionado, no se eliminarán las llaves existentes alrededor de declaraciones individuales.

UPD: El problema resuelto, vea los dos primeros comentarios debajo de esta publicación.

Jordán
fuente
2
Esto funciona en 2016.3.2 de forma un poco diferente: en Opciones, vaya a Edición de código -> C # -> Estilos de código -> Llaves -> En la declaración "Si" , y luego elija "Aplicar siempre" en Preferencias. Otras opciones son "No hacer cumplir", "Hacer cumplir si el cuerpo es de varias líneas", "Hacer cumplir si la declaración es de varias líneas", etc.
Chait
Agradable. ¡Gracias! Y después de estos ajustes, la limpieza descrita por mí funciona correctamente.
Jordania
1

Puede configurarlo como se ve en la captura de pantalla.

forzar corchetes para una sola línea de código

PD: para los que tienen problemas para ver las URL de Imgur.com -> https://ibb.co/b4xijT

Alper Ebicoglu
fuente
1

Solo si puede ayudar a alguien más a ahorrar tiempo, en una máquina de mi empresa, seguir los consejos de Sergey no fue suficiente a pesar de la gran calidad de su publicación.

En la configuración en cuestión (VS2017, R # 2019, ambos actualizados), estas configuraciones en el lado de R # ya eran buenas, pero también tuve que modificarlas en las opciones de Visual Studio:

  • En la ventana Opciones, vaya a Editor de texto -> C # -> Estilo de código -> Formato -> General ,
  • Marque " Realizar limpieza de código adicional durante el formateo " y " Agregar / quitar llaves para la declaración de control de una sola línea "
AFract
fuente
0

Bueno, se mueve de nuevo. El nuevo lugar está bajo el estilo de sintaxis en la versiónReSharper 2020.01 .

Ir ReSharper > Options > Code Editing > C# > Syntax Style > Braces

Aquí está la captura de pantalla de ReSharper 2020.01

ingrese la descripción de la imagen aquí

chico curioso
fuente