Cuando trabajas con equipos, ya sea el tamaño que sea, unas personas verán mejor usar un estilo y otras otros.

Lo que no veo cuando trabajamos en Visual Studio, es un NuGet para mantener un estilo, ni siquiera ReSharper y eso que soy cliente de JetBrain desde hace años, pago religiosamente mi licencia cada año.

Uno de los NuGet que no estoy nada de acuerdo con meterlo en un proyecto es: StyleCops, máxime cuando ni siquiera ya tiene soporte para Visual Studio 2022.

O por ejemplo usar la extensión de SonarLint. Otra de las grandes herramientas utilizadas, aunque si usas SonarQube o SonarCloud, es muy posible que quieras seguir teniéndola.

Entonces, ¿qué puedo hacer?

Algo tan sencillo como usar los Hooks de Git.

Los Hooks de Git son scripts que se ejecutan automáticamente antes o después de que Git ejecute un comando como Commit o Push.

Los podemos pasar antes o después de la acción, pero yo os voy a recomendar su uso para dos cosas:

  • Revisar el formato.
  • Pasar test

Los siguientes ficheros deben estar en  .git\hooks, o bien podemos crear una carpeta .git-hooks (opción deseable que esté asociada a Git) para no tener que hacer estos pasos a mano. Pero como a veces trabajas con personas que no lo quieren, yo siempre me monto mis pre-commit y pre-push para intentar minimizar problemas que pueden ser automatizados.

E ir a este enlace para bajaros un formato predefinido de formato para tus aplicaciones, ya te podrás poner más tarde a personalizarlo para que cuadre con tu equipo (recuerda hacer una sesión para consenso):

Este fichero debe estar a la altura de la solución, como veis al descargar el ejemplo: https://github.com/jmfloreszazo/GitHookSamplesStyleVS2022

Y como podreis observar si no rompo una regla, al hacer un commit me muestra este mensaje (en esta ocasión desde el interface de GitKraken)

#!/bin/sh
echo "Formatting the .cs files..."
# Valida HoosPath
git config core.hooks
# Format the code
FILES=$(git diff --cached --name-only --diff-filter=ACM "*.cs")
if [ -n "$FILES" ]
then
    dotnet-format ConsoleApp.sln --include $FILES
    echo "$FILES" | xargs git add
fi
if [ $? -ne 0 ]; then
  echo "Error formatting changes...."
  exit 1
fi
echo "Formatting done!"
exit 0

Y hacemos un push, en esta ocasión, compila y pasa los test, puedes modificar el fichero para que salten errores, etc. etc.

#!/bin/sh
echo "Building before push"
dotnet build
echo "Build done!"
echo "Test before push"
dotnet test "./TestProject/TestProject.csproj"
echo "Test done!"

Te quedaría hace un control por si no pasa los test no permitir hacer un un push.

Como podeis observar es realmente sencillo mantener el orden en tu proyecto sin engordar el entorno de trabajo o incluir NuGet innecesarios.

Lo malo que tiene esta técnica frente al control en GitHub, GitLab, Azure DevOps, es que con borrar el fichero del Hook, nos saltamos este control.

Embajador GitKraken Rectangular

Píldora sobre Visual Studio 2022

Normalmente veo que existe la tendencia a ir a soluciones de terceros cuando ya Visual Studio 2022 nos da la opción de limpiar el código en base a reglas y usando el editor visual (yo uso ReSharper, por eso no pongo capturas si no el cógido tal cual).

En este caso he crado una apliación de consola y he añadido este codigo.

try
{
    int variableUnused = 1;
    int variable = 1;
    if (variable == 1)</p>
<p>        Console.WriteLine("Variable = 1");
    }
    else</p>
<p>        Console.WriteLine("Variable != 1");
    }
}
catch
{
}

Desde la solución accedemos a la limpieza de código:

Y aquí podemos acceder a los perfiles para que los pongas como mejor te guste, luego exportas el fichero y lo compartes con el equipo:

Ahora sí, lanzamos la limpieza del codigo del perfil y vemos el resultado:

try
{
    Console.WriteLine("Variable = 1");
}
catch
{
    // ignored
}

Como yo tengo un montón de reglas activadas, me borra las variables no usadas, me quita código innecesario y me pone un comentario en el Catch.

Os advierto que antes de subir el commit reviséis el cambio que realiza por qué quizá no os interese y tengáis que modificar la configuración de las reglas.

Como veis, tenemos opciones de sobra sin tener que recurrir a NuGet o herramientas de terceros, es cuestión de conocer tu entorno de trabajo: Git y Visual Studio 2022.

Desde mi punto de vista, la combinación de ambos hace que la consistencia del código sea muy alta.