- Best configured vim
- Guter Code mit PHP
- PHP im Vim programmieren
In meiner Mini-Serie zur Softwareentwicklung in PHP mit dem Vim-Editor geht es nach der Auswahl der optimalen Vim-Konfiguration nun um die PHP-Werkzeuge, die zur Prüfung der Sourcecode-Qualität eingesetzt werden können.
Für nachnutzbaren Sourcecode genügt es nicht, die Syntax einer Sprache, grundlegende Programmiertechniken und ein paar Programmbibliotheken zu beherrschen. Vielmehr entwickeln bei Open Source Projekten die Communities
Coding Standards, wie in Python mit PEP8, in PHP neuerdings mit PSR-1 und PSR-2 oder Drupal mit seinen Coding Standards. In diesen Coding Standards werden z.B. Benennungsregeln für Variablen, Funktionen und Klassen, Dokumentationsvorgaben und Formatierungsregeln definiert.
Neben diesen Coding Standards sollen mittels weiterer Metriken potenzielle Fehlerquellen (Code smells) erkannt werden: Variablen mit sehr kurzen Namen, zu viele Verschachtelungsebenen in Kontrollstrukturen, fehlenden Dokumentation der Schnittstellen von Funktionen, etc.
In PHP-Projekten stehen für derlei Analysen1 die passenden Werkzeuge zur Verfügung (auch wenn man keine IDE verwendet). Im Folgenden sollen ein paar von ihnen vorgestellt werden. Ich nutze das Drupal-Core-Project2 als Analysegegenstand.
Syntax-Analyse
Ein Syntax-Check wird praktischerweise mit dem PHP-Interpreter durchgeführt:
$ php -l core/includes/database.inc
Es wird jeweils der erste gefundene Syntaxfehler angezeigt. So kann es eine Weile dauern, bis alle Fehler behoben worden sind.
Coding Standards
Für die Überprüfung der Coding Standards dient PHP_CodeSniffer. Es wird mit (fast) allen Linux-Distributionen und dank Homebrew für OSX3 mitgeliefert.
$ phpcs core/includes/database.inc
Alle Verstöße gegen die Coding Standards werden zeilenweise mit Angabe von Dateiname, Fehlerposition, Schwere (Warnung oder Fehler) und kurzer Beschreibung gelistet.
Da die Drupal Coding Standards von den PHP_CodeSniffer-Voreinstellungen abweichen müssen die Drupal Coding
Standards angegeben werden. Die Coding Standards werden als CodeSniffer-Regeln im coder.module
$ drush dl coder
$ phpcs \
--standard=modules/coder/coder_sniffer/Drupal/ruleset.xml \
core/includes/database.inc
Code smells
Das Werkzeug zum Aufspüren von Code smells ist PHP Mess Detector (phpmd), welches ein PHP-Pendant zum PMD aus der Java-Welt ist. Es wird ebenfalls mit (fast) allen Linux-Distributionen und dank Homebrew für OSX3 mitgeliefert.
$ phpmd core/modules/node/node.module text \
"cleancode,codesize,controversial,design,naming,unusedcode"
Das Programm erwartet drei Aufrufparameter: Die zu untersuchenden Datei oder Ordner, das Report-Format sowie das Regelset. Wenn phpmd
auf einen Ordner angewendet wird, dann müssen die drupal-spezifischen Dateisuffixe beim Programmaufruf angegeben werden, um als PHP-Dateien erkannt zu werden:
$ phpmd core/modules/node/ text "cleancode,codesize" \
--suffixes=module,inc,install,test,php,theme
Auch hier werden alle Verstöße gegen die Regelsets zeilenweise mit Angabe von Dateiname, Fehlerposition und kurzer Beschreibung gelistet.
Geht es auch einfacher?
Natürlich. Für diese Werkzeuge sollte es Integrationspakete für alle nennenswerten Programmiersprachen, Editoren und IDEs geben. In meinem nächsten Blogpost werde ich die Integration in Vim vorstellen, für das Syntastic-Erweiterung verantwortlich ist. Es ist aber immer gut zu wissen, was da „unter der Haube“ passiert.
Update: PHP_CodeSniffer ist nicht mehr in Homebrew-Repo enthalten. Es lässt sich aber über PEAR leicht nachinstallieren:
$ sudo pear install PHP_CodeSniffer
Update 2: Mittlerweile ist PHP_CodeSniffer wieder via Homebrew als homebrew/php/php-code-sniffer
zu haben. Danke an Daniel für den Hinweis im Kommentar.
- Man spricht dabei von statischer Code-Analyse. ↩︎
git clone --branch 8.x http://git.drupal.org/project/drupal.git
↩︎brew tap homebrew/php; brew install homebrew/php/php-code-sniffer
↩︎ ↩︎