Overcommit te ajuda a cuidar do seu código
Já ouviu falar da gem Overcommit? A função dela é ajudar a manter os padrões de qualidade, definidos por você ou pelas diversas comunidades de linguagens de programação mundo afora.
Por definição, Overcommit é uma ferramenta para administrar e configurar Git hooks, que são ações pré configuradas
para executar um script assim que ocorrerem. Encontramos algumas dessas ações na gem, sendo as mais importantes:
commit-msg
, pre-commit
e post-checkout
. As duas primeiras ocorrem durante um commit, enquanto a última é
acionada sempre que ocorrer uma mudança de branch via checkout por exemplo. É possível criar o seu próprio hook,
mas só isso demandaria um post próprio.
Mas o que ele faz?
Agora vamos ao que realmente importa: o que Overcommit pode fazer por mim? É o seguinte, sempre que você fizer um commit por exemplo, vários scripts vão ser rodados. Esses scripts vão checar desde a sua mensagem no commit até a sintaxe do seu código. Vou detalhar alguns deles aqui:
-
CommitMsg - HardTabs, RussianNovel TrailingPeriod: Esses três scripts vão cuidar para ver como está sua mensagem do commit, checando a formatação, tamanho e caracteres do mesmo.
-
Brakeman: Checar por falhas de segurança
-
BundleCheck: Checar as dependências do seu Gemfile
-
Coffee/Css/Html/Scss/Haml Lint: Analisa a sintaxe de cada um desses, além de muitos outros, incluindo linguagens de programação como Java, Ruby, Python etc.
-
MergeConflicts: Sabe aquele conflito que você esqueceu de resolver em algum arquivo? Então
-
PryBinding: Esqueceu de um
pry
lá noController
? Relaxa, ninguém vai te zoar agora. -
Rubocop: Talvez o mais importante para os rubystas. Rubocop é um analisador de código estático que segue vários padrões de código criados pela comunidade e mantidos no Ruby Style Guide. Ele é customizável, então você não precisa seguir tudo caso não queira.
Instalando e Configurando
Para instalar é simples:
gem install overcommit
Depois, dentro do repositório que pretende utilizar:
overcommit --install
Isso irá criar o arquivo .overcommit.yml
no seu repositório. Basta seguir as instruções ali e da página da gem
para configurar os hooks que achar necessário para o seu projeto!
Algumas dicas
Você pode bloquear um commit ou apenas avisar que ele feriu alguma regra de um dos scripts. Dentro do arquivo de configuração você vai ver algo assim:
Dessa forma não será permitido que o commit ocorra até que o código que foi alterado esteja de acordo com o Rubocop.
Caso julgue necessário, é possível permitir que o commit ocorra, mas serão mostrados avisos de que algumas linhas
modificadas não estão de acordo. Para isso basta modificar a última linha para on_warn: warn
.
Além disso, serão sempre mostradas como um aviso apenas as outras linhas do arquivo modificado que não estão de acordo com alguma checagem. Sempre vai ficar a seu critério decidir se vale a pena modificar algo ou não. Além disso, arquivos não modificados não serão examinados.
Talvez você ache necessário manter o fail
na sua configuração, mas realmente precisa fazer um commit e alguma
checagem está te tirando do sério. Não tem problema, você pode utilizar o SKIP
e fugir por hora. Basta informar
qual hook quer pular dessa vez e pronto.
SKIP=rubocop git commit
O resultado final de tudo isso
Essa primeira imagem mostra meu commit sendo bloqueado pelos motivos que estão em vermelho. Nas minhas configurações
eu não consigo terminar minha ação enquanto não corrigir esses “problemas” ou utilizar o SKIP
.
Aqui é um outro exemplo em que o que eu modifiquei seguiu todos os padrões esperados e meu commit foi um sucesso! Além disso é possível perceber que o Rubocop gerou uma warning, ou seja, ele está alertando que existem alguns “problemas” no arquivo que eu modifiquei, mas não necessariamente onde eu modifiquei. O commit já foi feito, mas eu posso modificar isso depois para se adequara aos padrões.
Conclusão
Alguns projetos são gigantescos, passam de mão em mão e são modificados diariamente por dezenas de pessoas. Algumas vezes é difícil manter certos padrões, seja por barreiras físicas ou de tempo mesmo. Se você está sofrendo com isso ou apenas quer se manter “na linha”, a gem Overcommit é uma ótima solução.