• PHP_Beautifier – Eigene Filter schreiben

    von am 16. Oktober 2009

    Ich habe das Glück viel mit diversen Werkzeugen in meinem Job rumzuspielen. So durfte ich mich zum Beispiel letzens in den PHP_Beautifier aus dem PEAR Projekt auseinandersetzen. Ich hatte ja schon mal ein paar Worte zu der Verwendung verloren. Leider habe ich es nicht hinbekommen, mit den Regeln, die der Beautifier anbietet unser Regelwerk hier umzusetzen. Was also machen? Neues Tool suchen, hat nicht geklappt, da es in der Hinsicht eigentlich nichts besseres gibt. Also “einfach” erweitern.

    Die Filter des Beautifiers sind eigentlich simple aufgebaut. Ich habe eine Methode call, die jedes Token in meinem Source Code durchlaufen muss. Dort kann ich dann den den Content verändern. Ich kann zum Beispiel hinter jedes Plus ein Space einfügen. Zusätzlich habe ich auch die Möglichkeit eine Methode nach einem Token zu benennen und dann direkt auf dieses Token zu reagieren.

    
    class PHP_Beautifier_Filter_SoSomesthingStupid extends PHP_Beautifier_Filter
    {
      function t_whitespace( $sTag )
      {
        $this->oBeaut->add($sTag . " /* ein whitepace block */");
      }
    }

    Dieser vollständige Filter würde jeder Leerzeichengruppe einen kleinen Kommentar verpassen. Toll, oder? nein natürlich nicht toll, aber man sieht, dass es doch eigentlich ganz einfach ist. Das oBeat Objekt spiegelt übrigens das Dokument wieder. Habt ihr euch aber wahrscheinlich schon gedacht.

    Eine wichtige Anmerkung muss hier noch gemacht werden. Falls es keinen Filter gibt, der ein spezielles Token abarbeitet, so läuft es in den default Filter. Genau das war auch mein Problem. Der default Filter schneidet einfach alle neue Zeilen raus. Das heißt der Code wird kompakt, aber meiner Meinung nach nicht leserlicher. Manchmal verwende ich nämlich Leerzeilen im Blöcke zu gruppieren. Tja dumm gelaufen, dass macht der Beautifier nicht.

    function t_whitespace($sTag)
    {
      if (substr_count($sTag, "\n") >= 2)
      {
        $this->oBeaut->addNewLineIndent();
      }
    }

    Glücklicherweise funktioniert der Code, den ich geschrieben hab gegen das Problem. Sobald der Whitespace Block mehr als zwei neue Zeilen beeinhaltet, schreibe eine neue Zeile schön eingerückt wieder in den Code, ansonsten werf sie raus. Klappt wunderbar. Warum wir sonst alle Whitespaces rauswerfen, könntet ihr euch jetzt fragen? Ganz einfach. Jedes Token bringt seine eigenen Regeln mit. Ich sage z.B. vor einem Operator und danach kommen Leerzeichen. Da werf ich also vorher alle Leerzeilen weg und schreibe meine zwei hin, die ich benötige. So einfach ist das.

    Den Filter müsst ihr dann ürbigens in das <code>filter</code> Verzeichnis des Beautifiers werfen. Und schon könnt ihr ihn auch verwenden.

    php_beautifier --filters "KeepOwnNewLines()"

    Und schon wieder ein Tool, das wir beherrschen. Fabelhaft. Ich habe übrigens auch einen Filter geschrieben, der mir wunderbar alle Gleichungen so einrückt, dass die Gleichheitszeichen übereinander stehen. Das gleiche für Arrays. Wer Interesse hat, einfach bei mir melden.

    Ach ja, den “Einbau” in PDT habe ich auch hinbekommen. Ein STRG-SHIFT-B formatiert mir meinen Code jetzt genau so, wie ich ihn haben will/muss. Wenn übrigens Inetresse besteht, dann kann ich mal einen Filter komplett erklären, so ähnlich wie wir es damals für den CodeSniffer gemacht haben. Denn so soll es ja nur ein kleiner Einblick sein und die Angst davor nehmen, den PHP_Beautifier zu verwenden und zu erweitern.

    Nils Langner

    Auch wenn Ihr es mir nicht glauben werdet, aber ich habe nichts gegen PHP. Ich rege mich einfach nur gerne auf. Ok so schlimm ist es auch nicht. Eigentlich wollte ich schon immer einen Blog haben und da ...

    Zum Profil von Nils Langner

    16 Kommentare »


    • raphaelniederer
      am 16. Oktober 2009 um 09:22 Uhr

      mmhhh… hab jetzt nicht ganz verstanden, wie man den anwenden kann (resp. wo)…

      wäre schön, wenn du uns das ein wenig genauer erklären könntest… :D

      danke


    • Nils Langner
      am 16. Oktober 2009 um 09:31 Uhr

      Moin Raphael, was hast du denn nicht genau Verstanden? Was der Beautifier ist? http://www.phphatesme.com/blog/tools/php_beautifier/


    • Nils Langner
      am 16. Oktober 2009 um 09:51 Uhr

      @Raphael: Was willst du denn noch wissen, was noch nicht in dem alten Artikel (http://www.phphatesme.com/blog/tools/php_beautifier/) beschrieben wurde.


    • raphaelniederer
      am 16. Oktober 2009 um 14:53 Uhr

      Aha, jetzt ist es mir doch schon viel verständlicher :D
      Hab da aber doch noch zwei Fragen:

      1. Wo kommt der oben geschriebene PHP-Code hin?
      2. Wie installiere ich PHP_Beauttifier auf Windows?

      Vielen Dank für deine Hilfe…


    • Andy
      am 20. Oktober 2009 um 09:44 Uhr

      Mich würde intressieren ,wie ich das Tool in Eclipse integrieren kann?


    • Nils Langner
      am 20. Oktober 2009 um 10:02 Uhr

      @Andy: Ich schreib nen Artikel zu ;) Nur für dich!


    • Markus
      am 21. Oktober 2009 um 10:44 Uhr

      Das mit der integration in PDT als Step-By-Step wäre schon sehr schön… denn auch nach einigen Versuchen habe ich den Beautifier mit PDT leider nicht zum laufen gebraucht. Und dann hätte ich endlich eine Alternative zum Zend Studio… ;)


    • Google Pagerank, PHP_Beautifier und barrierefreies jQuery - PHP_Beautifier, Barrierefrei, jQuery, iPhone, Pagerank - Guido Mühlwitz
      am 22. Oktober 2009 um 16:18 Uhr

      [...] PHP_Beautifier – Eigene Filter schreiben Mit dem PHP_Beautifier schafft man es, sogar die hartnäckigsten Programmier-Anarchisten an einen Coding-Standard zu binden. PHPHatesMe zeigt, wie man eigene Filter für das kleine Tool programmieren und dann auch anwenden kann. [...]


    • Philip
      am 19. November 2009 um 19:04 Uhr

      Hi, wäre schön, wenn du erklärst, wie die Formattierung in Eclipse einzubinden ist.
      Habt ihr irgendwo ein Filter zum Zend Coding Standard gesehen?

      Grüße
      Philip


    • Nils Langner
      am 19. November 2009 um 21:46 Uhr

      @Philip: Es gibt soviel ich weiß nur einen Coding Standard für PEAR. Wenn du einen erstellen willst, dann kann ich dir gerne meine Hilfe anbieten.
      Die Geschichte mit dem PDT und Beautifier kommt ganz bald. Versprochen.


    • Markus
      am 1. Februar 2010 um 16:42 Uhr

      @Nils … Für die Integrations ins PDT würde ich mcih auch brennend interessieren, da genau das gerade meine Aufgabe ist … Als External Tool läuft es bereits, nur kann ich es so nicht an Tastenkombinationen binden … Für einen kleinen Tip wäre ich sehr dankbar … :)

      Grüße,
      Markus


    • Mamali
      am 9. Februar 2010 um 08:51 Uhr

      Hi,

      wäre es grundsätzlich möglich den Zend Sniffer, anhand des PHP_Beautifier umsetzten zu lassen. D.h. suche alle Warnings und Errors und korrigiere sie dann auch?

      Gruß

      Mamali


    • Nils Langner
      am 9. Februar 2010 um 09:22 Uhr

      @Marmali: Natürlich geht das. Mit ein wenig Aufwand kannst du den PHP_beautifier dazu bringen genau nach dem Zend Standard zu arbeiten.


    • Mamali
      am 9. Februar 2010 um 09:32 Uhr

      @Nils: danke für die schnelle Antwort. Ich frag mich nur wie ich das machen könnte. Müsste ich dem Fall statt dem PHP_CodeSniffer_Sniffer Interface, PHP_Beautifier_Filter
      implementieren?


    • Henning
      am 15. Februar 2010 um 09:13 Uhr

      @Nils:
      Könntest du mal beschreiben, wie du den Beautifier in Eclipse integriert hast? Ich bekomme es irgendwie nicht hin nen Shortcut zu setzen. Bis jetzt läuft das Ganze nur als externes Tool.. Ich hoffe du kannst mir da ein wenig helfen.

      Liebe Grüße
      Henning


    • Paloran
      am 1. Juni 2010 um 21:14 Uhr

      Ist jetzt vielleicht ein bisschen spät für meinen Kommentar, aber wo steht denn nun wie man ihn in Eclipse PDT einbindet und den Zend Framework Coding Standard nutzt?

    RSS Feed für Kommentare zu diesem Artikel. TrackBack URL

    Hinterlasse einen Kommentar

    Werbung
    PHP Magazin
    Ausgabe 02/2010

    Dieses Mal mit Artikeln zu den Themen OpenSocial und Apache Shindig, Graphentheorie, Smarty3

    t3n
    Ausgabe 19

    Social Media (R)evolution. Weitere Themen sind noSQL, Crowdsourcing ...

    PHP Journal
    Ausgabe 2/2010

    PHP & Windows optimal nutzen, die besten PHP-CMS im Überblick, Google-API mit Zend Framework nutzen.

    Wir wurden schon öfters gefragt, ob man uns nicht irgendwie unterstützen kann. Die Antwort war immer einfach: Klar! Am einfachsten ist es eure nächsten Einkäufe bei Amazon über unsere Link abzuwickeln. Damit würdet ihr uns schon sehr helfen. Über Co-Autoren freuen wir uns aber noch mehr.