PSR-2 & Notepad++

Standards sind wichtig. Ganz wichtig sind sie in der Programmierung! Damit sich der eigene PHP-Code an Standards hält kann man entweder beim Verfassen der Zeilen selbst darauf achten oder - wie es sich für einen EDV-Menschen gehört - die "dumme Arbeit" einem Programm überlassen.


TL;DR


Was ist PSR-2?

Für PHP haben sich die Vorgaben von PSR-2 (PHP Standard Recommendation) für die Formatierung durchgesetzt. Hier wird geklärt wie Arrays geschrieben werden (lang $array = array( 1, 2, 3 ); oder kurz $array = [ 1, 2, 3 ];), wann und wo geschweifte Klammern { auf und zu } gehen (in der selben Zeile oder doch lieber darunter) oder ob eine Leere Zeile vor oder nach einer Funktion oder Schleife eingefügt wird.

Notepad++

Natürlich kann man hochmoderne integrierte Entwicklungsumgebungen (IDE) nutzen, die PSR-2 von haus aus beherrschen (PHPStorm) oder einfach erlernen können (Visual Studio Code). Mir altem Gewohnheitstier ist das jedoch nichts. Ich möchte mein gutes altes Notepad++ benutzen und trotzdem PSR-2 formatierten PHP-Code schreiben ohne darauf zu achten.

Zutaten

PHP Cs Fixer

Für alles gibt es Helferlein. Damit PHP-Code nach den PSR-2 Vorgaben formatiert wird benötigt man ein Programm, welches diese Vorgaben umsetzt. Hier kommt der PHP Coding Standards Fixer (PHP CS Fixer) ins Spiel. Über Composer sollte dieser global installiert werden: C:> composer global require friendsofphp/php-cs-fixer

Im Verzeichnis C:\Users\$BENUTZERNAME\AppData\Roaming\Composer\vendor\bin steht dann der PHP CS Fixer als BAT-Datei zur Ausführung bereit.

NppExec

Nun muss Notepad++ nur noch wissen, wie die php-cs-fixer.bat anzusprechen ist. Hier kommt das Notepad++ Plugin NppExec zum Einsatz. Über eine einfache Skriptsprache in NppExec kann Notepad++ erweitert werden.

NppExec-Skript

Ein Skript, um geöffneten PHP-Code PSR-2 konform zu formatieren, sieht dann beispielsweise so aus.

NPP_CONSOLE OFF
NPP_SAVE
$(SYS.APPDATA)\Composer\vendor\bin\php-cs-fixer.bat fix --config "$(SYS.APPDATA)\Composer\vendor\bin\.php_cs" "$(FULL_CURRENT_PATH)"
NPP_SENDMSG NPPM_RELOADFILE 0 "$(FULL_CURRENT_PATH)"
  • NPP_CONSOLE OFF deaktiviert die NppExec-Console
  • mit NPP_SAVE wird die aktuelle Datei gespeichert
  • php-cs-fixer.bat mit dem Kommando fix aufrufen
    • Parameter für PSR-2 Formatierung mit --config übergeben (liegt bei mir im angegebenen Ordner)
    • zu formatierende Datei wird mittels $(FULL_CURRENT_PATH) definiert
  • in der letzten Zeile den nervigen "Reload"-Dialog verhindern

Das NppExec-Skript kann nun gespeichert und den Makros oder einem Shortcut hinzugefügt werden.

Quellen