0

[Article] StyleCop Codeando con estilo

Una de las discusiones en los equipos de programadores siempre es la forma o estilo que debes codificar. La mayoría del tiempo no hay 2 programadores que escriban el código de la misma manera que otro. Esto se debe a que es mas una cuestion de gustos que de una metodología en sí. 

Imaginemos que el equipo se pone de acuerdo y tenemos una persona que se dedique a revisar el estilo de codificación, ¿Bastante tedioso no? Aquí es donde podemos utilizar una herramienta de automatización como StyleCop.

¿Que es StyleCop?

StyleCop analiza nuestro código C# para aplicar un conjunto de reglas de estilo y coherencia a nuestro código. Debemos tener en cuenta que hay 2 versiones de StyleCop. Hasta hace poco se usaba StyleCop pero ahora la recomendación es usar StyleCop Analyzer debido a que la versión anterior no tendrán grandes cambios ni nuevas funcionalidades.

Veamos un ejemplo de cosas que podemos solucionar con StyleCop.

if(condition) return;

La herramienta se encargará de identificar todos los lugares donde se encuentre la declaración de la primera parte del ejemplo y nos alerta al compilar que hay código que no cumple las reglas de estilo.

Recordemos que estas reglas deben ser acordadas con el equipo de trabajo. Por default, StyleCop, trare muchas reglas, por ejemplo: cantidad de espacios en blanco, como declarar nombres de propiedades, variables o métodos, pero tal vez, no todas nos gusten o se adapten a nuestro equipo.

Configurar StyleCop

Luego de crear nuestro proyecto para agregar StyleCop debemos hacerlo desde un paquete Nuget. Para esto haremos botón derecho sobre nuestro proyecto, seleccionaremos “Administrador de paquetes Nuget” y se nos abrirá la venta. En el buscador escribiremos StyleCop.Analyzers y presionaremos install. Pueden verlo en a siguiente animación.

Perfecto! Ya lo tenemos disponible en nuestro proyecto.

¿Cómo usar StyleCop?

Lo primero que haremos es modificar nuestro método main con el siguiente código:

using System;

namespace StyleCopDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            HelloWorld1();
            HelloWorld2();
            HelloWorld3();

            Console.ReadLine();
        }

        private static void HelloWorld1()
        {
            Console.WriteLine("Hello World! 1");
        }

        private static void HelloWorld2()
        {
            Console.WriteLine("Hello World! 2");
        }
        private static void HelloWorld3()
        {
            Console.WriteLine("Hello World! 3");
        }
    }
}

Veremos que en nuestra ventana de lista de errores aparecerá en apartado advertencias(Warnings) errores que comienzan con el código SA de StyleCop Analyzer.

Un pequeño truco, si hacemos clic en el código nos llevará al sitio web que nos explicara a qué se debe ese error y la información correspondiente a la regla que lo dispara y cómo debemos reparar ese código para eliminar el warning.

Configurar Reglas

Para configurar la reglas que se aplicaran al código tenemos 2 caminos. El primero es hacerlo desde en panel de reglas, se accede haciendo botón derecho sobre el proyecto y seleccionando propiedades. La segunda es agregar un archivo stylecop.json para el proyecto.

Para ver el primer panel de reglas debemos ir a Solution Explorer, desplegar dependencias, analizadores, por último, seleccionamos StyleCope.Analyzer.

Podemos configurar qué nivel de gravedad tiene entre error, advertencia, sugerencia, silencio o ninguna.

Cada una de las opciones tiene un resultado diferente, los más importantes:

  • Advertencia, aparece en la lista de errores en el apartado de advertencias.
  • Error, se mostrará en el apartado de error y subraya con rojo en el editor el código inválido impidiendo la compilación del proyecto.
  • Segurencia, aparecerá en el apartado de la sugerencias.
  • Ninguno, la regla no se comprobará.

Otro camino para configurar la reglas es utilizar un archivo stylecop.json. Podemos crearlo automáticamente a partir de una regla. Cuando nos está marcando la lámpara, presionamos y seleccionemos “Add StyleCop setting…”. Esto nos creará el archivo con la regla.

La regla que creamos tiene que con el copyright como cabecero de los archivos. En nuestro archivo JSon, en “companyName” completamos con “StyleCop DEMO”. El siguiente paso es agregar el archivo como archivo adicional de analizador. Para esto tenemos que ira la propiedades del archivo y configurarlo en acciones de configuración. Un aves listo al aplicar la regla veremos como pone en nuevo companyName.

Ahora podemos ver que nos está marcando el using. Una de la reglas dice que todos los using deben están declarados dentro del namespaces:

Si queremos cambiar esta línea, y dejar que los using queden fuera del namespace, podemos agregar la regla en nuestro archivo de configuración.

"orderingRules": {
     "usingDirectivesPlacement": "outsideNamespace"
 }

Para ver todas las reglas podemos consultar la documentación correspondiente. Pero casi siempre las reglas por default cubren todas las necesidades básicas y estándar.

Por último, vamos a ver un ejemplo más:

   public class Customers {
        public string _name;
    }

Tenemos un clase que no respeta varias reglas. Primero, tenemos la regla “A C# code file contains more than one unique type.” al ejecutar la regla nos moverá el tipo a un archivo nuevo de c#. Segundo, tenemos la regla formato de clase. Tercero y último, no dice que la clase debe estar documentada, pero supongamos que no queremos hacerlo podemos agregar una excepción para que no sea tenida en cuenta.

Conclusiones

Siempre debemos llegar a un acuerdo con el equipo de que reglar queremos implementar y que tan grave pueden ser no respetarlas. Por esta razón, el mejor camino es dejar que StyleCop haga el trabajo por nosotros con solamente un esfuerzo inicial configuración. Esta guía es bastante simple, pero los invito a seguir investigando un poco más sobre esta excelente herramienta.

Referencias

https://docs.microsoft.com/en-us/dotnet/fundamentals/productivity/code-analysis

Fernando Sonego

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *