Facebook
Twitter
Google+
Kommentare
26

Eclipse PHP Tool Integration

Jetzt sitze ich schon seit drei Tagen an einem neu-entdeckten Eclipse Plugin und mir wird nicht langweilig. Die Rede ist vom „Eclipse PHP Tool Integration“ Projekt. Einem Plugin, nach dem ich schon lange gesucht und geschrieben habe und es jetzt endlich „auf dem Markt“ ist. Bevor ich aber zu sehr abschweife erkläre ich doch einfach mal, warum es geht.

phpsrc-logoEs gibt viele wunderbare PHP Tools, PHPUnit, pDepend oder PHP_CodeSniffer sind nur einige der wirklich guten. Das „Problem“ ist, dass sie alle in PHP geschrieben wurde. An sich eine tolle Sache, denn so kann auch jeder diese Tools anpassen und erweitern. Will man jetzt aber seiner IDE, in meinem Fall Eclipse PDT, beibringen, dass sie diese Tools nutzen sollen, dann steht man vor Problemen, denn Plugins müssen meistens in der Sprache der IDE geschrieben werden.

Wie ihr euch vielleicht schon denkt, hat das Eclipse PHP Tool Integration Projekt endlich diese Brücke geschaffen. Es hat sich zum Ziel gesetzt die wichtigsten PHP Tools so zu integrieren, dass sie fließend in PDT genutzt werden können. Angefangen hat das Projekt mit einer nahtlosen Einbindung des PHP_CodeSniffers, der meiner Meinung nach eines der mächtigsten Tools in der PHP Welt ist.

Stellt man es geschickt an, so kann man mit ein paar Handgriffen sein PDT so aufblasen, dass es eine ähnliche Funktionalität erreicht, wie es zum Beispiel das Zend Studio bietet. Ok vielleicht nicht ganz so mächtig, aber meine favorisierten Features sind abgedeckt. Ich selbst habe die letzen drei Tage verwendet, die richtigen CodeSniffer Regeln einzubauen und noch ein paar Sniffs zu schreiben.

Damit ihr euch das ganze mal vorstellen könnt, hier ein paar Screenshots:

screen1

DefinedButNeverUserdSniff

Im ersten Screenshot könnt ihr wunderbar sehen, dass mir mein PDT anzeigt, dass ich eine Variable definiert habe, sie danach aber gar nicht mehr nutze (das steht unter der Infobox). Mittlerweile habe ich meine IDE so eingerichtet, dass sie mir Verstöße gegen unsere Coding Guidelines komplett abdeckt. Sie prüft zusätzlich noch, ob Variablen benutzt werden, die vorher gar nicht definiert wurden.

screen2

Hier noch kurz ein Screenshot der Administrationsoberfläche. Schön aufgelistet alle bekannten Standards. Meiner Meinung nach also wirklich schön gelöst.

Dieser Artikel soll erst mal ein Einstieg in das Tools sein. Ich würde gerne noch ein oder zwei weitere darüber schreiben, denn ich denke, dass man sich sehr viel Arbeit sparen kann, wenn man es sich perfekt einrichtet und somit in Zukunft weniger Fehler produziert. Im nächsten Teil möchte ich euch dann noch ein wenig über den „External PHP Checker“ erzählen, mit dem ihr eure eigenen Tools einbinden könnt und was man noch so alles zaubern kann mit dem Werkzeug.

Über den Autor

Nils Langner

Nils Langner ist der Gründer von "the web hates me" und auch der Hauptautor. Im wahren Leben leitet er das Qualitätsmanagementteam im Gruner+Jahr-Digitalbereich und ist somit für Seiten wie stern.de, eltern.de und gala.de aus Qualitätssicht verantwortlich. Nils schreibt seit den Anfängen von phphatesme, welches er ebenfalls gegründet hat, nicht nur für diverse Blogs, sondern auch für Fachmagazine, wie das PHP Magazin, die t3n, die c't oder die iX. Nebenbei ist er noch ein gern gesehener Sprecher auf Konferenzen. Herr Langner schreibt die Texte über sich gerne in der dritten Form.
Kommentare

26 Comments

  1. Schönen guten Morgen.

    Ich habe das Plugin auch erst vor ein paar Tagen entedeckt uns peiel damit etwas rum. Ich finde das schon ziemlich gelungen, nur beim CodeSniffer habe ich im Moment noch das Problem das er mir unter Windows immer den Zeilendelimiter ankreidet (Expect „\n“, Found „\r\n“). Hast Du da villeicht eine Lösung ohne die Sniffs zu excluden?

    Reply
  2. @Thilo: Das ist eigentlich komisch, denn der CodeSniffer versucht die Zeilenumbrüche richtig zu berechnen. Es sollte also klappten, egal ob die Win oder Linux verwendest, weil im Code immer eine Abstraktion stattfindet. Hast du vielleicht eine Idee, welche Sniff das versagt, dann kann ich ja mal reinschauen.

    Reply
  3. @Nils: Nun ja ich habe das Projekt von einem SVnRepository ausgechekct, wleches auf einem Linux-Server liegt. Vllt. liegt’s daran. Aber wenn ich die Sniffs ‚PEAR/Sniffs/Files/LineEndingsSniff.php‘, und ‚Squiz/Sniffs/Files/LineEndingsSniff.php‘, exclude klappt es. Eine Sache die mir noch eingefallen ist. Weisst du zufällig wie ich einzelne Ordner in Eclipse vom Codesniffer ausnheme? Irgendwo gab’s die Möglichkeit den Kommandozeilenaufruf anzupassen abe rich weiss nicht mehr wo.

    Reply
  4. @alex b.: ja netbeans bietet diese funktion. frage mich eh gerade ob eclipse für php netbeans für php schlagen kann. mal abgesehn davon dass eclipse für php ich nie zum laufen bekommen habe finde ich, dass netbeans für php eigentlich alles abdeckt was man zum rudimentären entwickeln brauch.

    kann man mit dem eclipse gelöt auch php debuggen? (wie gesagt hab es nie zum laufen bekommen)

    btw, der erste link in dem beitrag funzt net im feedreader, da wird nur ein javascript aufruf angezeigt und ein kaputter link dargestellt.

    Reply
  5. Codesniffer Integration in Netbeans? Hey, dann wären die aber weit vorne mit dabei, daran darf getrost gezweifelt werden (nichts gegen Netbeans).

    Reply
  6. Ich habe das mal beim Zend Studio 7 versucht, aber irgendwie hab ich das wohl falsch eingerichet – ich musste den .metadata löschen um den Workspace wieder öffnen und verwenden zu können 🙁

    Reply
  7. @Thilo: Das mit dem Ordner wird nicht so einfach funktionieren. Leider ist das ein Kommandozeilen Tool und man kann über die Eclipse Einstellungen noch keine optionalen Parameter mitgeben. Was du aber vielleicht mal probieren kannst, ist ein separates PHP Skript hinzulegen und damit das phpcs.php Skript zu „überschreiben“ da kannst du dann bestimmt Parameter reinstecken.

    Reply
  8. @Alex B.: Ist gut möglich, dass NetBeans etwas ähnliches bietet und zwar schon out-of-the-box. IDEs sind aber immer so eine Art Religionsfrage. Dem einen gefällt NetBeans besser, dem anderen PDT.

    Reply
  9. Hi,

    danke für den Artikel. Ich habe das gerade mal auspobiert und bekomme diesen Fehler:
    Opening brace should be on the same line as the declaration

    Was soll das genau bedeuten?
    Der Code sieht so aus:
    private function request()
    { <- hier kommt der Fehler

    Danke schonmal

    Reply
  10. @Fabian: Das sagt dir einfach, dass du in dem Standard, den du gerade ausgewählt hast, die öffnende Klammer in die selbe Zeile stellen musst, wie die Funktionsdeklaration.

    private function request() {
    }

    Reply
  11. @Nils: Wenn ich das mache, dann sagt er mir, dass die Klammer in der nächsten Zeile sein muss (opening brace should be on a new line).
    Ich hab mir gerade auch mal die Regeln angeschaut und die Regel für „die Klammer muss in die selbe Zeile“ wird eigtl. garnicht eingebunden.

    Reply
  12. @Fabian: das ist komisch. Standardmäßig werden glaube ich alle Sniffs des Standards eingebunden, in dem man sich gerade befindet, auch wenn er nicht explizit angegeben ist. Ansonsten klingt das für mich auch komisch.

    Reply
  13. @Nils: Ich habe sogar mal testweise eine eigene Regelsammlung gemacht. Nur eine Regel (Leerzeichen anstatt Tabs) und selbst da werden alle anderen „Fehler“ auch angezeigt. Irgendwie etwas komisch.

    Reply
  14. *hmmm* komischerweise bekomme ich nur Fehlermeldungen, wenn ich als executable /usr/bin/php einstelle.
    Wenn ich als executable /usr/bin/phpcs einstelle läuft es erst einmal im debug-Modus. Fehler-Icons werden im Editor nicht angezeigt.

    Irgendetwas steht da auf dem Schlauch.

    Reply
  15. Ich hab das nun auch probiert zu installieren, aber bei mir kommt immer folgende Fehlermeldung, wenn PHP_CodeSniffer loslegen will:

    Unable to execute
    Reason: X-Powered-By: PHP/5.3.0 ZendServer/4.0
    Content-type: text/html
    ERROR: PHP_CodeSniffer requires the tokenizer extension to be enabled.
    In der php.ini steht die Extension aber drin und lt. phpinfo():
    „Tokenizer Support: enabled“.

    Weiß da einer Rat? Ich nutze übrigens Eclipse PDT und das Zend Executable Debugger Eclipse Plug-in.

    Grüße Peter

    Reply
  16. Hi,

    ich bekomme das ganze auch nicht zum laufen. Keine Chance.
    Das ganze WE damit verbracht… konnte mir nicht vorstellen, das Ich blöder bin als alle anderen.

    Phpcs läuft auf der komandozeile ohne Probleme.

    In Eclipse (Galileo+PDT+PTI) und einen Apache + PHP5.3 bekomme ich nur Fehlermeldungen wie Ingo und Carsten.

    an der tokenizer extension kanns ja nicht liegen…
    und wenn ich bei executable phpcs.bat wähle, bringt er im debugfenster den richtigen Batch-String aber keine Ausgabe oder Icons.

    Man kann da doch nicht so viel falsch machen, oder?

    Reply
  17. Hallo,

    im Zend Studio bekomme ich folgende Fehlermeldung:

    /Applications/Zend/Zend Studio – 7.0.0/plugins/org.zend.php.debug.debugger.macosx_5.2.26.v20090817/resources/php5/php /Applications/Zend/Zend Studio – 7.0.0/plugins/org.phpsrc.eclipse.pti.tools.codesniffer_1.1.0.R20091029000000/php/tools/phpcs.php –report=xml –standard=Generic /Users/torsten/Sites/myInvoiz/lib/model/Customer.php
    ERROR: PHP_CodeSniffer requires the tokenizer extension to be enabled.

    Wo könnte ich die Extension einschalten. Ich bin mir nicht sicher welche php Version überhaupt benutzt wird ? Die php executable aus Zen Studio wahrscheinlich ? Aber wie schaltet man dort extension ein ? Die intern php.ini hat das tokenizer Module zumindest drinstehen.

    Wäre für Ideen dankbar
    Torsten

    Reply
  18. Sehr verehrte Herren,
    ich gedenke Anzeige beim Rauschgiftdezernat gegen Sie zu erstatten !

    Das Schnüffeln mit dem von Ihnen empfohlenen CodeSniffer macht definitiv süchtig 😀

    Ich als anerkannter Formatierungsfreak habe ein komplettes Wochenende damit verbracht und bin am Montag fast nicht aus dem Bett gekommen..

    Echt ein schönes Stück – super Arbeit, schöner Artikel.

    So long,
    Nikolai

    Reply
  19. Ich hätte eine Frage
    und zwar, wie kann ich die Plugins wieder deinstallieren?

    Leider kann ich den Copy and Paste detector nicht gebrauchen, da er ein anderes Add-on blockiert

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen