PHP Code Sniffer und Mess Detector in Netbeans 7.0 integrieren

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 :)

Dieser Beitrag wurde unter PHP, Web-Entwicklung, Werkzeuge veröffentlicht. Setze ein Lesezeichen auf den Permalink.

11 Antworten auf PHP Code Sniffer und Mess Detector in Netbeans 7.0 integrieren

  1. Chris sagt:

    Hallo,

    dein Tutorial ist sehr hilfreich, jedoch mache ich das ganze unter Windows, was ja insofern kein problem ist. Jedoch schlägt der Klick bei mir auf test settings immer fehl, der Pfad zu der batch Datei bei phpMD und CodeSniffer ist korrekt und beinhaltet keine Leerzeichen weil ich dachte dass es daran liegt. Hattest du das auch schonmal? Ein kurzes Feedback würde mich freuen, danke.

    Viele Grüße
    Chris

  2. Oliver sagt:

    Hi Chris, wenn ich auf Windows (7) über PEAR phpMD oder phpCS installiere, landen die Steuerungsdateien immer direkt im PHP-Ordner. Im Moment habe ich den unter C:\php-5.3.6\.

    Das heisst, um phpCS anzuschmeissen, reicht bei mir als batchfile der Pfad zu C:\php-5.3.6\phpcs.bat. Beim Klick auf Test settings bestätigt Netbeans mir auch die Auswahl. Unter Windows hatte ich beizeiten ein bisschen Verzögerung, bis mir im Tasks-Fenster auch wirklich die einzelnen Nachrichten angezeigt wurden. Ich habe dann die offene Datei immer mal ein bisschen verändert (Leerzeile dazu oder so) und nochmal gespeichert – dann kamen auch die CodeSniffer-Meldungen.

  3. Chris sagt:

    Hi Oliver,

    ich benutze Mowes und musste diesen in ein verzeichnis ohne Leerzeichen reinkopieren damit er pear über die go-pear.bat installierte danach habe ich system|local und NICHT system ausgewählt. 5.3.* ist bei mir die letzte version und bei mir ist ein vorgefertigter PEAR ordner drin so dass er dort alles reinkopiert. Wiegesagt Auf der Konsole funktioniert es einwandfrei. der Pfad sieht so aus C:\MoWeS\php5\PEAR\PEAR\CodeSniffer\scripts\phpcs.bat und C:\MoWeS\php5\PEAR\PEAR\PHPMD\phpmd.bat. Selbet wenn ich test settings einfach ignoriere schmeißt mir netbeans eine exception:
    Codesniffer (Errors) Configuration Exception, check Settings! See IDE LOG (org.jmgl.php.codesniffer.BatchInterface) org.xml.sax.SAXParseException index.php

    Eigene Dateien/NetBeansProjects/PhpProject1/index.php:1

    Auch google kann mir leider nicht weiterhelfen… Benutze auch Windows 7 und Netbeans 7.

  4. Oliver sagt:

    Bitte wirf mal einen Blick in Deine phpcs.bat. Dort dürfte nur eine einzige Zeile drinstehen, die den CodeSniffer an Deine PHP-executable schickt. Ggf. muss der Pfad zur php.exe oder zur phpcs-binary (sollte direkt neben der phpcs.bat liegen) korrigiert werden. Hilft Dir das?

  5. Chris sagt:

    Hi,

    ich hab mir die bat Datei zum xten mal angeschaut, keine Änderung. Das steht bei mir drin:

    http://pastebin.com/ztzYS0ed

    Habe auch mal die Pfade selbst angegeben bis auf @php_bin@. die Batch liegt im Ordner:
    C:\MoWes\php5\PEAR\PEAR\CodeSniffer\scripts

    habe auch schon die Ordner mal anders kopiert, schick mir doch mal bitte den Code deiner batchdatei und sag mir mal bitte wo deine CoderSniffer Dateien liegen.

    Danke und sry für das Nerven :D
    Grüße Chris

  6. Chris sagt:

    Ok hat sich erledigt, hab es nun mal hart reingeschrieben:

    C:\MoWeS\php5\php.exe C:\MoWeS\php5\PEAR\PEAR\CodeSniffer\scripts\phpcs %*

    Vielen Dank für deine Hilfe, ist erstmal ein Anfang. :)

    Danke und Grüße
    Chris

  7. Chris sagt:

    Tut mir leid ich hab noch was ^^ nun passiert das gleiche mit phpMD. doch dieser Ordner hat nicht wie phpCS eine Datei mit namen phpcs und eine phpcs.bat sondern nur eine phpmd.bat und eine phpmd.php. Selbst in der Konsole bekomm ich es nicht zum laufen unter Windows, leider. Vielleicht weißt du nochmal rat.

    Danke dir
    Grüße Chris

  8. Tobi sagt:

    Ich musste auf meinem Mac mit Lion noch den include-path in der /etc/php.ini folgendermassen anpassen:

    include_path => .:/usr/lib/php/pear

    Per default war die Zeile auskommentiert.

  9. Tobi sagt:

    Achso, ansonsten vielen Dank für das Tutorial! :)

  10. Jörn Dreyer sagt:

    Im log findet sich zu “Codesniffer (Errors) Configuration Exception, check Settings! See IDE LOG (org.jmgl.php.codesniffer.BatchInterface) org.xml.sax.SAXParseException index.php” bei mir noch folgendes:
    Given output was: " ...

    Einfach in die php.ini eine Zeile mit
    date.timezone = "Europe/Berlin"
    einfügen und der Fehler tritt nicht mehr auf.

    In den Kommentaren zu date.timezone finden sich noch weitere Beispiele.

    Jetzt muss ich nur noch raus finden wie ich NetBeans sage das er den Cache leert und die Dateien neu parst, damit die Action Items alle aktualisiert werden. Aber irgendwas ist ja immer …

  11. Pingback: Netbeans und PHP Codesniffer - Michael Bohn Webentwicklung

Hinterlasse eine Antwort

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

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>