Netbeans ist seit der 7er Beta mein Standard-IDE auf Mac OS X. Um das Entwickeln von PHP-Anwendungen zu bereichern, habe ich dazu den PHP Code Sniffer und den PHP Mess Detector in Netbeans integriert. Der Code Sniffer warnt mich, sobald ich beim Schreiben des Codes von einem gewissen Standard abweiche. Vordefiniert sind die Coding Standards von PEAR, MySource, PHPCS, Squiz und Zend. Über eine eigene ruleset.xml kann man die Standards aber sehr leicht erweitern, bzw. sich aus den vorhandenen, sogenannten Sniffs einen neuen Standard zusammenbauen. Der Mess Detector macht mich per Fehler- oder Warnmeldung in meinem Tasks-Fenster darauf aufmerksam, dass mein Code bestimmte Grenzen überschreitet: Zyklomatische Komplexität (hehe :), die Grösse von Modulen, zu kurze Variablennamen, ungenutzter Code – trifft also generell eine Aussage über die Stabilität meiner Applikation.
Installation über PEAR
phpmd und phpcs werden über PEAR installiert. Auf Mac OS X hat man PEAR standardmässig im Pfad – d. h. ein Aufruf von pear version im Terminal liefert normalerweise den aktuellen Stand der Installation. Um den aktuellen Code Sniffer zu holen, reicht also ein:
#> pear install PHP_CodeSniffer-1.3.0
downloading PHP_CodeSniffer-1.3.0.tgz ...
Starting to download PHP_CodeSniffer-1.3.0.tgz (327,201 bytes)
...................................................................done: 327,201 bytes
install ok: channel://pear.php.net/PHP_CodeSniffer-1.3.0
Danach steht der Code Sniffer über den einfachen Befehl phpcs auf der Kommandozeile zur Verfügung.
Auch phpmd wird über PEAR installiert, benötigt zusätzlich das Paket von pdepend:
#> pear channel-discover pear.phpmd.org
#> pear channel-discover pear.pdepend.org
#> pear install --alldeps phpmd/PHP_PMD
Auch der Mess Detector steht danach auf der Kommandozeile per Befehl phpmd zur Verfügung. Die Verwendung ist etwas komplizierter, wird in der offiziellen Dokumentation aber ausreichend erklärt.
Das Netbeans-Plugin ziehen und installieren
Es gibt ein kombiniertes Plugin, welches beide Module sofort in die Netbeans Taskliste integriert. Nach Herunterladen wähle ich in Netbeans Tools > Plugins, um mir die Pluginliste anzeigen zu lassen. Unter dem Tab “Downloaded” kann ich dann den Ort für das heruntergeladene Plugin angeben und eine Installation durchführen.
Nach der Installation hat sich das PHP-Menü in den Einstellungen verändert und ich habe zwei neue Reiter: phpMD und phpCodeSniffer:
Um beide Werkzeuge nun in Netbeans zu integrieren, wähle ich den jeweiligen Reiter und muss den Pfad zur entsprechenden Batch-Datei angeben. Ausführbare PEAR-Pakete werden im Standard im Pfad /usr/local/bin/ installiert und sind dort zu finden.
Die rulesets werden auf der phpmd-Webseite erklärt. Ein Klick auf “test settings” sagt uns, ob wir die richtige ausführbare Datei erwischt haben.
Das gleiche Spiel wiederholen wir nun für den CodeSniffer. Auch hier wählen wir den Standard, den wir verwenden wollen. Im Screenshot sieht man, dass ich den PEAR-Standard verwende:
Sind beide Module einmal installiert, gehe ich in mein Projektfenster und öffne eine PHP-Datei. Netbeans verfügt über eine exzellente Filterung von Tasks (eine der Gründe, warum ich derzeit Netbeans vor Eclipse PDT verwende). Ich kann einstellen, ob ich meine Tasks über alle Projekte, ein Projekt, nur offene Dateien oder nur die angezeigte Datei darstellen will. Gleichzeitig kann ich mir Filter bauen wie “Development”, “Quality” oder “TODO”, um mir nur bestimmte Tasks anzeigen zu lassen. Ausserdem lassen sich Tasks als allgemeine oder gruppierte Listen anzeigen. Das macht es einfach, einen Bereich nach dem anderen abzuarbeiten und nicht immer 500+ Todos, Fehler und Warnings mit sich rumzuschleppen.
Wenn man in einem Team arbeitet, sind Mess Detector und Code Sniffer meiner Meinung nach unverzichtbar. Auch wenn man alleine arbeitet, verhindert die Netbeans-Integration beider Werkzeuge so manchen Bug und manchen schlechten Code. Der nächste Schritt ist die Einbindung von den Tools als pre-commit Hook im Versionierungssystem. Aber das machen wir ein anderes mal :)










