Verwendung von PHPStan mit Symfony und GIT Pre-Commit Hook

Diese Anleitung beschreibt die Integration von PHPStan in ein Symfony-Projekt und die Einrichtung eines GIT Pre-Commit Hooks, um sicherzustellen, dass der PHPStan-Check vor jedem Push-Vorgang durchgeführt wird.

Voraussetzungen

  • Ein Symfony-Projekt
  • PHPStan installiert (idealerweise als Composer-Abhängigkeit)
  • GIT installiert und eingerichtet

1. Installation von PHPStan

Falls PHPStan noch nicht im Projekt installiert ist, erfolgt die Installation über Composer:

composer require --dev phpstan/phpstan

2. PHPStan Konfiguration

In der Regel wird PHPStan mit einer Konfigurationsdatei verwendet, um spezifische Regeln und Pfade für die Analyse festzulegen.

  1. Eine Datei phpstan.neon oder phpstan.neon.dist im Projektstammverzeichnis anlegen.
  2. Grundlegende Konfiguration einfügen:
parameters:
    level: 6
    paths:
        - config/
        - public/
        - src/
        - tests/
  • level: Der PHPStan-Level bestimmt die Strenge der Analysen. Stufen reichen von 0 (am wenigsten streng) bis 9 (am strengsten).
  • paths: Verzeichnisse, die analysiert werden sollen.

3. Lokales Ausführen von PHPStan

Um sicherzustellen, dass PHPStan korrekt funktioniert, sollte es manuell ausgeführt werden:

vendor/bin/phpstan analyse

Falls Fehler oder Warnungen ausgegeben werden, sollten diese vor dem nächsten Schritt behoben werden.

4. Einrichten des GIT Pre-Commit Hooks

Um sicherzustellen, dass PHPStan vor jedem Commit ausgeführt wird, wird ein Pre-Commit Hook eingerichtet. Dieser Hook wird jedes Mal ausgeführt, wenn ein git commit ausgeführt wird.

  1. Ein neues Verzeichnis .git/hooks im Projektstammverzeichnis öffnen.
  2. Eine Datei namens pre-commit erstellen (ohne Dateierweiterung).
  3. Folgendes Skript in die Datei pre-commit einfügen (oder ergänzen):
#!/bin/sh

# Listet alle Dateien auf, die für den Commit vorgemerkt sind
staged_files=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.php$')

# Wenn keine PHP-Dateien im Commit sind, überspringe die Überprüfung
if [ -z "$staged_files" ]; then
    echo "Keine PHP-Dateien zum Überprüfen."
    exit 0
fi

# Ausführen von PHPStan nur auf den vorgemerkten Dateien
vendor/bin/phpstan analyse $staged_files
if [ $? -ne 0 ]; then
    echo "PHPStan hat Fehler in den vorgemerkten Dateien gefunden. Commit wird abgebrochen."
    exit 1
fi
  1. Die Datei ausführbar machen:
chmod +x .git/hooks/pre-commit

5. Testen des Pre-Commit Hooks

Nach der Einrichtung kann der Pre-Commit Hook getestet werden, indem ein Commit ausgeführt wird:

git commit -m"Test Pre-Commit Hook"

Falls PHPStan Fehler findet, wird der Commit abgebrochen, und die entsprechenden Fehlermeldungen werden ausgegeben. Nur wenn PHPStan fehlerfrei durchläuft, wird der Commit-Vorgang fortgesetzt.