am 15. Oktober 2009
Bevor ich heute mit dem Artikel anfange, nochmal kurz einen Dank an Sven für seinen Artikel über PTI. Heute wollen wir uns mal wieder mit einem meiner Lieblinkstools beschäftigen: dem PHP_CodeSniffer. Ihr werdet in vielen Artikels ja schon rausgehört haben, dass die statische Code-Analyse eines meiner Steckenpferde ist und der Sniffer ist hier halt eines der besten Werkzeuge.Nachdem jetzt auch noch PTI den Einzug in mein PDT gefunden hat, ist die Lust auf neue Sniffs natürlich wieder gestiegen. Das Tool ist toll, nur leider gibt es kaum PHP Entwickler, die eigenen Sniffs schreiben und diese auch wieder zurückflißen lassen. Schade schade. PCS bringt zwar in der Grundinstallation einige sehr wichtige Sniffs mit, aber wenn man wirklich den “perfekten” Code schreiben will, dann fehlt es an der einen oder anderen Stelle noch.
Was der Sniffer wunderbar abdeckt sind Formatierungsregeln. Wo gehören Klammern hin und an welche Stellen müssen durch eine Leerzeichen geschmückt werden. Gar nicht zu bezweifeln ist, dass diese Sniffs einem helfen ein einheitliches Codebild zu generieren. Sie sind also wichtig. Ich würde aber gerne noch mehr Dinge mit dem Sniffer machen. Am liebsten Stellen im Code finden, die gefährlich, falsch oder unnötig sind. Aus diesem Grund würde ich gerne eine Art Wunschliste aufstellen, mit Sniffs, die mir persönlich fehlen. Ich habe natürlich die Hoffnung, dass ihr euch dann mal hinsetzt und sie programmiert. Vielleicht passiert es auch genau andersherum und ihr habt eine tolle Idee und ich programmiere sie euch.
- DefinedButNeverUsed Dieser Sniff findet alle Variablen, denen mal einen Wert zugewiesen bekommen haben, die aber danach nie wieder verwendet wurden. Wie es der Zufall will, habe ich den Sniff schon fertig, ich warte nur noch auf das O.K. meines Brötchengebers, dass ich es der Gemeinde “schenken” darf.
- UsedButNeverDefined Hier prüft der CodeSniffer, ob man mit Variablen hantiert, die niemals zuvor mit einem Wert gesegnet wurden. Den Sniff habe ich auch schon umgesetzt, musste dabei aber ein wenig tricksen, wenn es um Call-by-Reference Methoden ging. Werde ich aber noch angehen und dann auch veröffentlichen.
- privateNeverUsed Dieser Sniff findet private Methoden oder Attribute, die zwar definiert, aber niemals aufgerufen oder verwendet wurden. Hier habe ich noch nicht angefangen, das darf sich also jemand von euch schnappen.
- FunctionLength In den meisten Fällen beinhalten Coding Guidelines so einen Satz wie: “Jede Methode darf höchsten x Zeilen lang sein”. Das x kann in jedem Projekt anders sein, aber es gibt keinen Zweifel daran, dass es eine natürliche Grenze gibt, was ein Programmierer noch überblicken kann. Der Sniff sollte nicht schwer sein. Eigentlich muss man da nur die \n zählen in jeder Funktion. Also ran an den Speck.
Das waren auch eigentlich erstmal die Sniffs, die mir eingefallen sind. Ich bin mir aber sicher, dass ihr auch noch eine ganze Menge Ideen habt. Würde mich auf jeden Fall freuen, wenn ihr ein wenig Brainstormed. Vielleicht kennt auch der ein oder andere ein Feature im Zend Studio oder Netbeans, dass er gerne auf der Kommandozeile auch hätte. Habe mich ja heute zum Beispiel belehren lassen, dass der privateNeverUsed Sniff schon nativ in Netbeans integriert ist.