Pre-commity w Pythonie: lintersi, formatterzy i inni bohaterowie z cienia

W każdym większym projekcie przychodzi moment, w którym trzeba przestać polegać na dobrej woli zespołu i zacząć automatyzować pewne rzeczy. Jednym z pierwszych kroków w tym kierunku są hooki pre-commit. Dzięki nim możemy mieć pewność, że kod, który trafia do repozytorium, przechodzi przez ustalony zestaw narzędzi i nie zostawia po sobie bałaganu.

Czym jest pre-commit?

pre-commit to framework do zarządzania i uruchamiania hooków Gitowych – czyli skryptów, które uruchamiają się przed wykonaniem określonych akcji, np. przed wykonaniem git commit.

Dzięki pre-commit możesz automatycznie:

  • sformatować kod przy użyciu black lub ruffa,
  • sprawdzić składnię z flake8,
  • upewnić się, że nie zostawiłeś przypadkiem print() w kodzie produkcyjnym,
  • zablokować commita jeśli testy nie przechodzą,
  • i wiele, wiele więcej.

Jak to zainstalować?

Najpierw instalujemy paczkę:

$ pip install pre-commit

Następnie w katalogu głównym projektu tworzymy plik .pre-commit-config.yaml. Oto przykładowa zawartość:

repos:
  - repo: https://github.com/psf/black
    rev: 24.3.0
    hooks:
      - id: black

  - repo: https://github.com/PyCQA/flake8
    rev: 7.0.0
    hooks:
      - id: flake8

  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.4.0
    hooks:
      - id: check-yaml
      - id: end-of-file-fixer
      - id: trailing-whitespace

Na koniec aktywujemy hooki w repozytorium:

$ pre-commit install

Od teraz przy każdym git commit pre-commit odpali wszystkie skonfigurowane hooki i nie pozwoli zrobić commita, jeśli któryś z nich zwróci błąd.

Dlaczego warto?

  • Automatyzujesz sprawdzanie stylu i jakości kodu.
  • Ułatwiasz sobie i innym życie (mniej code review w stylu „tu przecinek źle, tu większy odstęp”).
  • Unikasz nieprzyjemnych niespodzianek po pushu do repozytorium.

Podsumowanie

pre-commit to jedno z tych narzędzi, które raz wdrożone, staje się niezastąpione. Pomaga utrzymać porządek, oszczędza czas i nerwy. Jeśli jeszcze go nie używasz – to świetny moment, żeby zacząć 😉


Photo by Janis Ringli on Unsplash