Ziel: Sicherstellen, dass dein PHP-Code den definierten Codierungsstandards entspricht, bevor er ins Repository gepusht wird. Dies erfolgt durch Integration von PHP_CodeSniffer mit PHPUnit in einem pre-commit Hook.
1. Installation von PHP_CodeSniffer
- Installiere PHP_CodeSniffer via Composer:
composer require --dev squizlabs/php_codesniffer
- Überprüfe die verfügbaren Standards
./vendor/bin/phpcs -i
Dieser Befehl zeigt eine Liste aller verfügbaren Coding-Standards an. Bspw:
The installed coding standards are MySource, PEAR, PSR1, PSR2, PSR12, Squiz and Zend
2. Konfiguration von PHP_CodeSniffer
- Erstelle/konfiguriere eine
phpcs.xml.dist
im Root-Verzeichnis:
<?xml version="1.0"?>
<ruleset name="CustomRules">
<file>src</file>
<file>tests</file>
<!-- Verwenden Sie die PSR-12-Regel als Basis -->
<rule ref="PSR12"/>
<!-- Prüfen auf TODO-Kommentare -->
<rule ref="Generic.Commenting.Todo"/>
</ruleset>
- Konfiguriere das
phpcs
-Tool in deinerphpunit.xml.dist
:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
bootstrap="vendor/autoload.php"
colors="true"
verbose="true"
stopOnFailure="false"
failOnWarning="true"
failOnRisky="true"
stopOnError="false"
stopOnWarning="false"
>
<testsuites>
<testsuite name="Application Test Suite">
<directory>./tests</directory>
</testsuite>
</testsuites>
<!-- Optional: PHPUnit Listener für PHP_CodeSniffer Integration -->
<listeners>
<listener class="PHP_CodeSniffer\Standards\PHPUnit\PHPUnitListener">
<arguments>
<string>--standard=PSR12</string>
</arguments>
</listener>
</listeners>
</phpunit>
3. Integration in den GIT pre-commit Hook
- Erstelle (oder ergänze) den pre-commit Hook in
.git/hooks/pre-
commit
#!/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 PHP_CodeSniffer nur auf den vorgemerkten Dateien
./vendor/bin/phpcs -n $staged_files
if [ $? -ne 0 ]; then
echo "PHP_CodeSniffer hat Fehler in den vorgemerkten Dateien gefunden. Commit wird abgebrochen."
exit 1
fi
- Mach den pre-commit Hook ausführbar:
chmod +x .git/hooks/pre-commit
4. Wichtige Ausgaben verstehen
phpcs
: Zeigt Verstöße gegen die Coding-Standards an.phpcbf
: Automatische Korrektur von einfachen Verstößen.
./vendor/bin/phpcs -n # Der Schalter -n unterdrückt harmlose Warnings
./vendor/bin/phpcbf --standard=phpcs.xml.dist src/
Natürlich können phpcs
und phpcbf
mit einzelnen Dateien aufgerufen werden.
- Fehler und Warnungen: Werden als „ERROR“ oder „WARNING“ gekennzeichnet.
- Details zur Korrektur: Werden spezifisch zu den betroffenen Dateien und Zeilen angezeigt.
5. Fazit
Mit dieser Integration stellst du sicher, dass dein Code den Coding-Standards entspricht und Tests erfolgreich durchlaufen, bevor du deine Änderungen ins Repository pusht. Dies verbessert die Codequalität und reduziert potenzielle Fehler im Produktionscode erheblich.