Linters

Usamos rubocop para Ruby, eslint para JS y stylelint para CSS. Actualmente incluímos estos linters como dependencias de desarrollo en nuestros proyectos tanto en el package.json como el Gemfile. Debido a esto, no se necesita instalar nada aparte y basta con correr yarn install y bundle install.

Además de los linters, cada proyecto incluye archivos con sus reglas.

En el Gemfile verás que la versión de rubocop está restringida. Hay que tener cuidado al modificarla ya que no siguen Semantic Versioning y es común que un cambio en el minor introduzca breaking changes como cambio de nombre de alguna regla que podría estar definida en el proyecto.

Tips

  • Antes de hacer un commit recuerda revisar los warnings de los linters

  • Deberías fijarte solo en los warnings sobre el código que estás tocando, no es necesario corregir todos los problemas que tenga un archivo antes de agregar una feature en este

  • Si se debe arreglar un warning puntual sobre un código de tu rama que ya se commiteo una opción es hacer el cambio con un rebase o fixup, cambiando el commit en el que se introdujo el problema. Esto para dejar la historia más limpia evitando los commits del tipo style(): fix linter warnings

Plugins

Para correr los linters de manera más cómoda, podemos instalar los siguientes plugins:

VScode

Con la extensión de rubocop podrían haber problemas si se tiene un .rubocop.yml en tu root por algún otro proyecto. Esto dado que al lintear se tratan de combinar esas reglas con las locales del proyecto. Si hay diferencia entre la versión de rubocop para la que están hechos ambos archivos de reglas esto podría resultar en error como este: Metrics/LineLength has the wrong namespace.

Para evitar esto (sin borrar el archivo del root) se puede modificar los settings de la extensión para el proyecto e incluir lo siguiente: "ruby.rubocop.configFilePath": "./.rubocop.yml"

Sublime

Vim

Configurar los linters para que funcionen solo con vim puede ser un poco enredado. Una alternativa es usar VSCode con sus extensiones de linters y esta extensión de Vim, alcanzando así un punto medio entre la experiencia de uso de un editor más moderno y las features de vim.