Como configurar Git Hooks + ESLint

Todo mundo comete erros! Uma variável não declarada aqui, um erro de digitação ali e quando percebemos, fizemos commit de um código com erros de sintaxe. Eu já fiz isso, você já fez isso e eu posso apostar que todos desenvolvedores já fizeram isso alguma vez. Não sinta-se mal, errar é humano.

Então alguém inventou os linters. Linters analisam seu código e verificam se você esqueceu de fechar um colchete ou não declarou uma variável. E se pudéssemos rodar os linters automaticamente quando fizermos commit? É possível! Aqui está como:

Instalação

  1. Instalar Node.js, você pode baixá-lo aqui.
  2. Instalar Git, você pode baixá-lo aqui.

Criando um projeto

Abra o terminal e crie um novo projeto:

$ mkdir eslint_git_hooks # Cria uma nova pasta com o nome “eslint_git_hooks”

Agora que nós temos o projeto estruturado, precisamos criar a base do projeto.

Você pode baixar um arquivo .eslint pronto para aceitar ES6 do meu gist, clique aqui.

Agora adicione este arquivo à raiz do eslint_git_hooks. A estrutura de seu projeto deve parecer com isso:

Estrutura do projeto eslint_git_hooks
Estrutura do projeto eslint_git_hooks
Estrutura do projeto eslint_git_hooks

Configure o Git Hooks

Git Hooks é a maneira como o git executa scripts quando alguma ação é realizada. No nosso exemplo, vamos rodar o ESLint antes de todos os commits, então se o ESLint falhar, as mudanças não serão enviadas para o servidor. Para evitar que façamos commit de variáveis sem declaração, funções sem chaves de fechamento e assim por diante.

Você pode acessar os Hooks a parttir da pasta eslint_git_hooks com o seguinte comando.

$ cd .git/hooks

Se você listar os arquivos, vai ver que existem várias opções, no nosso exemplo vamos usar o pre-commit.sample.

Então copie o arquivo com o seguinte comando:

$ cp pre-commit.sample pre-commit

Abra o arquivo pre-commit no seu editor de texto favorito e vamos mudar duas linhas:

  1. Opcional: Comente a verificação de espaços em branco excessivos
# exec git diff-index — check — cached $against — 

Se você não comentar esta verificação, o linter vai pegar todos os espaços em branco excessivos em todos os arquivos, inclusive nos arquivos da pasta node_modules. Você pode evitar que o linter passe pela pasta node_modules depois.

2. Adicione o comando do ESLint no final do arquivo pre-commit:

eslint .

Testes

Antes de fazer o teste, reinicie seu terminal, para que o comando ESLint esteja disponível.

$ exec bash

Agora, toda vez que você fizer um commit o ESLint vai rodar e avisar sobre problemas no seu código.

Demo

Você pode encontrar o projeto demo aqui.

Senior Backend Software Engineer (Node.js) www.amirelemam.com

Senior Backend Software Engineer (Node.js) www.amirelemam.com