PHP Linting & Pre-Commit Hooks

PHP Linting und Pre-Commit Hooks

Wie jeder Entwickler habe auch ich meine eigenen Hobby-Projekte, an denen ich nach der täglichen Arbeit entwickle und tüftle. Nach einem stressigen Arbeitstag kann sich beim coden schon mal der ein oder andere „Flüchtigkeitsfehler“ wie fehlende Semikolons oder Kommata einschleichen. In diesem Beitrag möchte ich euch eine Möglichkeit zeigen, wie Ihr solche Fehler frühzeitig erkennen könnt und kein kaputter Code in eure Versionsverwaltung gelangt. Mit ein bisschen Git Magie ist es ganz einfach, versprochen.

PHP Lint

PHP Lint ist ein Kommandozeilenprogramm, das PHP Skripte auf Syntaxfehler überprüft und diese ausgibt. Aufrufen könnt ihr PHP Lint folgend:

So weit so gut, aber wir wollen ja nicht bei jeder Änderung an unseren Dateien per Hand PHP Lint laufen lassen.

Git Pre Commit Hook

Zum Glück gibt es ja die guten Hooks von git. Hooks erlauben es euch, in eurem Repository Skripte zu hinterlegen, die von git dann in bestimmten Situationen ausgeführt werden. Wer von euch schon einmal mit WordPress oder PHP Frameworks wie CodeIgniter gearbeitet hat, der sollte das Konzept kennen.

Der Hook, der sich hier nahezu perfekt anbietet, ist der pre-commit-hook, der vor jedem commit ausgeführt wird. Mit diesem Hook haben wir also die Möglichkeit, einen Commit zu verhindern, falls PHP Lint Fehler in unseren Dateien entdeckt.

Wir brauchen also nur noch ein Shell Skript, das rekursiv unsere PHP Dateien durch PHP Lint jagt und im Falle eines Syntaxfehlers den Commit Vorgang abbricht. In unserem Code-Repo gehen wir nun in den Ordner „.git/hooks“. Dort legen wir eine Datei mit dem Namen „pre-commit“ an und fügen folgendes Skript ein.

Ich hoffe, ich konnte euch mit diesem QuickTip weiterhelfen und ihr werdet in Zukunft weniger Vertipper und Flüchtigkeitsfehler in euren Projekten haben.

Bild: Flickr / justinwoodbridge

Veröffentlicht von

Lucas

Grafik- & Interfacdesigner

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *